Imported Upstream version 4.6.4 upstream/4.6.4
authorDongHun Kwak <dh0128.kwak@samsung.com>
Thu, 14 Jul 2022 04:33:18 +0000 (13:33 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Thu, 14 Jul 2022 04:33:18 +0000 (13:33 +0900)
113 files changed:
CHANGES.txt
LICENSE.txt [new file with mode: 0644]
Makefile
PKG-INFO
README.rst
benchmark/bench_etree.py
benchmark/benchbase.py
buildlibxml.py
doc/FAQ.txt
doc/capi.txt
doc/compatibility.txt
doc/html/FAQ.html
doc/html/api.html
doc/html/apidoc/_modules/collections/abc.html [deleted file]
doc/html/apidoc/_modules/index.html
doc/html/apidoc/_modules/lxml.html
doc/html/apidoc/_modules/lxml/ElementInclude.html
doc/html/apidoc/_modules/lxml/doctestcompare.html
doc/html/apidoc/_modules/lxml/html.html
doc/html/apidoc/_modules/lxml/html/_diffcommand.html
doc/html/apidoc/_modules/lxml/html/_setmixin.html
doc/html/apidoc/_modules/lxml/html/builder.html
doc/html/apidoc/_modules/lxml/html/formfill.html
doc/html/apidoc/_modules/lxml/isoschematron.html
doc/html/apidoc/_static/basic.css
doc/html/apidoc/_static/css/theme.css
doc/html/apidoc/_static/pygments.css
doc/html/apidoc/genindex.html
doc/html/apidoc/index.html
doc/html/apidoc/lxml.ElementInclude.html
doc/html/apidoc/lxml._elementpath.html
doc/html/apidoc/lxml.builder.html
doc/html/apidoc/lxml.cssselect.html
doc/html/apidoc/lxml.doctestcompare.html
doc/html/apidoc/lxml.etree.html
doc/html/apidoc/lxml.html
doc/html/apidoc/lxml.html.ElementSoup.html
doc/html/apidoc/lxml.html._diffcommand.html
doc/html/apidoc/lxml.html._setmixin.html
doc/html/apidoc/lxml.html.builder.html
doc/html/apidoc/lxml.html.clean.html
doc/html/apidoc/lxml.html.defs.html
doc/html/apidoc/lxml.html.diff.html
doc/html/apidoc/lxml.html.formfill.html
doc/html/apidoc/lxml.html.html
doc/html/apidoc/lxml.html.html5parser.html
doc/html/apidoc/lxml.html.soupparser.html
doc/html/apidoc/lxml.isoschematron.html
doc/html/apidoc/lxml.objectify.html
doc/html/apidoc/lxml.sax.html
doc/html/apidoc/py-modindex.html
doc/html/apidoc/search.html
doc/html/build.html
doc/html/capi.html
doc/html/changes-4.6.3.html [deleted file]
doc/html/changes-4.6.4.html [new file with mode: 0644]
doc/html/compatibility.html
doc/html/credits.html
doc/html/cssselect.html
doc/html/element_classes.html
doc/html/elementsoup.html
doc/html/extensions.html
doc/html/flattr-badge-large.png [deleted file]
doc/html/html5parser.html
doc/html/index.html
doc/html/installation.html
doc/html/intro.html
doc/html/lxml-source-howto.html
doc/html/lxmlhtml.html
doc/html/objectify.html
doc/html/parsing.html
doc/html/performance.html
doc/html/resolvers.html
doc/html/sax.html
doc/html/sitemap.html
doc/html/style.css
doc/html/tutorial.html
doc/html/validation.html
doc/html/xpathxslt.html
doc/licenses/ZopePublicLicense.txt [deleted file]
doc/main.txt
doc/mkhtml.py
doc/mklatex.py
doc/pdf/pubkey.asc [deleted file]
doc/performance.txt
doc/s5/lxml-ep2008.html
doc/s5/tagpython.png [deleted file]
doc/update_performance_results.py [new file with mode: 0644]
doc/xpathxslt.txt
setup.py
src/lxml.egg-info/PKG-INFO
src/lxml.egg-info/SOURCES.txt
src/lxml/__init__.py
src/lxml/_elementpath.c
src/lxml/builder.c
src/lxml/dtd.pxi
src/lxml/etree.c
src/lxml/etree.h
src/lxml/etree_api.h
src/lxml/html/clean.c
src/lxml/html/diff.c
src/lxml/includes/lxml-version.h
src/lxml/lxml.etree.h
src/lxml/lxml.etree_api.h
src/lxml/objectify.c
src/lxml/objectify.pyx
src/lxml/sax.c
src/lxml/serializer.pxi
src/lxml/tests/fuzz_xml_parse.py [new file with mode: 0644]
src/lxml/tests/test_dtd.py
src/lxml/tests/test_etree.py
test.py
tools/manylinux/build-wheels.sh

index 22f4d450b8d3c7934221885d6da96994aee96dfd..a5fae6487ecbd3f390f90d0bc5277494e6db8516 100644 (file)
@@ -2,6 +2,19 @@
 lxml changelog
 ==============
 
+4.6.4 (2021-11-01)
+==================
+
+Features added
+--------------
+
+* GH#317: A new property ``system_url`` was added to DTD entities.
+  Patch by Thirdegree.
+
+* GH#314: The ``STATIC_*`` variables in ``setup.py`` can now be passed via env vars.
+  Patch by Isaac Jurado.
+
+
 4.6.3 (2021-03-21)
 ==================
 
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644 (file)
index 0000000..a76d0ed
--- /dev/null
@@ -0,0 +1,29 @@
+Copyright (c) 2004 Infrae. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+
+  3. Neither the name of Infrae nor the names of its contributors may
+     be used to endorse or promote products derived from this software
+     without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
index a8c9de829bca8fd365e8a9f1c0182e41d61fc27b..555d851e869104f53cbe6ffc2256aa40d420c09a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ PYTHON3?=python3
 TESTFLAGS=-p -v
 TESTOPTS=
 SETUPFLAGS=
-LXMLVERSION:=$(shell sed -ne '/__version__/s|.*__version__\s*=\s*"\([^"]*\)".*|\1|p' src/lxml/__init__.py)
+LXMLVERSION:=$(shell $(PYTHON3) -c 'import re; print(re.findall(r"__version__\s*=\s*\"([^\"]+)\"", open("src/lxml/__init__.py").read())[0])' )
 
 PARALLEL?=$(shell $(PYTHON) -c 'import sys; print("-j7" if sys.version_info >= (3, 5) else "")' )
 PARALLEL3?=$(shell $(PYTHON3) -c 'import sys; print("-j7" if sys.version_info >= (3, 5) else "")' )
@@ -12,17 +12,21 @@ PY3_WITH_CYTHON?=$(shell $(PYTHON3) -c 'import Cython.Build.Dependencies' >/dev/
 CYTHON_WITH_COVERAGE?=$(shell $(PYTHON) -c 'import Cython.Coverage; import sys; assert not hasattr(sys, "pypy_version_info")' >/dev/null 2>/dev/null && echo " --coverage" || true)
 CYTHON3_WITH_COVERAGE?=$(shell $(PYTHON3) -c 'import Cython.Coverage; import sys; assert not hasattr(sys, "pypy_version_info")' >/dev/null 2>/dev/null && echo " --coverage" || true)
 
+PYTHON_BUILD_VERSION ?= *
 MANYLINUX_LIBXML2_VERSION=2.9.10
 MANYLINUX_LIBXSLT_VERSION=1.1.34
 MANYLINUX_CFLAGS=-O3 -g1 -pipe -fPIC -flto
 MANYLINUX_LDFLAGS=-flto
-MANYLINUX_IMAGE_X86_64=quay.io/pypa/manylinux1_x86_64
-MANYLINUX_IMAGE_686=quay.io/pypa/manylinux1_i686
-MANYLINUX_IMAGE_AARCH64=quay.io/pypa/manylinux2014_aarch64
 
-AARCH64_ENV=-e AR="/opt/rh/devtoolset-9/root/usr/bin/gcc-ar" \
-               -e NM="/opt/rh/devtoolset-9/root/usr/bin/gcc-nm" \
-               -e RANLIB="/opt/rh/devtoolset-9/root/usr/bin/gcc-ranlib"
+MANYLINUX_IMAGES= \
+       manylinux1_x86_64 \
+       manylinux1_i686 \
+       manylinux_2_24_x86_64 \
+       manylinux_2_24_i686 \
+       manylinux_2_24_aarch64 \
+       manylinux_2_24_ppc64le \
+       manylinux_2_24_s390x \
+       musllinux_1_1_x86_64
 
 .PHONY: all inplace inplace3 rebuild-sdist sdist build require-cython wheel_manylinux wheel
 
@@ -55,19 +59,22 @@ require-cython:
 qemu-user-static:
        docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
 
-wheel_manylinux: wheel_manylinux64 wheel_manylinux32 wheel_manylinuxaarch64
-wheel_manylinuxaarch64: qemu-user-static
+wheel_manylinux: $(addprefix wheel_,$(MANYLINUX_IMAGES))
+$(addprefix wheel_,$(filter-out %_x86_64, $(filter-out %_i686, $(MANYLINUX_IMAGES)))): qemu-user-static
 
-wheel_manylinux32 wheel_manylinux64 wheel_manylinuxaarch64: dist/lxml-$(LXMLVERSION).tar.gz
+wheel_%: dist/lxml-$(LXMLVERSION).tar.gz
        time docker run --rm -t \
                -v $(shell pwd):/io \
-               $(if $(patsubst %aarch64,,$@),,$(AARCH64_ENV)) \
+               -e AR=gcc-ar \
+               -e NM=gcc-nm \
+               -e RANLIB=gcc-ranlib \
                -e CFLAGS="$(MANYLINUX_CFLAGS) $(if $(patsubst %aarch64,,$@),-march=core2,-march=armv8-a -mtune=cortex-a72)" \
                -e LDFLAGS="$(MANYLINUX_LDFLAGS)" \
                -e LIBXML2_VERSION="$(MANYLINUX_LIBXML2_VERSION)" \
                -e LIBXSLT_VERSION="$(MANYLINUX_LIBXSLT_VERSION)" \
-               -e WHEELHOUSE=wheelhouse_$(subst wheel_,,$@) \
-               $(if $(filter $@,wheel_manylinuxaarch64),$(MANYLINUX_IMAGE_AARCH64),$(if $(patsubst %32,,$@),$(MANYLINUX_IMAGE_X86_64),$(MANYLINUX_IMAGE_686))) \
+               -e PYTHON_BUILD_VERSION="$(PYTHON_BUILD_VERSION)" \
+               -e WHEELHOUSE=$(subst wheel_,wheelhouse/,$@) \
+               quay.io/pypa/$(subst wheel_,,$@) \
                bash /io/tools/manylinux/build-wheels.sh /io/$<
 
 wheel:
@@ -89,6 +96,15 @@ valgrind_test_inplace: inplace
        valgrind --tool=memcheck --leak-check=full --num-callers=30 --suppressions=valgrind-python.supp \
                $(PYTHON) test.py
 
+fuzz: clean
+       $(MAKE) \
+               CC="/usr/bin/clang" \
+               CFLAGS="$$CFLAGS -fsanitize=fuzzer-no-link -g2" \
+               CXX="/usr/bin/clang++" \
+               CXXFLAGS="-fsanitize=fuzzer-no-link" \
+               inplace3
+       $(PYTHON3) src/lxml/tests/fuzz_xml_parse.py
+
 gdb_test_inplace: inplace
        @echo "file $(PYTHON)\nrun test.py" > .gdb.command
        gdb -x .gdb.command -d src -d src/lxml
index 6eceeea65ad0b2f2402ede890c1ae05f3e47fde3..805321695ed7e86492c039ebf1944ed1425c1795 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: lxml
-Version: 4.6.3
+Version: 4.6.4
 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
 Home-page: https://lxml.de/
 Author: lxml dev team
@@ -8,48 +8,6 @@ Author-email: lxml-dev@lxml.de
 Maintainer: lxml dev team
 Maintainer-email: lxml-dev@lxml.de
 License: BSD
-Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries.  It
-        provides safe and convenient access to these libraries using the ElementTree
-        API.
-        
-        It extends the ElementTree API significantly to offer support for XPath,
-        RelaxNG, XML Schema, XSLT, C14N and much more.
-        
-        To contact the project, go to the `project home page
-        <https://lxml.de/>`_ or see our bug tracker at
-        https://launchpad.net/lxml
-        
-        In case you want to use the current in-development version of lxml,
-        you can get it from the github repository at
-        https://github.com/lxml/lxml .  Note that this requires Cython to
-        build the sources, see the build instructions on the project home
-        page.  To the same end, running ``easy_install lxml==dev`` will
-        install lxml from
-        https://github.com/lxml/lxml/tarball/master#egg=lxml-dev if you have
-        an appropriate version of Cython installed.
-        
-        
-        After an official release of a new stable series, bug fixes may become
-        available at
-        https://github.com/lxml/lxml/tree/lxml-4.6 .
-        Running ``easy_install lxml==4.6bugfix`` will install
-        the unreleased branch state from
-        https://github.com/lxml/lxml/tarball/lxml-4.6#egg=lxml-4.6bugfix
-        as soon as a maintenance branch has been established.  Note that this
-        requires Cython to be installed at an appropriate version for the build.
-        
-        4.6.3 (2021-03-21)
-        ==================
-        
-        Bugs fixed
-        ----------
-        
-        * A vulnerability (CVE-2021-28957) was discovered in the HTML Cleaner by Kevin Chung,
-          which allowed JavaScript to pass through.  The cleaner now removes the HTML5
-          ``formaction`` attribute.
-        
-        
-        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
@@ -64,13 +22,62 @@ Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: C
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Text Processing :: Markup :: HTML
 Classifier: Topic :: Text Processing :: Markup :: XML
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*
+Provides-Extra: source
 Provides-Extra: cssselect
 Provides-Extra: html5
 Provides-Extra: htmlsoup
-Provides-Extra: source
+License-File: LICENSE.txt
+License-File: LICENSES.txt
+
+lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries.  It
+provides safe and convenient access to these libraries using the ElementTree
+API.
+
+It extends the ElementTree API significantly to offer support for XPath,
+RelaxNG, XML Schema, XSLT, C14N and much more.
+
+To contact the project, go to the `project home page
+<https://lxml.de/>`_ or see our bug tracker at
+https://launchpad.net/lxml
+
+In case you want to use the current in-development version of lxml,
+you can get it from the github repository at
+https://github.com/lxml/lxml .  Note that this requires Cython to
+build the sources, see the build instructions on the project home
+page.  To the same end, running ``easy_install lxml==dev`` will
+install lxml from
+https://github.com/lxml/lxml/tarball/master#egg=lxml-dev if you have
+an appropriate version of Cython installed.
+
+
+After an official release of a new stable series, bug fixes may become
+available at
+https://github.com/lxml/lxml/tree/lxml-4.6 .
+Running ``easy_install lxml==4.6bugfix`` will install
+the unreleased branch state from
+https://github.com/lxml/lxml/tarball/lxml-4.6#egg=lxml-4.6bugfix
+as soon as a maintenance branch has been established.  Note that this
+requires Cython to be installed at an appropriate version for the build.
+
+4.6.4 (2021-11-01)
+==================
+
+Features added
+--------------
+
+* GH#317: A new property ``system_url`` was added to DTD entities.
+  Patch by Thirdegree.
+
+* GH#314: The ``STATIC_*`` variables in ``setup.py`` can now be passed via env vars.
+  Patch by Isaac Jurado.
+
+
+
+
index 3ad1ba177ec66b9b971cd694ff35b94bb818414a..01962c35907aacd46aa9c3e2f146e53abd042844 100644 (file)
@@ -50,6 +50,11 @@ for other ways to support the lxml project,
 as well as commercial consulting, customisations and trainings on lxml and
 fast Python XML processing.
 
+Note that we are not accepting donations in crypto currencies.
+Much of the development and hosting for lxml is done in a carbon-neutral way
+or with compensated and very low emissions.
+Crypto currencies do not fit into that ambition.
+
 .. |Donate| image:: https://lxml.de/paypal_btn_donateCC_LG.png
             :width: 160
             :height: 47
@@ -69,6 +74,12 @@ Another supporter of the lxml project is
 Project income report
 ---------------------
 
+* Total project income in 2020: EUR 6065,86  (506.49 € / month)
+
+  - Tidelift: EUR 4064.77
+  - Paypal: EUR 1401.09
+  - other: EUR 600.00
+
 * Total project income in 2019: EUR 717.52  (59.79 € / month)
 
   - Tidelift: EUR 360.30
index 0f66db8e9ddd8d6c425e898205801cd6a5561010..69ac5208e76abc692183ac1a47ade36f4af8ee22 100644 (file)
@@ -1,9 +1,10 @@
 import copy
+from io import BytesIO
 from itertools import *
 
 import benchbase
 from benchbase import (with_attributes, with_text, onlylib,
-                       serialized, children, nochange, BytesIO)
+                       serialized, children, nochange)
 
 TEXT  = "some ASCII text"
 UTEXT = u"some klingon: \F8D2"
index e34e610369f47c8d9ca52a597398a5b3b78a8d95..a9f9ad857f4ea62b7d0d18e0320b0f93d72595a5 100644 (file)
@@ -1,4 +1,4 @@
-import sys, re, string, time, copy, gc
+import sys, re, string, copy, gc
 from itertools import *
 import time
 
@@ -474,6 +474,8 @@ def main(benchmark_class):
     if import_lxml:
         from lxml import etree
         _etrees.append(etree)
+        print("Using lxml %s (with libxml2 %s)" % (
+            etree.__version__, '.'.join(map(str, etree.LIBXML_VERSION))))
 
         try:
             sys.argv.remove('-fel')
@@ -521,6 +523,8 @@ def main(benchmark_class):
         print("No library to test. Exiting.")
         sys.exit(1)
 
+    print("Running benchmarks in Python %s" % (sys.version_info,))
+
     print("Preparing test suites and trees ...")
     selected = set( sys.argv[1:] )
     benchmark_suites, benchmarks = \
index f45c860864ed08bffd0200b1871e5ed6afece8a7..086d9115ddba61530c9be3d50c41702ac73f542d 100644 (file)
@@ -1,4 +1,4 @@
-import os, re, sys, subprocess
+import os, re, sys, subprocess, platform
 import tarfile
 from distutils import log, version
 from contextlib import closing
@@ -38,7 +38,13 @@ def download_and_extract_windows_binaries(destdir):
         if release_path in filename
     ]
 
-    arch = "win64" if sys.maxsize > 2**32 else "win32"
+    if platform.machine() == 'ARM64':
+        arch = "win-arm64"
+    elif sys.maxsize > 2**32:
+        arch = "win64"
+    else:
+        arch = "win32"
+
     if sys.version_info < (3, 5):
         arch = 'vs2008.' + arch
 
@@ -437,6 +443,15 @@ def build_libxml2xslt(download_dir, build_dir,
     if not has_current_lib("libxml2", libxml2_dir):
         cmmi(libxml2_configure_cmd, libxml2_dir, multicore, **call_setup)
 
+    # Fix up libxslt configure script (needed up to and including 1.1.34)
+    # https://gitlab.gnome.org/GNOME/libxslt/-/commit/90c34c8bb90e095a8a8fe8b2ce368bd9ff1837cc
+    with open(os.path.join(libxslt_dir, "configure"), 'rb') as f:
+        config_script = f.read()
+    if b' --libs print ' in config_script:
+        config_script = config_script.replace(b' --libs print ', b' --libs ')
+        with open(os.path.join(libxslt_dir, "configure"), 'wb') as f:
+            f.write(config_script)
+
     # build libxslt
     libxslt_configure_cmd = configure_cmd + [
         '--without-python',
index 24ec8c42e36849b6029b2e8b290bd3c330fb9f02..48f69a6adf63971ee29d535a88414c650e17ea8b 100644 (file)
@@ -117,11 +117,11 @@ wrote a nice article about high-performance aspects when `parsing
 large files with lxml`_.
 
 .. _`lxml.etree Tutorial`:      tutorial.html
-.. _`tutorial for ElementTree`: https://effbot.org/zone/element.htm
+.. _`tutorial for ElementTree`: https://web.archive.org/web/20200720191942/https://effbot.org/zone/element.htm
 .. _`extended etree API`:        api.html
 .. _`objectify documentation`:  objectify.html
-.. _`Python XML processing with lxml`: http://www.nmt.edu/tcc/help/pubs/pylxml/
-.. _`element library`:          https://effbot.org/zone/element-lib.htm
+.. _`Python XML processing with lxml`: https://web.archive.org/web/20190522191656/http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/index.html
+.. _`element library`:          https://web.archive.org/web/20200703234431/http://www.effbot.org/zone/element-lib.htm
 .. _`parsing large files with lxml`: http://www.ibm.com/developerworks/xml/library/x-hiperfparse/
 
 
@@ -143,7 +143,7 @@ web page`_.
 The `generated API documentation`_ is a comprehensive API reference
 for the lxml package.
 
-.. _`ElementTree API`: https://effbot.org/zone/element-index.htm
+.. _`ElementTree API`: https://web.archive.org/web/20200703191710/http://www.effbot.org/zone/element-index.htm
 .. _`the web page`:    https://lxml.de/#documentation
 .. _`generated API documentation`: api/index.html
 
@@ -1239,8 +1239,8 @@ Element.  Its children will then inherit this prefix for serialization.
 How can I specify a default namespace for XPath expressions?
 ------------------------------------------------------------
 
-You can't.  In XPath, there is no such thing as a default namespace.  Just use
-an arbitrary prefix and let the namespace dictionary of the XPath evaluators
+You can't.  In XPath 1.0, there is no such thing as a default namespace.  Just
+use an arbitrary prefix and let the namespace dictionary of the XPath evaluators
 map it to your namespace.  See also the question above.
 
 
index 0167a5a4ebef1a97c4783df5e7420c50494392a7..0471d811e15b07be094fbd936cba1b067778ba89 100644 (file)
@@ -7,11 +7,10 @@ C extensions to efficiently access public functions and classes of lxml,
 without going through the Python API.
 
 The API is described in the file `etreepublic.pxd`_, which is directly
-c-importable by extension modules implemented in Pyrex_ or Cython_.
+c-importable by extension modules implemented in Cython_.
 
 .. _`etreepublic.pxd`: https://github.com/lxml/lxml/blob/master/src/lxml/includes/etreepublic.pxd
-.. _Cython: http://cython.org
-.. _Pyrex: http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/
+.. _Cython: https://cython.org
 
 .. contents::
 ..
@@ -45,7 +44,7 @@ Writing external modules in Cython
 ----------------------------------
 
 This is the easiest way of extending lxml at the C level.  A Cython_
-(or Pyrex_) module should start like this::
+module should start like this::
 
     # My Cython extension
 
index e23d181716ac00483ac457a029d358ce97018103..654cb7c4e7916ddbcae79911cd409727ca1b99f4 100644 (file)
@@ -146,11 +146,11 @@ ElementTree.  Nonetheless, some differences and incompatibilities exist:
   not.  This means that a comment text "text" that ElementTree serializes as
   "<!-- text -->" will become "<!--text-->" in lxml.
 
-* When the string '*' is used as tag filter in the ``Element.getiterator()``
-  method, ElementTree returns all elements in the tree, including comments and
-  processing instructions. lxml.etree only returns real Elements, i.e. tree
-  nodes that have a string tag name.  Without a filter, both libraries iterate
-  over all nodes.
+* When the string ``'*'`` is used as tag filter in the ``Element.iter()`` and
+  ``.find*()`` methods, ElementTree returns all elements in the tree, including
+  comments and processing instructions. lxml.etree only returns real Elements,
+  i.e. tree nodes that have a string tag name.  Without a filter, both libraries
+  iterate over all nodes.
 
   Note that currently only lxml.etree supports passing the ``Element`` factory
   function as filter to select only Elements.  Both libraries support passing
index b96af6fd526c49cd933d391602a9805816052b88..6a3cb6b8de2e3f2e7b4612f2b8c08f456181c6a9 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>lxml FAQ - Frequently Asked Questions</title>
 <meta content="Frequently Asked Questions about lxml (FAQ)" name="description" />
 <meta content="lxml, lxml.etree, FAQ, frequently asked questions" name="keywords" />
@@ -26,7 +26,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="lxml-faq-frequently-asked-questions">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu current" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml FAQ - Frequently Asked Questions</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu current" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml FAQ - Frequently Asked Questions</h1>
 
 <p>Frequently asked questions on lxml.  See also the notes on <a class="reference external" href="compatibility.html">compatibility</a> to
 <a class="reference external" href="http://effbot.org/zone/element-index.htm">ElementTree</a>.</p>
@@ -108,13 +108,13 @@ function hide_menu() {
 (just as any good documentation), it provides an overview of the most
 important concepts in <tt class="docutils literal">lxml.etree</tt>.  If you want to help out,
 improving the tutorial is a very good place to start.</p>
-<p>There is also a <a class="reference external" href="https://effbot.org/zone/element.htm">tutorial for ElementTree</a> which works for
+<p>There is also a <a class="reference external" href="https://web.archive.org/web/20200720191942/https://effbot.org/zone/element.htm">tutorial for ElementTree</a> which works for
 <tt class="docutils literal">lxml.etree</tt>.  The documentation of the <a class="reference external" href="api.html">extended etree API</a> also
-contains many examples for <tt class="docutils literal">lxml.etree</tt>.  Fredrik Lundh's <a class="reference external" href="https://effbot.org/zone/element-lib.htm">element
+contains many examples for <tt class="docutils literal">lxml.etree</tt>.  Fredrik Lundh's <a class="reference external" href="https://web.archive.org/web/20200703234431/http://www.effbot.org/zone/element-lib.htm">element
 library</a> contains a lot of nice recipes that show how to solve common
 tasks in ElementTree and lxml.etree.  To learn using
 <tt class="docutils literal">lxml.objectify</tt>, read the <a class="reference external" href="objectify.html">objectify documentation</a>.</p>
-<p>John Shipman has written another tutorial called <a class="reference external" href="http://www.nmt.edu/tcc/help/pubs/pylxml/">Python XML
+<p>John Shipman has written another tutorial called <a class="reference external" href="https://web.archive.org/web/20190522191656/http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/index.html">Python XML
 processing with lxml</a> that contains lots of examples.  Liza Daly
 wrote a nice article about high-performance aspects when <a class="reference external" href="http://www.ibm.com/developerworks/xml/library/x-hiperfparse/">parsing
 large files with lxml</a>.</p>
@@ -123,8 +123,8 @@ large files with lxml</a>.</p>
 <h2>Where can I find more documentation about lxml?</h2>
 <p>There is a lot of documentation on the web and also in the Python
 standard library documentation, as lxml implements the well-known
-<a class="reference external" href="https://effbot.org/zone/element-index.htm">ElementTree API</a> and tries to follow its documentation as closely as
-possible.  The recipes in Fredrik Lundh's <a class="reference external" href="https://effbot.org/zone/element-lib.htm">element library</a> are
+<a class="reference external" href="https://web.archive.org/web/20200703191710/http://www.effbot.org/zone/element-index.htm">ElementTree API</a> and tries to follow its documentation as closely as
+possible.  The recipes in Fredrik Lundh's <a class="reference external" href="https://web.archive.org/web/20200703234431/http://www.effbot.org/zone/element-lib.htm">element library</a> are
 generally worth taking a look at.  There are a couple of issues where
 lxml cannot keep up compatibility.  They are described in the
 <a class="reference external" href="compatibility.html">compatibility</a> documentation.</p>
@@ -272,7 +272,7 @@ also the section on <a class="reference external" href="#threading">threading</a
 contained text, child Elements and a tail text.  This means that whenever you
 serialise an Element, you will get all parts of that Element:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;tag&gt;text&lt;child/&gt;&lt;/tag&gt;tail&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
 <span class="go">&lt;tag&gt;text&lt;child/&gt;&lt;/tag&gt;tail</span>
 </pre></div>
 <p>Here is an example that shows why not serialising the tail would be
@@ -280,15 +280,15 @@ even more surprising from an object point of view:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"test"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"TEXT"</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">&lt;test&gt;TEXT&lt;/test&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="s2">"TAIL"</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">&lt;test&gt;TEXT&lt;/test&gt;TAIL</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="bp">None</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="kc">None</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">&lt;test&gt;TEXT&lt;/test&gt;</span>
 </pre></div>
 <p>Just imagine a Python list where you append an item and it doesn't
@@ -534,12 +534,12 @@ versions of libxml2 and libxslt - and make sure they are used.
 <div class="syntax"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
 <span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
 
-<span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'Python'</span><span class="p">,</span>           <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">))</span>
-<span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'lxml.etree'</span><span class="p">,</span>       <span class="n">etree</span><span class="o">.</span><span class="n">LXML_VERSION</span><span class="p">))</span>
-<span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxml used'</span><span class="p">,</span>      <span class="n">etree</span><span class="o">.</span><span class="n">LIBXML_VERSION</span><span class="p">))</span>
-<span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxml compiled'</span><span class="p">,</span>  <span class="n">etree</span><span class="o">.</span><span class="n">LIBXML_COMPILED_VERSION</span><span class="p">))</span>
-<span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxslt used'</span><span class="p">,</span>     <span class="n">etree</span><span class="o">.</span><span class="n">LIBXSLT_VERSION</span><span class="p">))</span>
-<span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxslt compiled'</span><span class="p">,</span> <span class="n">etree</span><span class="o">.</span><span class="n">LIBXSLT_COMPILED_VERSION</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'Python'</span><span class="p">,</span>           <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'lxml.etree'</span><span class="p">,</span>       <span class="n">etree</span><span class="o">.</span><span class="n">LXML_VERSION</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxml used'</span><span class="p">,</span>      <span class="n">etree</span><span class="o">.</span><span class="n">LIBXML_VERSION</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxml compiled'</span><span class="p">,</span>  <span class="n">etree</span><span class="o">.</span><span class="n">LIBXML_COMPILED_VERSION</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxslt used'</span><span class="p">,</span>     <span class="n">etree</span><span class="o">.</span><span class="n">LIBXSLT_VERSION</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s1">'libxslt compiled'</span><span class="p">,</span> <span class="n">etree</span><span class="o">.</span><span class="n">LIBXSLT_COMPILED_VERSION</span><span class="p">))</span>
 </pre></div>
 <p>If you can figure that the problem is not in lxml but in the
 underlying libxml2 or libxslt, you can ask right on the respective
@@ -756,7 +756,7 @@ only added between nodes that do not contain data.  This is always the case
 for trees constructed element-by-element, so no problems should be expected
 here.  For parsed trees, a good way to assure that no conflicting whitespace
 is left in the tree is the <tt class="docutils literal">remove_blank_text</tt> option:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 </pre></div>
 <p>This will allow the parser to drop blank text nodes when constructing the
@@ -782,7 +782,7 @@ use either a DTD to tell the parser which whitespace it can safely
 ignore, or remove the ignorable whitespace manually after parsing,
 e.g. by setting all tail text to None:</p>
 <div class="syntax"><pre><span></span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">():</span>
-    <span class="n">element</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">element</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="kc">None</span>
 </pre></div>
 <p>Fredrik Lundh also has a Python-level function for indenting XML by
 appending whitespace to tags.  It can be found on his <a class="reference external" href="http://effbot.org/zone/element-lib.htm#prettyprint">element library
@@ -975,7 +975,7 @@ you can apply the following function:</p>
 <h1>XPath and Document Traversal</h1>
 <div class="section" id="what-are-the-findall-and-xpath-methods-on-element-tree">
 <h2>What are the <tt class="docutils literal">findall()</tt> and <tt class="docutils literal">xpath()</tt> methods on Element(Tree)?</h2>
-<p><tt class="docutils literal">findall()</tt> is part of the original <a class="reference external" href="https://effbot.org/zone/element-index.htm">ElementTree API</a>.  It supports a
+<p><tt class="docutils literal">findall()</tt> is part of the original <a class="reference external" href="https://web.archive.org/web/20200703191710/http://www.effbot.org/zone/element-index.htm">ElementTree API</a>.  It supports a
 <a class="reference external" href="http://effbot.org/zone/element-xpath.htm">simple subset of the XPath language</a>, without predicates, conditions and
 other advanced features.  It is very handy for finding specific tags in a
 tree.  Another important difference is namespace handling, which uses the
@@ -1014,8 +1014,8 @@ Element.  Its children will then inherit this prefix for serialization.</p>
 </div>
 <div class="section" id="how-can-i-specify-a-default-namespace-for-xpath-expressions">
 <h2>How can I specify a default namespace for XPath expressions?</h2>
-<p>You can't.  In XPath, there is no such thing as a default namespace.  Just use
-an arbitrary prefix and let the namespace dictionary of the XPath evaluators
+<p>You can't.  In XPath 1.0, there is no such thing as a default namespace.  Just
+use an arbitrary prefix and let the namespace dictionary of the XPath evaluators
 map it to your namespace.  See also the question above.</p>
 </div>
 <div class="section" id="how-can-i-modify-the-tree-during-iteration">
@@ -1050,7 +1050,7 @@ advance beyond the critical point before touching the tree structure.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index c90579f86fc46d80b219e18abcc0bf7cd9bdf544..89254ec9e554dd315bab7188262ab1a8a62c0360 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>APIs specific to lxml.etree</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="apis-specific-to-lxml-etree">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu current" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">APIs specific to lxml.etree</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu current" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">APIs specific to lxml.etree</h1>
 
 <p>lxml.etree tries to follow established APIs wherever possible.  Sometimes,
 however, the need to expose a feature in an easy way led to the invention of a
@@ -93,22 +93,22 @@ model.  It knows about parents and siblings of elements:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">d</span><span class="p">,</span>    <span class="s2">"e"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">b</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span> <span class="o">==</span> <span class="n">root</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">getnext</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">getnext</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">c</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">getprevious</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">getprevious</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 </pre></div>
 <p>Elements always live within a document context in lxml.  This implies that
 there is also a notion of an absolute document root.  You can retrieve an
 ElementTree for the root node of a document from any of its elements.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">getroottree</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 </pre></div>
 <p>Note that this is different from wrapping an Element in an ElementTree.  You
 can use ElementTrees to create XML trees with an explicit root node:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">d</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span>
 <span class="go">b'&lt;d&gt;&lt;e/&gt;&lt;/d&gt;'</span>
@@ -120,11 +120,11 @@ will understand the explicitly chosen root as root node of a document.  They
 will not see any elements outside the ElementTree.  However, ElementTrees do
 not modify their Elements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">element</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">d</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">getroottree</span><span class="p">()</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">getroottree</span><span class="p">()</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 </pre></div>
 <p>The rule is that all operations that are applied to Elements use either the
@@ -149,11 +149,11 @@ iteration over the children, following/preceding siblings, ancestors and
 descendants of an element, as defined by the respective XPath axis:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">child</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iterchildren</span><span class="p">()</span> <span class="p">]</span>
 <span class="go">['a', 'b', 'c', 'd']</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">child</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iterchildren</span><span class="p">(</span><span class="nb">reversed</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="p">]</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">child</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iterchildren</span><span class="p">(</span><span class="nb">reversed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">['d', 'c', 'b', 'a']</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">sibling</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">sibling</span> <span class="ow">in</span> <span class="n">b</span><span class="o">.</span><span class="n">itersiblings</span><span class="p">()</span> <span class="p">]</span>
 <span class="go">['c', 'd']</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">sibling</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">sibling</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">itersiblings</span><span class="p">(</span><span class="n">preceding</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="p">]</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">sibling</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">sibling</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">itersiblings</span><span class="p">(</span><span class="n">preceding</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">['b', 'a']</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">ancestor</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">ancestor</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">iterancestors</span><span class="p">()</span> <span class="p">]</span>
 <span class="go">['d', 'root']</span>
@@ -187,7 +187,7 @@ traverses the tree in document order.  This is implemented by the
 breadth-first traversal, it is almost as simple if you use the
 <tt class="docutils literal">collections.deque</tt> type.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s1">'&lt;root&gt;&lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;/a&gt;&lt;d&gt;&lt;e/&gt;&lt;/d&gt;&lt;/root&gt;'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'unicode'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'unicode'</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;a&gt;</span>
 <span class="go">    &lt;b/&gt;</span>
@@ -203,7 +203,7 @@ breadth-first traversal, it is almost as simple if you use the
 <span class="gp">&gt;&gt;&gt; </span><span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
 <span class="gp">... </span>   <span class="n">el</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>  <span class="c1"># pop next element</span>
 <span class="gp">... </span>   <span class="n">queue</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>      <span class="c1"># append its children</span>
-<span class="gp">... </span>   <span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>   <span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 <span class="go">a</span>
 <span class="go">d</span>
@@ -239,7 +239,7 @@ copy attached to the exception:</p>
 to retrieve the log entries or filter them by a specific type, error domain or
 error level:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">log</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">error_log</span><span class="o">.</span><span class="n">filter_from_level</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">ErrorLevels</span><span class="o">.</span><span class="n">FATAL</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">log</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">log</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
 <span class="go">&lt;string&gt;:4:8:FATAL:PARSER:ERR_TAG_NAME_MISMATCH: Opening and ending tag mismatch: a line 3 and root</span>
 </pre></div>
 <p>This might look a little cryptic at first, but it is the information that
@@ -250,11 +250,11 @@ or the filename if available).  Here, PARSER is the so-called error domain,
 see <tt class="docutils literal">lxml.etree.ErrorDomains</tt> for that.  You can get it from a log entry
 like this:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">entry</span> <span class="o">=</span> <span class="n">log</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">domain_name</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">domain_name</span><span class="p">)</span>
 <span class="go">PARSER</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span>
 <span class="go">ERR_TAG_NAME_MISMATCH</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
 <span class="go">&lt;string&gt;</span>
 </pre></div>
 <p>There is also a convenience attribute <tt class="docutils literal">error_log.last_error</tt> that returns the
@@ -284,7 +284,7 @@ to convert serialised XML to its canonical form directly, without creating
 a tree in memory.  By default, it returns the canonical output, but can be
 directed to write it to a file instead.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c14n_xml</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">canonicalize</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;test z='1' y='2'/&gt;&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">c14n_xml</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">c14n_xml</span><span class="p">)</span>
 <span class="go">&lt;root&gt;&lt;test y="2" z="1"&gt;&lt;/test&gt;&lt;/root&gt;</span>
 </pre></div>
 </div>
@@ -296,7 +296,7 @@ printing XML through a keyword argument:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;root&gt;&lt;test/&gt;&lt;/root&gt;'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;test/&gt;</span>
 <span class="go">&lt;/root&gt;</span>
@@ -313,27 +313,27 @@ is required by the standard:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">unicode_root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"utf-8"</span><span class="p">)</span>
 <span class="go">b'&lt;t\xe3\x84\xa0st&gt;t\xe0\xa8\x8ast&lt;/t\xe3\x84\xa0st&gt;'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">unicode_root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"iso-8859-1"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">unicode_root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"iso-8859-1"</span><span class="p">))</span>
 <span class="go">&lt;?xml version='1.0' encoding='iso-8859-1'?&gt;</span>
 <span class="go">&lt;t&amp;#12576;st&gt;t&amp;#2570;st&lt;/t&amp;#12576;st&gt;</span>
 </pre></div>
 <p>Also see the general remarks on <a class="reference external" href="parsing.html#python-unicode-strings">Unicode support</a>.</p>
 <p>You can enable or disable the declaration explicitly by passing another
 keyword argument for the serialisation:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xml_declaration</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xml_declaration</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;?xml version='1.0' encoding='ASCII'?&gt;</span>
 <span class="go">&lt;root&gt;&lt;test/&gt;&lt;/root&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">unicode_root</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">unicode_root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"UTF-16LE"</span><span class="p">,</span>
-<span class="gp">... </span>                             <span class="n">xml_declaration</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">... </span>                             <span class="n">xml_declaration</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 <span class="go">b'&lt;\x00t\x00 1s\x00t\x00/\x00&gt;\x00'</span>
 </pre></div>
 <p>Note that a standard compliant XML parser will not consider the last line
 well-formed XML if the encoding is not explicitly provided somehow, e.g. in an
 underlying transport protocol:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">notxml</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">unicode_root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"UTF-16LE"</span><span class="p">,</span>
-<span class="gp">... </span>                                      <span class="n">xml_declaration</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">... </span>                                      <span class="n">xml_declaration</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="n">notxml</span><span class="p">)</span>        <span class="c1">#doctest: +ELLIPSIS</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
@@ -344,11 +344,11 @@ of the document with a user provided DOCTYPE:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">xml</span> <span class="o">=</span> <span class="s1">'&lt;!DOCTYPE root&gt;</span><span class="se">\n</span><span class="s1">&lt;root/&gt;'</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">xml</span><span class="p">))</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">))</span>
 <span class="go">&lt;!DOCTYPE root&gt;</span>
 <span class="go">&lt;root/&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">,</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">,</span>
 <span class="gp">... </span>    <span class="n">doctype</span><span class="o">=</span><span class="s1">'&lt;!DOCTYPE root SYSTEM "/tmp/test.dtd"&gt;'</span><span class="p">))</span>
 <span class="go">&lt;!DOCTYPE root SYSTEM "/tmp/test.dtd"&gt;</span>
 <span class="go">&lt;root/&gt;</span>
@@ -480,7 +480,7 @@ CDATA are rare, this is the best way to deal with this issue.</p>
 document is required to adhere to existing XML language definitions.
 For these special cases, you can instruct the parser to leave CDATA
 sections in the document:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">strip_cdata</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">strip_cdata</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s1">'&lt;root&gt;&lt;![CDATA[test]]&gt;&lt;/root&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">text</span>
 <span class="go">'test'</span>
@@ -519,7 +519,7 @@ xinclude() method on a tree:</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span><span class="o">.</span><span class="n">xinclude</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()))</span>
 <span class="go">&lt;doc xmlns:xi="http://www.w3.org/2001/XInclude"&gt;</span>
 <span class="go">&lt;foo/&gt;</span>
 <span class="go">&lt;a xml:base="doc/test.xml"/&gt;</span>
@@ -534,7 +534,7 @@ resolvers, you have to stick to the external Python module.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
diff --git a/doc/html/apidoc/_modules/collections/abc.html b/doc/html/apidoc/_modules/collections/abc.html
deleted file mode 100644 (file)
index 7784193..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>collections.abc &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
-            <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
-          </a>
-
-          
-            
-            
-              <div class="version">
-                4.6.2
-              </div>
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../lxml.html">lxml package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.html.html">lxml.html package</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.ElementSoup.html">lxml.html.ElementSoup module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html._diffcommand.html">lxml.html._diffcommand module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html._setmixin.html">lxml.html._setmixin module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.builder.html">lxml.html.builder module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.clean.html">lxml.html.clean module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.defs.html">lxml.html.defs module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.diff.html">lxml.html.diff module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.formfill.html">lxml.html.formfill module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.html5parser.html">lxml.html.html5parser module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../../lxml.html.soupparser.html">lxml.html.soupparser module</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.isoschematron.html">lxml.isoschematron package</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.ElementInclude.html">lxml.ElementInclude module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml._elementpath.html">lxml._elementpath module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.builder.html">lxml.builder module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.cssselect.html">lxml.cssselect module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.doctestcompare.html">lxml.doctestcompare module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.etree.html">lxml.etree module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.objectify.html">lxml.objectify module</a></li>
-<li class="toctree-l2"><a class="reference internal" href="../../lxml.sax.html">lxml.sax module</a></li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">lxml</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>collections.abc</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for collections.abc</h1><div class="highlight"><pre>
-<span></span><span class="kn">from</span> <span class="nn">_collections_abc</span> <span class="kn">import</span> <span class="o">*</span>
-<span class="kn">from</span> <span class="nn">_collections_abc</span> <span class="kn">import</span> <span class="n">__all__</span>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
index 8b7ffcc8ed2650cc3039bd86e61c2d4a096f095b..39117685e967b8a060923ee248d583d465be359f 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>Overview: module code &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
         <script src="../_static/jquery.js"></script>
         <script src="../_static/underscore.js"></script>
         <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
+    <script src="../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../index.html" class="icon icon-home"> lxml
             <img src="../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
       <li>Overview: module code</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>All modules for which code is available</h1>
-<ul><li><a href="collections/abc.html">collections.abc</a></li>
+<ul><li><a href="_abc.html">_abc</a></li>
 <li><a href="lxml.html">lxml</a></li>
 <ul><li><a href="lxml/ElementInclude.html">lxml.ElementInclude</a></li>
 <li><a href="lxml/_elementpath.html">lxml._elementpath</a></li>
 </ul></ul>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 06405901f2c6151acfc16625048bcf32900384f8..5c211513c5aba2c618576b71f162b48c5cf1842d 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
         <script src="../_static/jquery.js"></script>
         <script src="../_static/underscore.js"></script>
         <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
+    <script src="../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../index.html" class="icon icon-home"> lxml
             <img src="../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="index.html">Module code</a> &raquo;</li>
-        
       <li>lxml</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml</h1><div class="highlight"><pre>
 <span></span><span class="c1"># this is a package</span>
 
-<span class="n">__version__</span> <span class="o">=</span> <span class="s2">&quot;4.6.2&quot;</span>
+<span class="n">__version__</span> <span class="o">=</span> <span class="s2">&quot;4.6.4&quot;</span>
 
 
 <div class="viewcode-block" id="get_include"><a class="viewcode-back" href="../lxml.html#lxml.get_include">[docs]</a><span class="k">def</span> <span class="nf">get_include</span><span class="p">():</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 1d76824ff034e180f33dbefc1a3937e713201d27..55d0e0eb1d316538b3b2b94bebe165f473a3bd87 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.ElementInclude &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/jquery.js"></script>
         <script src="../../_static/underscore.js"></script>
         <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
+    <script src="../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../index.html" class="icon icon-home"> lxml
             <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../lxml.html">lxml</a> &raquo;</li>
-        
       <li>lxml.ElementInclude</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.ElementInclude</h1><div class="highlight"><pre>
 <span></span><span class="c1">#</span>
 <span class="c1"># ElementTree</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 6db6349b27fc5b25ddc97267b0a7cf08620777dd..e0514c23df61fc8966856a8d4762168bc493b9db 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.doctestcompare &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/jquery.js"></script>
         <script src="../../_static/underscore.js"></script>
         <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
+    <script src="../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../index.html" class="icon icon-home"> lxml
             <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../lxml.html">lxml</a> &raquo;</li>
-        
       <li>lxml.doctestcompare</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.doctestcompare</h1><div class="highlight"><pre>
 <span></span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">lxml-based doctest output comparison.</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 966c713c559cc62681a141de35eed59aa5c5c199..d224ec7cf8986ccd8bedc67ed5e2ea0593e02fc9 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.html &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/jquery.js"></script>
         <script src="../../_static/underscore.js"></script>
         <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
+    <script src="../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../index.html" class="icon icon-home"> lxml
             <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../lxml.html">lxml</a> &raquo;</li>
-        
       <li>lxml.html</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.html</h1><div class="highlight"><pre>
 <span></span><span class="c1"># Copyright (c) 2004 Ian Bicking. All rights reserved.</span>
 <span class="c1">#</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 5a9d6b03cc4457c6f923770920603174668bd09a..71b91cb5c2ccb4c3b8b403375acc9d3490982c17 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.html._diffcommand &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/jquery.js"></script>
         <script src="../../../_static/underscore.js"></script>
         <script src="../../../_static/doctools.js"></script>
-        <script src="../../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
-
-    
+    <script src="../../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../../index.html" class="icon icon-home"> lxml
             <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../../lxml.html">lxml</a> &raquo;</li>
-        
           <li><a href="../html.html">lxml.html</a> &raquo;</li>
-        
       <li>lxml.html._diffcommand</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.html._diffcommand</h1><div class="highlight"><pre>
 <span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">absolute_import</span>
 
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 9ddca7cdb02c573634f925b607e7da8ced598852..1176a6166c4872482f4d6ce01ee8cd1712f30979 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.html._setmixin &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/jquery.js"></script>
         <script src="../../../_static/underscore.js"></script>
         <script src="../../../_static/doctools.js"></script>
-        <script src="../../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
-
-    
+    <script src="../../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../../index.html" class="icon icon-home"> lxml
             <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../../lxml.html">lxml</a> &raquo;</li>
-        
           <li><a href="../html.html">lxml.html</a> &raquo;</li>
-        
       <li>lxml.html._setmixin</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.html._setmixin</h1><div class="highlight"><pre>
 <span></span><span class="k">try</span><span class="p">:</span>
     <span class="kn">from</span> <span class="nn">collections.abc</span> <span class="kn">import</span> <span class="n">MutableSet</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index a04ddce3a734d96d9e19b0b2d22c9dbd46e7beb6..4e3b757bb0e3f98bdbdcb3078990d4fddda06b0e 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.html.builder &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/jquery.js"></script>
         <script src="../../../_static/underscore.js"></script>
         <script src="../../../_static/doctools.js"></script>
-        <script src="../../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
-
-    
+    <script src="../../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../../index.html" class="icon icon-home"> lxml
             <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../../lxml.html">lxml</a> &raquo;</li>
-        
           <li><a href="../html.html">lxml.html</a> &raquo;</li>
-        
       <li>lxml.html.builder</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.html.builder</h1><div class="highlight"><pre>
 <span></span><span class="c1"># --------------------------------------------------------------------</span>
 <span class="c1"># The ElementTree toolkit is</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index a7928ac9cea973e3b666be1264dd44c4bf16f338..e464654c2d3c2f2c62e6903b174808a3e80643e0 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.html.formfill &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/jquery.js"></script>
         <script src="../../../_static/underscore.js"></script>
         <script src="../../../_static/doctools.js"></script>
-        <script src="../../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
-
-    
+    <script src="../../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../../index.html" class="icon icon-home"> lxml
             <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../../lxml.html">lxml</a> &raquo;</li>
-        
           <li><a href="../html.html">lxml.html</a> &raquo;</li>
-        
       <li>lxml.html.formfill</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.html.formfill</h1><div class="highlight"><pre>
 <span></span><span class="kn">from</span> <span class="nn">lxml.etree</span> <span class="kn">import</span> <span class="n">XPath</span><span class="p">,</span> <span class="n">ElementBase</span>
 <span class="kn">from</span> <span class="nn">lxml.html</span> <span class="kn">import</span> <span class="n">fromstring</span><span class="p">,</span> <span class="n">XHTML_NAMESPACE</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 8ebc1b9eb0bb7795279a38352ecc58fde18d535e..ff0d7b7feaba5226428cbfd7261c1b0b8d98adc2 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.isoschematron &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/jquery.js"></script>
         <script src="../../_static/underscore.js"></script>
         <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
+    <script src="../../_static/js/theme.js"></script>
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="../../index.html" class="icon icon-home"> lxml
             <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="../../lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="../../lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="../../index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="../index.html">Module code</a> &raquo;</li>
-        
           <li><a href="../lxml.html">lxml</a> &raquo;</li>
-        
       <li>lxml.isoschematron</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <h1>Source code for lxml.isoschematron</h1><div class="highlight"><pre>
 <span></span><span class="sd">&quot;&quot;&quot;The ``lxml.isoschematron`` package implements ISO Schematron support on top</span>
 <span class="sd">of the pure-xslt &#39;skeleton&#39; implementation.</span>
 </pre></div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 24bc73e7f51edb00f73d5cf222632c875dce6657..912859b55d96750bff001bb79037a83a6c02332c 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -130,7 +130,7 @@ ul.search li a {
     font-weight: bold;
 }
 
-ul.search li div.context {
+ul.search li p.context {
     color: #888;
     margin: 2px 0 0 30px;
     text-align: left;
@@ -277,25 +277,25 @@ p.rubric {
     font-weight: bold;
 }
 
-img.align-left, .figure.align-left, object.align-left {
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
     clear: left;
     float: left;
     margin-right: 1em;
 }
 
-img.align-right, .figure.align-right, object.align-right {
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
     clear: right;
     float: right;
     margin-left: 1em;
 }
 
-img.align-center, .figure.align-center, object.align-center {
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
   display: block;
   margin-left: auto;
   margin-right: auto;
 }
 
-img.align-default, .figure.align-default {
+img.align-default, figure.align-default, .figure.align-default {
   display: block;
   margin-left: auto;
   margin-right: auto;
@@ -319,7 +319,8 @@ img.align-default, .figure.align-default {
 
 /* -- sidebars -------------------------------------------------------------- */
 
-div.sidebar {
+div.sidebar,
+aside.sidebar {
     margin: 0 0 0.5em 1em;
     border: 1px solid #ddb;
     padding: 7px;
@@ -377,12 +378,14 @@ div.body p.centered {
 /* -- content of sidebars/topics/admonitions -------------------------------- */
 
 div.sidebar > :last-child,
+aside.sidebar > :last-child,
 div.topic > :last-child,
 div.admonition > :last-child {
     margin-bottom: 0;
 }
 
 div.sidebar::after,
+aside.sidebar::after,
 div.topic::after,
 div.admonition::after,
 blockquote::after {
@@ -455,20 +458,22 @@ td > :last-child {
 
 /* -- figures --------------------------------------------------------------- */
 
-div.figure {
+div.figure, figure {
     margin: 0.5em;
     padding: 0.5em;
 }
 
-div.figure p.caption {
+div.figure p.caption, figcaption {
     padding: 0.3em;
 }
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* -- field list styles ----------------------------------------------------- */
@@ -503,6 +508,63 @@ table.hlist td {
     vertical-align: top;
 }
 
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+       font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+       font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+       font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+       font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+       color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+       color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+       color: #067D17;
+}
+
 
 /* -- other body styles ----------------------------------------------------- */
 
@@ -629,14 +691,6 @@ dl.glossary dt {
     font-size: 1.1em;
 }
 
-.optional {
-    font-size: 1.3em;
-}
-
-.sig-paren {
-    font-size: larger;
-}
-
 .versionmodified {
     font-style: italic;
 }
@@ -764,8 +818,13 @@ div.code-block-caption code {
 }
 
 table.highlighttable td.linenos,
-div.doctest > div.highlight span.gp {  /* gp: Generic.Prompt */
-    user-select: none;
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
 }
 
 div.code-block-caption span.caption-number {
@@ -780,16 +839,6 @@ div.literal-block-wrapper {
     margin: 1em 0;
 }
 
-code.descname {
-    background-color: transparent;
-    font-weight: bold;
-    font-size: 1.2em;
-}
-
-code.descclassname {
-    background-color: transparent;
-}
-
 code.xref, a code {
     background-color: transparent;
     font-weight: bold;
index 8cd4f101a91d864f52b340128fddc1e6b39cddbb..0d9ae7e1a45b82198c53548383a570d924993371 100644 (file)
@@ -1,4 +1,4 @@
-html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
  *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
  *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
index be9feffb72350c3f6a6cea451ce4bd72951dff3b..582d5c3adaddbab2178a4e1ea270afe51e5437d2 100644 (file)
@@ -1,8 +1,8 @@
-pre { line-height: 125%; margin: 0; }
-td.linenos pre { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
-span.linenos { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
-td.linenos pre.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
 .highlight .hll { background-color: #ffffcc }
 .highlight { background: #f8f8f8; }
 .highlight .c { color: #408080; font-style: italic } /* Comment */
index 31098278ce1eaa68457df0d252ab940662972f77..931148d4344c96c60cd7c0793737f4e10163b839 100644 (file)
@@ -1,73 +1,35 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>Index &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="#" />
     <link rel="search" title="Search" href="search.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
       <li>Index</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
 
 <h1 id="index">Index</h1>
 
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.ACRONYM">ACRONYM (in module lxml.html.builder)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.FormElement.action">action() (lxml.html.FormElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.FormElement.action">action (lxml.html.FormElement property)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.CheckboxValues.add">add() (lxml.html.CheckboxValues method)</a>
 
 </li>
       <li><a href="lxml.etree.html#lxml.etree._Element.base">base (lxml.etree._Element attribute)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.HtmlMixin.base_url">base_url() (lxml.html.HtmlMixin property)</a>
+      <li><a href="lxml.html.html#lxml.html.HtmlMixin.base_url">base_url (lxml.html.HtmlMixin property)</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.BASEFONT">BASEFONT (in module lxml.html.builder)</a>
 </li>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.BODY">BODY (in module lxml.html.builder)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.HtmlMixin.body">body() (lxml.html.HtmlMixin property)</a>
+      <li><a href="lxml.html.html#lxml.html.HtmlMixin.body">body (lxml.html.HtmlMixin property)</a>
 </li>
       <li><a href="lxml.objectify.html#lxml.objectify.BoolElement">BoolElement (class in lxml.objectify)</a>
 </li>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_WRONG_PREV">CHECK_WRONG_PREV (lxml.etree.ErrorTypes attribute)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.InputElement.checkable">checkable() (lxml.html.InputElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.InputElement.checkable">checkable (lxml.html.InputElement property)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.CheckboxGroup">CheckboxGroup (class in lxml.html)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.CheckboxValues">CheckboxValues (class in lxml.html)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.InputElement.checked">checked() (lxml.html.InputElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.InputElement.checked">checked (lxml.html.InputElement property)</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.CITE">CITE (in module lxml.html.builder)</a>
 </li>
 </li>
       <li><a href="lxml.html.html#lxml.html.Classes">Classes (class in lxml.html)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.HtmlMixin.classes">classes() (lxml.html.HtmlMixin property)</a>
+      <li><a href="lxml.html.html#lxml.html.HtmlMixin.classes">classes (lxml.html.HtmlMixin property)</a>
 </li>
       <li><a href="lxml.html.clean.html#lxml.html.clean.clean_html">clean_html() (in module lxml.html.clean)</a>
 
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ETCompatXMLParser">ETCompatXMLParser (class in lxml.etree)</a>
 </li>
-      <li><a href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.etree">etree() (lxml.sax.ElementTreeContentHandler property)</a>
+      <li><a href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.etree">etree (lxml.sax.ElementTreeContentHandler property)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ETXPath">ETXPath (class in lxml.etree)</a>
 </li>
 </li>
       <li><a href="lxml.etree.html#lxml.etree._FeedParser.feed_error_log">feed_error_log (lxml.etree._FeedParser attribute)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.FormElement.fields">fields() (lxml.html.FormElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.FormElement.fields">fields (lxml.html.FormElement property)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.FieldsDict">FieldsDict (class in lxml.html)</a>
 </li>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.FOR">FOR() (in module lxml.html.builder)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.LabelElement.for_element">for_element() (lxml.html.LabelElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.LabelElement.for_element">for_element (lxml.html.LabelElement property)</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.FORM">FORM (in module lxml.html.builder)</a>
 </li>
       <li><a href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound">FormNotFound</a>
 </li>
       <li><a href="lxml.html.clean.html#lxml.html.clean.Cleaner.forms">forms (lxml.html.clean.Cleaner attribute)</a>
+
+      <ul>
+        <li><a href="lxml.html.html#lxml.html.HtmlMixin.forms">(lxml.html.HtmlMixin property)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.HtmlMixin.forms">forms() (lxml.html.HtmlMixin property)</a>
-</li>
+      </ul></li>
       <li><a href="lxml.html.html#lxml.html.fragment_fromstring">fragment_fromstring() (in module lxml.html)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.fragments_fromstring">fragments_fromstring() (in module lxml.html)</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.HEAD">HEAD (in module lxml.html.builder)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.HtmlMixin.head">head() (lxml.html.HtmlMixin property)</a>
+      <li><a href="lxml.html.html#lxml.html.HtmlMixin.head">head (lxml.html.HtmlMixin property)</a>
 </li>
       <li><a href="lxml.html.diff.html#lxml.html.diff.href_token.hide_when_equal">hide_when_equal (lxml.html.diff.href_token attribute)</a>
 
 </li>
       <li><a href="lxml.html.html#lxml.html.InputMixin">InputMixin (class in lxml.html)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.FormElement.inputs">inputs() (lxml.html.FormElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.FormElement.inputs">inputs (lxml.html.FormElement property)</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.INS">INS (in module lxml.html.builder)</a>
 </li>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="lxml.html.builder.html#lxml.html.builder.LABEL">LABEL (in module lxml.html.builder)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.HtmlMixin.label">label() (lxml.html.HtmlMixin property)</a>
+      <li><a href="lxml.html.html#lxml.html.HtmlMixin.label">label (lxml.html.HtmlMixin property)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.LabelElement">LabelElement (class in lxml.html)</a>
 </li>
 </li>
       <li><a href="lxml.html.clean.html#lxml.html.clean.Cleaner.meta">meta (lxml.html.clean.Cleaner attribute)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.FormElement.method">method() (lxml.html.FormElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.FormElement.method">method (lxml.html.FormElement property)</a>
 </li>
       <li>
     module
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.MODULE_OPEN">MODULE_OPEN (lxml.etree.ErrorTypes attribute)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.SelectElement.multiple">multiple() (lxml.html.SelectElement property)</a>
+      <li><a href="lxml.html.html#lxml.html.SelectElement.multiple">multiple (lxml.html.SelectElement property)</a>
 </li>
       <li><a href="lxml.html.html#lxml.html.MultipleSelectOptions">MultipleSelectOptions (class in lxml.html)</a>
 </li>
 
       <ul>
         <li><a href="lxml.etree.html#lxml.etree.DTD.name">(lxml.etree.DTD attribute)</a>
+</li>
+        <li><a href="lxml.html.html#lxml.html.InputMixin.name">(lxml.html.InputMixin property)</a>
 </li>
         <li><a href="lxml.objectify.html#lxml.objectify.PyType.name">(lxml.objectify.PyType attribute)</a>
 </li>
       </ul></li>
-      <li><a href="lxml.html.html#lxml.html.InputMixin.name">name() (lxml.html.InputMixin property)</a>
-</li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorDomains.NAMESPACE">NAMESPACE (lxml.etree.ErrorDomains attribute)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.QName.namespace">namespace (lxml.etree.QName attribute)</a>
       <li><a href="lxml.html.builder.html#lxml.html.builder.OPTION">OPTION (in module lxml.html.builder)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.XSLTAccessControl.options">options (lxml.etree.XSLTAccessControl attribute)</a>
+
+      <ul>
+        <li><a href="lxml.html.html#lxml.html.MultipleSelectOptions.options">(lxml.html.MultipleSelectOptions property)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.MultipleSelectOptions.options">options() (lxml.html.MultipleSelectOptions property)</a>
-</li>
+      </ul></li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorDomains.OUTPUT">OUTPUT (lxml.etree.ErrorDomains attribute)</a>
 </li>
       <li><a href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.output_difference">output_difference() (lxml.doctestcompare.LXMLOutputChecker method)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="lxml.etree.html#lxml.etree.ParseError.position">position() (lxml.etree.ParseError property)</a>
+      <li><a href="lxml.etree.html#lxml.etree.ParseError.position">position (lxml.etree.ParseError property)</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.PRE">PRE (in module lxml.html.builder)</a>
 </li>
         <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron">(class in lxml.isoschematron)</a>
 </li>
       </ul></li>
-      <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron.schematron">schematron() (lxml.isoschematron.Schematron property)</a>
+      <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron.schematron">schematron (lxml.isoschematron.Schematron property)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.SchematronError">SchematronError</a>
 </li>
       <li><a href="lxml.html.builder.html#lxml.html.builder.TT">TT (in module lxml.html.builder)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree._LogEntry.type">type (lxml.etree._LogEntry attribute)</a>
+
+      <ul>
+        <li><a href="lxml.html.html#lxml.html.InputElement.type">(lxml.html.InputElement property)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.InputElement.type">type() (lxml.html.InputElement property)</a>
-</li>
+      </ul></li>
       <li><a href="lxml.objectify.html#lxml.objectify.PyType.type_check">type_check (lxml.objectify.PyType attribute)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree._LogEntry.type_name">type_name (lxml.etree._LogEntry attribute)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree._Validator.validate">validate() (lxml.etree._Validator method)</a>
 </li>
-      <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validation_report">validation_report() (lxml.isoschematron.Schematron property)</a>
+      <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validation_report">validation_report (lxml.isoschematron.Schematron property)</a>
 </li>
-      <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validator_xslt">validator_xslt() (lxml.isoschematron.Schematron property)</a>
+      <li><a href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validator_xslt">validator_xslt (lxml.isoschematron.Schematron property)</a>
 </li>
-      <li><a href="lxml.html.html#lxml.html.CheckboxGroup.value">value() (lxml.html.CheckboxGroup property)</a>
+      <li><a href="lxml.html.html#lxml.html.CheckboxGroup.value">value (lxml.html.CheckboxGroup property)</a>
 
       <ul>
         <li><a href="lxml.html.html#lxml.html.InputElement.value">(lxml.html.InputElement property)</a>
       </ul></li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="lxml.html.html#lxml.html.CheckboxGroup.value_options">value_options() (lxml.html.CheckboxGroup property)</a>
+      <li><a href="lxml.html.html#lxml.html.CheckboxGroup.value_options">value_options (lxml.html.CheckboxGroup property)</a>
 
       <ul>
         <li><a href="lxml.html.html#lxml.html.RadioGroup.value_options">(lxml.html.RadioGroup property)</a>
 
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 46aedd2e55fd3ec60ff66710573b1a59d0c8b3ff..d11697a335dec9943753b33a5718979ef5fb449d 100644 (file)
@@ -1,74 +1,37 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml API Reference &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml API Reference &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml package" href="lxml.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="#" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="#" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="#">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="#" class="icon icon-home"></a> &raquo;</li>
-        
       <li>lxml API Reference</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-api-reference">
-<h1>lxml API Reference<a class="headerlink" href="#lxml-api-reference" title="Permalink to this headline"></a></h1>
+             
+  <section id="lxml-api-reference">
+<h1>lxml API Reference<a class="headerlink" href="#lxml-api-reference" title="Permalink to this headline"></a></h1>
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html">lxml package</a><ul>
 </li>
 </ul>
 </div>
-</div>
-<div class="section" id="indices-and-tables">
-<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
+</section>
+<section id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
 <ul class="simple">
 <li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
 <li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
 <li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
 </ul>
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html" class="btn btn-neutral float-right" title="lxml package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html" class="btn btn-neutral float-right" title="lxml package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 807898b16107fe641898dc16ee51587758657d15..0f240ba01674074520d3af749e755672ebaf7259 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.ElementInclude module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.ElementInclude module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml._elementpath module" href="lxml._elementpath.html" />
     <link rel="prev" title="lxml.isoschematron package" href="lxml.isoschematron.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.ElementInclude module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.ElementInclude.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.ElementInclude">
-<span id="lxml-elementinclude-module"></span><h1>lxml.ElementInclude module<a class="headerlink" href="#module-lxml.ElementInclude" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.ElementInclude">
+<span id="lxml-elementinclude-module"></span><h1>lxml.ElementInclude module<a class="headerlink" href="#module-lxml.ElementInclude" title="Permalink to this headline"></a></h1>
 <p>Limited XInclude support for the ElementTree package.</p>
 <p>While lxml.etree has full support for XInclude (see
 <cite>etree.ElementTree.xinclude()</cite>), this module provides a simpler, pure
 Python, ElementTree compatible implementation that supports a simple
 form of custom URL resolvers.</p>
 <dl class="py exception">
-<dt id="lxml.ElementInclude.FatalIncludeError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">FatalIncludeError</code><a class="reference internal" href="_modules/lxml/ElementInclude.html#FatalIncludeError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">FatalIncludeError</span></span><a class="reference internal" href="_modules/lxml/ElementInclude.html#FatalIncludeError"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError" title="lxml.etree.LxmlSyntaxError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlSyntaxError</span></code></a></p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.ElementInclude.LimitedRecursiveIncludeError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">LimitedRecursiveIncludeError</code><a class="reference internal" href="_modules/lxml/ElementInclude.html#LimitedRecursiveIncludeError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">LimitedRecursiveIncludeError</span></span><a class="reference internal" href="_modules/lxml/ElementInclude.html#LimitedRecursiveIncludeError"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.ElementInclude.FatalIncludeError" title="lxml.ElementInclude.FatalIncludeError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.ElementInclude.FatalIncludeError</span></code></a></p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.ElementInclude._include">
-<code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">_include</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">loader</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">max_depth</span><span class="o">=</span><span class="default_value">6</span></em>, <em class="sig-param"><span class="n">_parent_hrefs</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#_include"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude._include" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude._include">
+<span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">_include</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_depth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_parent_hrefs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#_include"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude._include" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.ElementInclude._lxml_default_loader">
-<code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">_lxml_default_loader</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">href</span></em>, <em class="sig-param"><span class="n">parse</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#_lxml_default_loader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude._lxml_default_loader" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude._lxml_default_loader">
+<span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">_lxml_default_loader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">href</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#_lxml_default_loader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude._lxml_default_loader" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.ElementInclude._wrap_et_loader">
-<code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">_wrap_et_loader</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">loader</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#_wrap_et_loader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude._wrap_et_loader" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude._wrap_et_loader">
+<span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">_wrap_et_loader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">loader</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#_wrap_et_loader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude._wrap_et_loader" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.ElementInclude.default_loader">
-<code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">default_loader</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">href</span></em>, <em class="sig-param"><span class="n">parse</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#default_loader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude.default_loader" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude.default_loader">
+<span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">default_loader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">href</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parse</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#default_loader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude.default_loader" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.ElementInclude.include">
-<code class="sig-prename descclassname">lxml.ElementInclude.</code><code class="sig-name descname">include</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">loader</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">max_depth</span><span class="o">=</span><span class="default_value">6</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#include"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.ElementInclude.include" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.ElementInclude.include">
+<span class="sig-prename descclassname"><span class="pre">lxml.ElementInclude.</span></span><span class="sig-name descname"><span class="pre">include</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_depth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">6</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/ElementInclude.html#include"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.ElementInclude.include" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml._elementpath.html" class="btn btn-neutral float-right" title="lxml._elementpath module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.isoschematron.html" class="btn btn-neutral float-left" title="lxml.isoschematron package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.isoschematron.html" class="btn btn-neutral float-left" title="lxml.isoschematron package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml._elementpath.html" class="btn btn-neutral float-right" title="lxml._elementpath module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 302a6f355e3c10493d98b8906b31f15d98c56202..7de80e05f34f699aecbc5e71c77ea2829f0ac67c 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml._elementpath module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml._elementpath module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.builder module" href="lxml.builder.html" />
     <link rel="prev" title="lxml.ElementInclude module" href="lxml.ElementInclude.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml._elementpath module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml._elementpath.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml._elementpath">
-<span id="lxml-elementpath-module"></span><h1>lxml._elementpath module<a class="headerlink" href="#module-lxml._elementpath" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml._elementpath">
+<span id="lxml-elementpath-module"></span><h1>lxml._elementpath module<a class="headerlink" href="#module-lxml._elementpath" title="Permalink to this headline"></a></h1>
 <dl class="py function">
-<dt id="lxml._elementpath._build_path_iterator">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">_build_path_iterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath._build_path_iterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath._build_path_iterator">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">_build_path_iterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath._build_path_iterator" title="Permalink to this definition"></a></dt>
 <dd><p>compile selector pattern</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.find">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">find</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.find" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.find">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">find</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.find" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.findall">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">findall</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.findall" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.findall">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">findall</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.findall" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.findtext">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">findtext</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.findtext" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.findtext">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">findtext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.findtext" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.iterfind">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">iterfind</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.iterfind" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.iterfind">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">iterfind</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.iterfind" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.prepare_child">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">prepare_child</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">next</span></em>, <em class="sig-param"><span class="n">token</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_child" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.prepare_child">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">prepare_child</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">next</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_child" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.prepare_descendant">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">prepare_descendant</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">next</span></em>, <em class="sig-param"><span class="n">token</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_descendant" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.prepare_descendant">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">prepare_descendant</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">next</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_descendant" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.prepare_parent">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">prepare_parent</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">next</span></em>, <em class="sig-param"><span class="n">token</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_parent" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.prepare_parent">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">prepare_parent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">next</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_parent" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.prepare_predicate">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">prepare_predicate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">next</span></em>, <em class="sig-param"><span class="n">token</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_predicate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.prepare_predicate">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">prepare_predicate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">next</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_predicate" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.prepare_self">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">prepare_self</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">next</span></em>, <em class="sig-param"><span class="n">token</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_self" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.prepare_self">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">prepare_self</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">next</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_self" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.prepare_star">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">prepare_star</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">next</span></em>, <em class="sig-param"><span class="n">token</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_star" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.prepare_star">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">prepare_star</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">next</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.prepare_star" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml._elementpath.xpath_tokenizer">
-<code class="sig-prename descclassname">lxml._elementpath.</code><code class="sig-name descname">xpath_tokenizer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">pattern</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.xpath_tokenizer" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml._elementpath.xpath_tokenizer">
+<span class="sig-prename descclassname"><span class="pre">lxml._elementpath.</span></span><span class="sig-name descname"><span class="pre">xpath_tokenizer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pattern</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml._elementpath.xpath_tokenizer" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.builder.html" class="btn btn-neutral float-right" title="lxml.builder module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.ElementInclude.html" class="btn btn-neutral float-left" title="lxml.ElementInclude module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.ElementInclude.html" class="btn btn-neutral float-left" title="lxml.ElementInclude module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.builder.html" class="btn btn-neutral float-right" title="lxml.builder module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 5892110f656ed2caddf9650a0b4d903c172ec4df..e88089c5d7be3ef813efdb8cf55877eb8ac9e616 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.builder module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.builder module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.cssselect module" href="lxml.cssselect.html" />
     <link rel="prev" title="lxml._elementpath module" href="lxml._elementpath.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.builder module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.builder.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.builder">
-<span id="lxml-builder-module"></span><h1>lxml.builder module<a class="headerlink" href="#module-lxml.builder" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.builder">
+<span id="lxml-builder-module"></span><h1>lxml.builder module<a class="headerlink" href="#module-lxml.builder" title="Permalink to this headline"></a></h1>
 <p>The <code class="docutils literal notranslate"><span class="pre">E</span></code> Element factory for generating XML documents.</p>
 <dl class="py class">
-<dt id="lxml.builder.ElementMaker">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.builder.</code><code class="sig-name descname">ElementMaker</code><a class="headerlink" href="#lxml.builder.ElementMaker" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.builder.ElementMaker">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.builder.</span></span><span class="sig-name descname"><span class="pre">ElementMaker</span></span><a class="headerlink" href="#lxml.builder.ElementMaker" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Element generator factory.</p>
 <p>Unlike the ordinary Element factory, the E factory allows you to pass in
@@ -276,88 +188,63 @@ and/or a specific target <code class="docutils literal notranslate"><span class=
 </pre></div>
 </div>
 <dl class="py attribute">
-<dt id="lxml.builder.ElementMaker._makeelement">
-<code class="sig-name descname">_makeelement</code><a class="headerlink" href="#lxml.builder.ElementMaker._makeelement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.builder.ElementMaker._makeelement">
+<span class="sig-name descname"><span class="pre">_makeelement</span></span><a class="headerlink" href="#lxml.builder.ElementMaker._makeelement" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.builder.ElementMaker._namespace">
-<code class="sig-name descname">_namespace</code><a class="headerlink" href="#lxml.builder.ElementMaker._namespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.builder.ElementMaker._namespace">
+<span class="sig-name descname"><span class="pre">_namespace</span></span><a class="headerlink" href="#lxml.builder.ElementMaker._namespace" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.builder.ElementMaker._nsmap">
-<code class="sig-name descname">_nsmap</code><a class="headerlink" href="#lxml.builder.ElementMaker._nsmap" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.builder.ElementMaker._nsmap">
+<span class="sig-name descname"><span class="pre">_nsmap</span></span><a class="headerlink" href="#lxml.builder.ElementMaker._nsmap" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.builder.ElementMaker._typemap">
-<code class="sig-name descname">_typemap</code><a class="headerlink" href="#lxml.builder.ElementMaker._typemap" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.builder.ElementMaker._typemap">
+<span class="sig-name descname"><span class="pre">_typemap</span></span><a class="headerlink" href="#lxml.builder.ElementMaker._typemap" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.builder.__pyx_unpickle_ElementMaker">
-<code class="sig-prename descclassname">lxml.builder.</code><code class="sig-name descname">__pyx_unpickle_ElementMaker</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">__pyx_type</span></em>, <em class="sig-param"><span class="n">__pyx_checksum</span></em>, <em class="sig-param"><span class="n">__pyx_state</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.builder.__pyx_unpickle_ElementMaker" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.builder.__pyx_unpickle_ElementMaker">
+<span class="sig-prename descclassname"><span class="pre">lxml.builder.</span></span><span class="sig-name descname"><span class="pre">__pyx_unpickle_ElementMaker</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">__pyx_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">__pyx_checksum</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">__pyx_state</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.builder.__pyx_unpickle_ElementMaker" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.cssselect.html" class="btn btn-neutral float-right" title="lxml.cssselect module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml._elementpath.html" class="btn btn-neutral float-left" title="lxml._elementpath module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml._elementpath.html" class="btn btn-neutral float-left" title="lxml._elementpath module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.cssselect.html" class="btn btn-neutral float-right" title="lxml.cssselect module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 43d42297c6c5bedae6ddc962c081b683f6dbc7ec..03ba2ae2a1da95074bd70239900674ad1dc29d56 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.cssselect module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.cssselect module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.doctestcompare module" href="lxml.doctestcompare.html" />
     <link rel="prev" title="lxml.builder module" href="lxml.builder.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.cssselect module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.cssselect.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-cssselect-module">
-<h1>lxml.cssselect module<a class="headerlink" href="#lxml-cssselect-module" title="Permalink to this headline"></a></h1>
-</div>
+             
+  <section id="lxml-cssselect-module">
+<h1>lxml.cssselect module<a class="headerlink" href="#lxml-cssselect-module" title="Permalink to this headline"></a></h1>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.doctestcompare.html" class="btn btn-neutral float-right" title="lxml.doctestcompare module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.builder.html" class="btn btn-neutral float-left" title="lxml.builder module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.builder.html" class="btn btn-neutral float-left" title="lxml.builder module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.doctestcompare.html" class="btn btn-neutral float-right" title="lxml.doctestcompare module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index c25a0b9b438bdab2ef48baff30466a028a338e55..45dffe17f201cc0a4003678b0a28082119f39716 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.doctestcompare module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.doctestcompare module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.etree module" href="lxml.etree.html" />
     <link rel="prev" title="lxml.cssselect module" href="lxml.cssselect.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.doctestcompare module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.doctestcompare.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.doctestcompare">
-<span id="lxml-doctestcompare-module"></span><h1>lxml.doctestcompare module<a class="headerlink" href="#module-lxml.doctestcompare" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.doctestcompare">
+<span id="lxml-doctestcompare-module"></span><h1>lxml.doctestcompare module<a class="headerlink" href="#module-lxml.doctestcompare" title="Permalink to this headline"></a></h1>
 <p>lxml-based doctest output comparison.</p>
 <p>Note: normally, you should just import the <cite>lxml.usedoctest</cite> and
 <cite>lxml.html.usedoctest</cite> modules from within a doctest, instead of this
@@ -213,28 +125,28 @@ marked with <code class="docutils literal notranslate"><span class="pre">+</span
 similarly <code class="docutils literal notranslate"><span class="pre">-</span></code> means its in the example but wasn’t in the output.</p>
 <p>You can disable parsing on one line with <code class="docutils literal notranslate"><span class="pre">#</span> <span class="pre">doctest:+NOPARSE_MARKUP</span></code></p>
 <dl class="py class">
-<dt id="lxml.doctestcompare.LHTMLOutputChecker">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">LHTMLOutputChecker</code><a class="reference internal" href="_modules/lxml/doctestcompare.html#LHTMLOutputChecker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LHTMLOutputChecker" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LHTMLOutputChecker">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">LHTMLOutputChecker</span></span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LHTMLOutputChecker"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LHTMLOutputChecker" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.doctestcompare.LXMLOutputChecker" title="lxml.doctestcompare.LXMLOutputChecker"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.doctestcompare.LXMLOutputChecker</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.doctestcompare.LHTMLOutputChecker.get_default_parser">
-<code class="sig-name descname">get_default_parser</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LHTMLOutputChecker.get_default_parser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LHTMLOutputChecker.get_default_parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LHTMLOutputChecker.get_default_parser">
+<span class="sig-name descname"><span class="pre">get_default_parser</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LHTMLOutputChecker.get_default_parser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LHTMLOutputChecker.get_default_parser" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.doctestcompare.LXMLOutputChecker">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">LXMLOutputChecker</code><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">LXMLOutputChecker</span></span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">doctest.OutputChecker</span></code></p>
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker._looks_like_markup">
-<code class="sig-name descname">_looks_like_markup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker._looks_like_markup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker._looks_like_markup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker._looks_like_markup">
+<span class="sig-name descname"><span class="pre">_looks_like_markup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker._looks_like_markup"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker._looks_like_markup" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.check_output">
-<code class="sig-name descname">check_output</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em>, <em class="sig-param"><span class="n">optionflags</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.check_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.check_output" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.check_output">
+<span class="sig-name descname"><span class="pre">check_output</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optionflags</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.check_output"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.check_output" title="Permalink to this definition"></a></dt>
 <dd><p>Return True iff the actual output from an example (<cite>got</cite>)
 matches the expected output (<cite>want</cite>).  These strings are
 always considered to match if they are identical; but
@@ -245,68 +157,68 @@ option flags.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.collect_diff">
-<code class="sig-name descname">collect_diff</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em>, <em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">indent</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.collect_diff">
+<span class="sig-name descname"><span class="pre">collect_diff</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">indent</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.collect_diff_end_tag">
-<code class="sig-name descname">collect_diff_end_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff_end_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff_end_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.collect_diff_end_tag">
+<span class="sig-name descname"><span class="pre">collect_diff_end_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff_end_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff_end_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.collect_diff_tag">
-<code class="sig-name descname">collect_diff_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.collect_diff_tag">
+<span class="sig-name descname"><span class="pre">collect_diff_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.collect_diff_text">
-<code class="sig-name descname">collect_diff_text</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em>, <em class="sig-param"><span class="n">strip</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff_text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.collect_diff_text">
+<span class="sig-name descname"><span class="pre">collect_diff_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.collect_diff_text"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.collect_diff_text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.compare_docs">
-<code class="sig-name descname">compare_docs</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.compare_docs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.compare_docs" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.compare_docs">
+<span class="sig-name descname"><span class="pre">compare_docs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.compare_docs"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.compare_docs" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.format_doc">
-<code class="sig-name descname">format_doc</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">indent</span></em>, <em class="sig-param"><span class="n">prefix</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_doc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_doc" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.format_doc">
+<span class="sig-name descname"><span class="pre">format_doc</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">indent</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prefix</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_doc"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_doc" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.format_end_tag">
-<code class="sig-name descname">format_end_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_end_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_end_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.format_end_tag">
+<span class="sig-name descname"><span class="pre">format_end_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_end_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_end_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.format_tag">
-<code class="sig-name descname">format_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.format_tag">
+<span class="sig-name descname"><span class="pre">format_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.format_text">
-<code class="sig-name descname">format_text</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">strip</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.format_text">
+<span class="sig-name descname"><span class="pre">format_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.format_text"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.format_text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.get_default_parser">
-<code class="sig-name descname">get_default_parser</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.get_default_parser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.get_default_parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.get_default_parser">
+<span class="sig-name descname"><span class="pre">get_default_parser</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.get_default_parser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.get_default_parser" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.get_parser">
-<code class="sig-name descname">get_parser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em>, <em class="sig-param"><span class="n">optionflags</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.get_parser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.get_parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.get_parser">
+<span class="sig-name descname"><span class="pre">get_parser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optionflags</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.get_parser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.get_parser" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.html_empty_tag">
-<code class="sig-name descname">html_empty_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">html</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.html_empty_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.html_empty_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.html_empty_tag">
+<span class="sig-name descname"><span class="pre">html_empty_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">html</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.html_empty_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.html_empty_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.output_difference">
-<code class="sig-name descname">output_difference</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">example</span></em>, <em class="sig-param"><span class="n">got</span></em>, <em class="sig-param"><span class="n">optionflags</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.output_difference"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.output_difference" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.output_difference">
+<span class="sig-name descname"><span class="pre">output_difference</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">example</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optionflags</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.output_difference"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.output_difference" title="Permalink to this definition"></a></dt>
 <dd><p>Return a string describing the differences between the
 expected output for a given example (<cite>example</cite>) and the actual
 output (<cite>got</cite>).  <cite>optionflags</cite> is the set of option flags used
@@ -314,151 +226,126 @@ to compare <cite>want</cite> and <cite>got</cite>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.tag_compare">
-<code class="sig-name descname">tag_compare</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.tag_compare"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.tag_compare" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.tag_compare">
+<span class="sig-name descname"><span class="pre">tag_compare</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.tag_compare"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.tag_compare" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.text_compare">
-<code class="sig-name descname">text_compare</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">want</span></em>, <em class="sig-param"><span class="n">got</span></em>, <em class="sig-param"><span class="n">strip</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.text_compare"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.text_compare" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.text_compare">
+<span class="sig-name descname"><span class="pre">text_compare</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">want</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">got</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#LXMLOutputChecker.text_compare"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.text_compare" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.doctestcompare.LXMLOutputChecker.empty_tags">
-<code class="sig-name descname">empty_tags</code><em class="property"> = ('param', 'img', 'area', 'br', 'basefont', 'input', 'base', 'meta', 'link', 'col')</em><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.empty_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.LXMLOutputChecker.empty_tags">
+<span class="sig-name descname"><span class="pre">empty_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">('param',</span> <span class="pre">'img',</span> <span class="pre">'area',</span> <span class="pre">'br',</span> <span class="pre">'basefont',</span> <span class="pre">'input',</span> <span class="pre">'base',</span> <span class="pre">'meta',</span> <span class="pre">'link',</span> <span class="pre">'col')</span></em><a class="headerlink" href="#lxml.doctestcompare.LXMLOutputChecker.empty_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.doctestcompare._RestoreChecker">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">_RestoreChecker</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">dt_self</span></em>, <em class="sig-param"><span class="n">old_checker</span></em>, <em class="sig-param"><span class="n">new_checker</span></em>, <em class="sig-param"><span class="n">check_func</span></em>, <em class="sig-param"><span class="n">clone_func</span></em>, <em class="sig-param"><span class="n">del_module</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">_RestoreChecker</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dt_self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">old_checker</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new_checker</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clone_func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">del_module</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <dl class="py method">
-<dt id="lxml.doctestcompare._RestoreChecker.call_super">
-<code class="sig-name descname">call_super</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.call_super"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.call_super" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker.call_super">
+<span class="sig-name descname"><span class="pre">call_super</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.call_super"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.call_super" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare._RestoreChecker.install_clone">
-<code class="sig-name descname">install_clone</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.install_clone"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.install_clone" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker.install_clone">
+<span class="sig-name descname"><span class="pre">install_clone</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.install_clone"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.install_clone" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare._RestoreChecker.install_dt_self">
-<code class="sig-name descname">install_dt_self</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.install_dt_self"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.install_dt_self" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker.install_dt_self">
+<span class="sig-name descname"><span class="pre">install_dt_self</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.install_dt_self"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.install_dt_self" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare._RestoreChecker.uninstall_clone">
-<code class="sig-name descname">uninstall_clone</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.uninstall_clone"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.uninstall_clone" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker.uninstall_clone">
+<span class="sig-name descname"><span class="pre">uninstall_clone</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.uninstall_clone"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.uninstall_clone" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare._RestoreChecker.uninstall_dt_self">
-<code class="sig-name descname">uninstall_dt_self</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.uninstall_dt_self"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.uninstall_dt_self" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker.uninstall_dt_self">
+<span class="sig-name descname"><span class="pre">uninstall_dt_self</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.uninstall_dt_self"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.uninstall_dt_self" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.doctestcompare._RestoreChecker.uninstall_module">
-<code class="sig-name descname">uninstall_module</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.uninstall_module"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.uninstall_module" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._RestoreChecker.uninstall_module">
+<span class="sig-name descname"><span class="pre">uninstall_module</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_RestoreChecker.uninstall_module"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._RestoreChecker.uninstall_module" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.doctestcompare._find_doctest_frame">
-<code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">_find_doctest_frame</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_find_doctest_frame"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare._find_doctest_frame" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare._find_doctest_frame">
+<span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">_find_doctest_frame</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#_find_doctest_frame"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare._find_doctest_frame" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.doctestcompare.html_fromstring">
-<code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">html_fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#html_fromstring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.html_fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.html_fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">html_fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#html_fromstring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.html_fromstring" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.doctestcompare.install">
-<code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">install</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#install"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.install" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.install">
+<span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">install</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#install"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.install" title="Permalink to this definition"></a></dt>
 <dd><p>Install doctestcompare for all future doctests.</p>
 <p>If html is true, then by default the HTML parser will be used;
 otherwise the XML parser is used.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.doctestcompare.norm_whitespace">
-<code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">norm_whitespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">v</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#norm_whitespace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.norm_whitespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.norm_whitespace">
+<span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">norm_whitespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">v</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#norm_whitespace"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.norm_whitespace" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.doctestcompare.strip">
-<code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">strip</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">v</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#strip"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.strip" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.strip">
+<span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">strip</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">v</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#strip"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.strip" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.doctestcompare.temp_install">
-<code class="sig-prename descclassname">lxml.doctestcompare.</code><code class="sig-name descname">temp_install</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">del_module</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#temp_install"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.doctestcompare.temp_install" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.doctestcompare.temp_install">
+<span class="sig-prename descclassname"><span class="pre">lxml.doctestcompare.</span></span><span class="sig-name descname"><span class="pre">temp_install</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">del_module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/doctestcompare.html#temp_install"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.doctestcompare.temp_install" title="Permalink to this definition"></a></dt>
 <dd><p>Use this <em>inside</em> a doctest to enable this checker for this
 doctest only.</p>
 <p>If html is true, then by default the HTML parser will be used;
 otherwise the XML parser is used.</p>
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.etree.html" class="btn btn-neutral float-right" title="lxml.etree module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.cssselect.html" class="btn btn-neutral float-left" title="lxml.cssselect module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.cssselect.html" class="btn btn-neutral float-left" title="lxml.cssselect module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.etree.html" class="btn btn-neutral float-right" title="lxml.etree module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 630787961a8a3870dcf320c7a4d1ebf8be686efa..c0b6ccf6a89cd4f87b884c58389ad38a6b3ae2da 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.etree module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.etree module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.objectify module" href="lxml.objectify.html" />
     <link rel="prev" title="lxml.doctestcompare module" href="lxml.doctestcompare.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.etree module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.etree.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.etree">
-<span id="lxml-etree-module"></span><h1>lxml.etree module<a class="headerlink" href="#module-lxml.etree" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.etree">
+<span id="lxml-etree-module"></span><h1>lxml.etree module<a class="headerlink" href="#module-lxml.etree" title="Permalink to this headline"></a></h1>
 <p>The <code class="docutils literal notranslate"><span class="pre">lxml.etree</span></code> module implements the extended ElementTree API for XML.</p>
 <dl class="py exception">
-<dt id="lxml.etree.C14NError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">C14NError</code><a class="headerlink" href="#lxml.etree.C14NError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">C14NError</span></span><a class="headerlink" href="#lxml.etree.C14NError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Error during C14N serialisation.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.DTDError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">DTDError</code><a class="headerlink" href="#lxml.etree.DTDError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTDError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">DTDError</span></span><a class="headerlink" href="#lxml.etree.DTDError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class for DTD errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.DTDParseError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">DTDParseError</code><a class="headerlink" href="#lxml.etree.DTDParseError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTDParseError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">DTDParseError</span></span><a class="headerlink" href="#lxml.etree.DTDParseError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.DTDError" title="lxml.etree.DTDError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.DTDError</span></code></a></p>
 <p>Error while parsing a DTD.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.DTDValidateError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">DTDValidateError</code><a class="headerlink" href="#lxml.etree.DTDValidateError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTDValidateError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">DTDValidateError</span></span><a class="headerlink" href="#lxml.etree.DTDValidateError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.DTDError" title="lxml.etree.DTDError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.DTDError</span></code></a></p>
 <p>Error while validating an XML document with a DTD.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.DocumentInvalid">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">DocumentInvalid</code><a class="headerlink" href="#lxml.etree.DocumentInvalid" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocumentInvalid">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">DocumentInvalid</span></span><a class="headerlink" href="#lxml.etree.DocumentInvalid" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Validation error.</p>
 <p>Raised by all document validators when their <code class="docutils literal notranslate"><span class="pre">assertValid(tree)</span></code>
@@ -223,140 +135,140 @@ method fails.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.Error">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Error</code><a class="headerlink" href="#lxml.etree.Error" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Error">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Error</span></span><a class="headerlink" href="#lxml.etree.Error" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.LxmlError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">LxmlError</code><a class="headerlink" href="#lxml.etree.LxmlError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.LxmlError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">LxmlError</span></span><a class="headerlink" href="#lxml.etree.LxmlError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.Error" title="lxml.etree.Error"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.Error</span></code></a></p>
 <p>Main exception base class for lxml.  All other exceptions inherit from
 this one.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.LxmlRegistryError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">LxmlRegistryError</code><a class="headerlink" href="#lxml.etree.LxmlRegistryError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.LxmlRegistryError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">LxmlRegistryError</span></span><a class="headerlink" href="#lxml.etree.LxmlRegistryError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class of lxml registry errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.LxmlSyntaxError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">LxmlSyntaxError</code><a class="headerlink" href="#lxml.etree.LxmlSyntaxError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.LxmlSyntaxError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">LxmlSyntaxError</span></span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a>, <code class="xref py py-class docutils literal notranslate"><span class="pre">SyntaxError</span></code></p>
 <p>Base class for all syntax errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.NamespaceRegistryError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">NamespaceRegistryError</code><a class="headerlink" href="#lxml.etree.NamespaceRegistryError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.NamespaceRegistryError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">NamespaceRegistryError</span></span><a class="headerlink" href="#lxml.etree.NamespaceRegistryError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlRegistryError" title="lxml.etree.LxmlRegistryError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlRegistryError</span></code></a></p>
 <p>Error registering a namespace extension.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.ParseError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ParseError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">code</span></em>, <em class="sig-param"><span class="n">line</span></em>, <em class="sig-param"><span class="n">column</span></em>, <em class="sig-param"><span class="n">filename</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParseError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ParseError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ParseError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">line</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">column</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParseError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlSyntaxError" title="lxml.etree.LxmlSyntaxError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlSyntaxError</span></code></a></p>
 <p>Syntax error while parsing an XML document.</p>
 <p>For compatibility with ElementTree 1.3 and later.</p>
-<dl class="py method">
-<dt id="lxml.etree.ParseError.position">
-<em class="property">property </em><code class="sig-name descname">position</code><a class="headerlink" href="#lxml.etree.ParseError.position" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.etree.ParseError.position">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">position</span></span><a class="headerlink" href="#lxml.etree.ParseError.position" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.ParserError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ParserError</code><a class="headerlink" href="#lxml.etree.ParserError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ParserError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ParserError</span></span><a class="headerlink" href="#lxml.etree.ParserError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Internal lxml parser error.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.RelaxNGError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">RelaxNGError</code><a class="headerlink" href="#lxml.etree.RelaxNGError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">RelaxNGError</span></span><a class="headerlink" href="#lxml.etree.RelaxNGError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class for RelaxNG errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.RelaxNGParseError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">RelaxNGParseError</code><a class="headerlink" href="#lxml.etree.RelaxNGParseError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGParseError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">RelaxNGParseError</span></span><a class="headerlink" href="#lxml.etree.RelaxNGParseError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.RelaxNGError" title="lxml.etree.RelaxNGError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.RelaxNGError</span></code></a></p>
 <p>Error while parsing an XML document as RelaxNG.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.RelaxNGValidateError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">RelaxNGValidateError</code><a class="headerlink" href="#lxml.etree.RelaxNGValidateError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGValidateError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">RelaxNGValidateError</span></span><a class="headerlink" href="#lxml.etree.RelaxNGValidateError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.RelaxNGError" title="lxml.etree.RelaxNGError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.RelaxNGError</span></code></a></p>
 <p>Error while validating an XML document with a RelaxNG schema.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.SchematronError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">SchematronError</code><a class="headerlink" href="#lxml.etree.SchematronError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.SchematronError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">SchematronError</span></span><a class="headerlink" href="#lxml.etree.SchematronError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class of all Schematron errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.SchematronParseError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">SchematronParseError</code><a class="headerlink" href="#lxml.etree.SchematronParseError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.SchematronParseError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">SchematronParseError</span></span><a class="headerlink" href="#lxml.etree.SchematronParseError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.SchematronError" title="lxml.etree.SchematronError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.SchematronError</span></code></a></p>
 <p>Error while parsing an XML document as Schematron schema.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.SchematronValidateError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">SchematronValidateError</code><a class="headerlink" href="#lxml.etree.SchematronValidateError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.SchematronValidateError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">SchematronValidateError</span></span><a class="headerlink" href="#lxml.etree.SchematronValidateError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.SchematronError" title="lxml.etree.SchematronError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.SchematronError</span></code></a></p>
 <p>Error while validating an XML document with a Schematron schema.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.SerialisationError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">SerialisationError</code><a class="headerlink" href="#lxml.etree.SerialisationError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.SerialisationError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">SerialisationError</span></span><a class="headerlink" href="#lxml.etree.SerialisationError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>A libxml2 error that occurred during serialisation.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XIncludeError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XIncludeError</code><a class="headerlink" href="#lxml.etree.XIncludeError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XIncludeError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XIncludeError</span></span><a class="headerlink" href="#lxml.etree.XIncludeError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Error during XInclude processing.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XMLSchemaError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLSchemaError</code><a class="headerlink" href="#lxml.etree.XMLSchemaError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLSchemaError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLSchemaError</span></span><a class="headerlink" href="#lxml.etree.XMLSchemaError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class of all XML Schema errors</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XMLSchemaParseError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLSchemaParseError</code><a class="headerlink" href="#lxml.etree.XMLSchemaParseError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLSchemaParseError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLSchemaParseError</span></span><a class="headerlink" href="#lxml.etree.XMLSchemaParseError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XMLSchemaError" title="lxml.etree.XMLSchemaError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XMLSchemaError</span></code></a></p>
 <p>Error while parsing an XML document as XML Schema.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XMLSchemaValidateError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLSchemaValidateError</code><a class="headerlink" href="#lxml.etree.XMLSchemaValidateError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLSchemaValidateError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLSchemaValidateError</span></span><a class="headerlink" href="#lxml.etree.XMLSchemaValidateError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XMLSchemaError" title="lxml.etree.XMLSchemaError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XMLSchemaError</span></code></a></p>
 <p>Error while validating an XML document with an XML Schema.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XMLSyntaxAssertionError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLSyntaxAssertionError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">code</span></em>, <em class="sig-param"><span class="n">line</span></em>, <em class="sig-param"><span class="n">column</span></em>, <em class="sig-param"><span class="n">filename</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxAssertionError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLSyntaxAssertionError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">line</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">column</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XMLSyntaxError" title="lxml.etree.XMLSyntaxError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XMLSyntaxError</span></code></a>, <code class="xref py py-class docutils literal notranslate"><span class="pre">AssertionError</span></code></p>
 <p>An XMLSyntaxError that additionally inherits from AssertionError for
 ElementTree / backwards compatibility reasons.</p>
@@ -364,97 +276,97 @@ ElementTree / backwards compatibility reasons.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XMLSyntaxError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLSyntaxError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">code</span></em>, <em class="sig-param"><span class="n">line</span></em>, <em class="sig-param"><span class="n">column</span></em>, <em class="sig-param"><span class="n">filename</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLSyntaxError</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">line</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">column</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.ParseError" title="lxml.etree.ParseError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ParseError</span></code></a></p>
 <p>Syntax error while parsing an XML document.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XPathError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathError</code><a class="headerlink" href="#lxml.etree.XPathError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathError</span></span><a class="headerlink" href="#lxml.etree.XPathError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class of all XPath errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XPathEvalError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathEvalError</code><a class="headerlink" href="#lxml.etree.XPathEvalError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathEvalError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathEvalError</span></span><a class="headerlink" href="#lxml.etree.XPathEvalError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XPathError" title="lxml.etree.XPathError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XPathError</span></code></a></p>
 <p>Error during XPath evaluation.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XPathFunctionError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathFunctionError</code><a class="headerlink" href="#lxml.etree.XPathFunctionError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathFunctionError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathFunctionError</span></span><a class="headerlink" href="#lxml.etree.XPathFunctionError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XPathEvalError" title="lxml.etree.XPathEvalError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XPathEvalError</span></code></a></p>
 <p>Internal error looking up an XPath extension function.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XPathResultError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathResultError</code><a class="headerlink" href="#lxml.etree.XPathResultError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathResultError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathResultError</span></span><a class="headerlink" href="#lxml.etree.XPathResultError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XPathEvalError" title="lxml.etree.XPathEvalError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XPathEvalError</span></code></a></p>
 <p>Error handling an XPath result.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XPathSyntaxError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathSyntaxError</code><a class="headerlink" href="#lxml.etree.XPathSyntaxError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathSyntaxError</span></span><a class="headerlink" href="#lxml.etree.XPathSyntaxError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlSyntaxError" title="lxml.etree.LxmlSyntaxError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlSyntaxError</span></code></a>, <a class="reference internal" href="#lxml.etree.XPathError" title="lxml.etree.XPathError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XPathError</span></code></a></p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XSLTApplyError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTApplyError</code><a class="headerlink" href="#lxml.etree.XSLTApplyError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTApplyError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTApplyError</span></span><a class="headerlink" href="#lxml.etree.XSLTApplyError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XSLTError" title="lxml.etree.XSLTError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XSLTError</span></code></a></p>
 <p>Error running an XSL transformation.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XSLTError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTError</code><a class="headerlink" href="#lxml.etree.XSLTError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTError</span></span><a class="headerlink" href="#lxml.etree.XSLTError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>Base class of all XSLT errors.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XSLTExtensionError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTExtensionError</code><a class="headerlink" href="#lxml.etree.XSLTExtensionError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTExtensionError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTExtensionError</span></span><a class="headerlink" href="#lxml.etree.XSLTExtensionError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XSLTError" title="lxml.etree.XSLTError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XSLTError</span></code></a></p>
 <p>Error registering an XSLT extension.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XSLTParseError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTParseError</code><a class="headerlink" href="#lxml.etree.XSLTParseError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTParseError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTParseError</span></span><a class="headerlink" href="#lxml.etree.XSLTParseError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XSLTError" title="lxml.etree.XSLTError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XSLTError</span></code></a></p>
 <p>Error parsing a stylesheet document.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree.XSLTSaveError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTSaveError</code><a class="headerlink" href="#lxml.etree.XSLTSaveError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTSaveError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTSaveError</span></span><a class="headerlink" href="#lxml.etree.XSLTSaveError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XSLTError" title="lxml.etree.XSLTError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XSLTError</span></code></a>, <a class="reference internal" href="#lxml.etree.SerialisationError" title="lxml.etree.SerialisationError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.SerialisationError</span></code></a></p>
 <p>Error serialising an XSLT result.</p>
 </dd></dl>
 
 <dl class="py exception">
-<dt id="lxml.etree._TargetParserResult">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_TargetParserResult</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">result</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._TargetParserResult" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._TargetParserResult">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_TargetParserResult</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">result</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._TargetParserResult" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.AncestorsIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">AncestorsIterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">node</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.AncestorsIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.AncestorsIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">AncestorsIterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.AncestorsIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ElementMatchIterator" title="lxml.etree._ElementMatchIterator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ElementMatchIterator</span></code></a></p>
 <p>Iterates over the ancestors of an element (from parent to parent).</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.AttributeBasedElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">AttributeBasedElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">attribute_name</span></em>, <em class="sig-param"><span class="n">class_mapping</span></em>, <em class="sig-param"><span class="n">fallback</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.AttributeBasedElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.AttributeBasedElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">AttributeBasedElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attribute_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">class_mapping</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.AttributeBasedElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.FallbackElementClassLookup" title="lxml.etree.FallbackElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.FallbackElementClassLookup</span></code></a></p>
 <p>Checks an attribute of an Element and looks up the value in a
 class dictionary.</p>
@@ -471,8 +383,8 @@ missing.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.C14NWriterTarget">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">C14NWriterTarget</code><a class="headerlink" href="#lxml.etree.C14NWriterTarget" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">C14NWriterTarget</span></span><a class="headerlink" href="#lxml.etree.C14NWriterTarget" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Canonicalization writer target for the XMLParser.</p>
 <p>Serialises parse events to XML C14N 2.0.</p>
@@ -495,50 +407,50 @@ missing.</p>
 <li><p><em>exclude_tags</em>: a set of tag names that should not be serialised</p></li>
 </ul>
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget._iter_namespaces">
-<code class="sig-name descname">_iter_namespaces</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ns_stack</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget._iter_namespaces" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget._iter_namespaces">
+<span class="sig-name descname"><span class="pre">_iter_namespaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ns_stack</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget._iter_namespaces" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.close">
-<code class="sig-name descname">close</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.close" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.close" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.comment">
-<code class="sig-name descname">comment</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.comment" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.comment">
+<span class="sig-name descname"><span class="pre">comment</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.comment" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.data">
-<code class="sig-name descname">data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.data" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.data">
+<span class="sig-name descname"><span class="pre">data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.data" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.end">
-<code class="sig-name descname">end</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tag</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.end" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.end">
+<span class="sig-name descname"><span class="pre">end</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.end" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.pi">
-<code class="sig-name descname">pi</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">target</span></em>, <em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.pi" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.pi">
+<span class="sig-name descname"><span class="pre">pi</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.pi" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.start">
-<code class="sig-name descname">start</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tag</span></em>, <em class="sig-param"><span class="n">attrs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.start" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.start">
+<span class="sig-name descname"><span class="pre">start</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.start" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.C14NWriterTarget.start_ns">
-<code class="sig-name descname">start_ns</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">prefix</span></em>, <em class="sig-param"><span class="n">uri</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.start_ns" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.C14NWriterTarget.start_ns">
+<span class="sig-name descname"><span class="pre">start_ns</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prefix</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NWriterTarget.start_ns" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.CDATA">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">CDATA</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.CDATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.CDATA">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">CDATA</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.CDATA" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>CDATA factory.  This factory creates an opaque data object that
 can be used to set Element text.  The usual way to use it is:</p>
@@ -554,8 +466,8 @@ can be used to set Element text.  The usual way to use it is:</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.CommentBase">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">CommentBase</code><a class="headerlink" href="#lxml.etree.CommentBase" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.CommentBase">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">CommentBase</span></span><a class="headerlink" href="#lxml.etree.CommentBase" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Comment" title="lxml.etree._Comment"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Comment</span></code></a></p>
 <p>All custom Comment classes must inherit from this one.</p>
 <p>To create an XML Comment instance, use the <code class="docutils literal notranslate"><span class="pre">Comment()</span></code> factory.</p>
@@ -568,8 +480,8 @@ called after object creation.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.CustomElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">CustomElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">fallback</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.CustomElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.CustomElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">CustomElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.CustomElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.FallbackElementClassLookup" title="lxml.etree.FallbackElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.FallbackElementClassLookup</span></code></a></p>
 <p>Element class lookup based on a subclass method.</p>
 <p>You can inherit from this class and override the method:</p>
@@ -583,115 +495,115 @@ called after object creation.</p>
 * name:      name of the element/entity, None for comments, target for PIs</p>
 <p>If you return None from this method, the fallback will be called.</p>
 <dl class="py method">
-<dt id="lxml.etree.CustomElementClassLookup.lookup">
-<code class="sig-name descname">lookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">type</span></em>, <em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">namespace</span></em>, <em class="sig-param"><span class="n">name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.CustomElementClassLookup.lookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.CustomElementClassLookup.lookup">
+<span class="sig-name descname"><span class="pre">lookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespace</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.CustomElementClassLookup.lookup" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.DTD">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">DTD</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">file</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">external_id</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">DTD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">external_id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Validator" title="lxml.etree._Validator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Validator</span></code></a></p>
 <p>A DTD validator.</p>
 <p>Can load from filesystem directly given a filename or file-like object.
 Alternatively, pass the keyword parameter <code class="docutils literal notranslate"><span class="pre">external_id</span></code> to load from a
 catalog.</p>
 <dl class="py method">
-<dt id="lxml.etree.DTD.elements">
-<code class="sig-name descname">elements</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.elements" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.elements">
+<span class="sig-name descname"><span class="pre">elements</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.elements" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.DTD.entities">
-<code class="sig-name descname">entities</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.entities" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.entities">
+<span class="sig-name descname"><span class="pre">entities</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.entities" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.DTD.iterelements">
-<code class="sig-name descname">iterelements</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.iterelements" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.iterelements">
+<span class="sig-name descname"><span class="pre">iterelements</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.iterelements" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.DTD.iterentities">
-<code class="sig-name descname">iterentities</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.iterentities" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.iterentities">
+<span class="sig-name descname"><span class="pre">iterentities</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTD.iterentities" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DTD.external_id">
-<code class="sig-name descname">external_id</code><a class="headerlink" href="#lxml.etree.DTD.external_id" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.external_id">
+<span class="sig-name descname"><span class="pre">external_id</span></span><a class="headerlink" href="#lxml.etree.DTD.external_id" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DTD.name">
-<code class="sig-name descname">name</code><a class="headerlink" href="#lxml.etree.DTD.name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.name">
+<span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#lxml.etree.DTD.name" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DTD.system_url">
-<code class="sig-name descname">system_url</code><a class="headerlink" href="#lxml.etree.DTD.system_url" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DTD.system_url">
+<span class="sig-name descname"><span class="pre">system_url</span></span><a class="headerlink" href="#lxml.etree.DTD.system_url" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.DocInfo">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">DocInfo</code><a class="headerlink" href="#lxml.etree.DocInfo" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">DocInfo</span></span><a class="headerlink" href="#lxml.etree.DocInfo" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Document information provided by parser and DTD.</p>
 <dl class="py method">
-<dt id="lxml.etree.DocInfo.clear">
-<code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DocInfo.clear" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.clear">
+<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DocInfo.clear" title="Permalink to this definition"></a></dt>
 <dd><p>Removes DOCTYPE and internal subset from the document.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.URL">
-<code class="sig-name descname">URL</code><a class="headerlink" href="#lxml.etree.DocInfo.URL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.URL">
+<span class="sig-name descname"><span class="pre">URL</span></span><a class="headerlink" href="#lxml.etree.DocInfo.URL" title="Permalink to this definition"></a></dt>
 <dd><p>The source URL of the document (or None if unknown).</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.doctype">
-<code class="sig-name descname">doctype</code><a class="headerlink" href="#lxml.etree.DocInfo.doctype" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.doctype">
+<span class="sig-name descname"><span class="pre">doctype</span></span><a class="headerlink" href="#lxml.etree.DocInfo.doctype" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a DOCTYPE declaration string for the document.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.encoding">
-<code class="sig-name descname">encoding</code><a class="headerlink" href="#lxml.etree.DocInfo.encoding" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.encoding">
+<span class="sig-name descname"><span class="pre">encoding</span></span><a class="headerlink" href="#lxml.etree.DocInfo.encoding" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the encoding name as declared by the document.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.externalDTD">
-<code class="sig-name descname">externalDTD</code><a class="headerlink" href="#lxml.etree.DocInfo.externalDTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.externalDTD">
+<span class="sig-name descname"><span class="pre">externalDTD</span></span><a class="headerlink" href="#lxml.etree.DocInfo.externalDTD" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a DTD validator based on the external subset of the document.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.internalDTD">
-<code class="sig-name descname">internalDTD</code><a class="headerlink" href="#lxml.etree.DocInfo.internalDTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.internalDTD">
+<span class="sig-name descname"><span class="pre">internalDTD</span></span><a class="headerlink" href="#lxml.etree.DocInfo.internalDTD" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a DTD validator based on the internal subset of the document.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.public_id">
-<code class="sig-name descname">public_id</code><a class="headerlink" href="#lxml.etree.DocInfo.public_id" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.public_id">
+<span class="sig-name descname"><span class="pre">public_id</span></span><a class="headerlink" href="#lxml.etree.DocInfo.public_id" title="Permalink to this definition"></a></dt>
 <dd><p>Public ID of the DOCTYPE.</p>
 <p>Mutable.  May be set to a valid string or None.  If a DTD does not
 exist, setting this variable (even to None) will create one.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.root_name">
-<code class="sig-name descname">root_name</code><a class="headerlink" href="#lxml.etree.DocInfo.root_name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.root_name">
+<span class="sig-name descname"><span class="pre">root_name</span></span><a class="headerlink" href="#lxml.etree.DocInfo.root_name" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the name of the root node as defined by the DOCTYPE.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.standalone">
-<code class="sig-name descname">standalone</code><a class="headerlink" href="#lxml.etree.DocInfo.standalone" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.standalone">
+<span class="sig-name descname"><span class="pre">standalone</span></span><a class="headerlink" href="#lxml.etree.DocInfo.standalone" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the standalone flag as declared by the document.  The possible
 values are True (<code class="docutils literal notranslate"><span class="pre">standalone='yes'</span></code>), False
 (<code class="docutils literal notranslate"><span class="pre">standalone='no'</span></code> or flag not provided in the declaration),
@@ -701,24 +613,24 @@ normal truth test on this value will always tell if the
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.system_url">
-<code class="sig-name descname">system_url</code><a class="headerlink" href="#lxml.etree.DocInfo.system_url" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.system_url">
+<span class="sig-name descname"><span class="pre">system_url</span></span><a class="headerlink" href="#lxml.etree.DocInfo.system_url" title="Permalink to this definition"></a></dt>
 <dd><p>System ID of the DOCTYPE.</p>
 <p>Mutable.  May be set to a valid string or None.  If a DTD does not
 exist, setting this variable (even to None) will create one.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.DocInfo.xml_version">
-<code class="sig-name descname">xml_version</code><a class="headerlink" href="#lxml.etree.DocInfo.xml_version" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.DocInfo.xml_version">
+<span class="sig-name descname"><span class="pre">xml_version</span></span><a class="headerlink" href="#lxml.etree.DocInfo.xml_version" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the XML version as declared by the document.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ETCompatXMLParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ETCompatXMLParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attribute_defaults</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">dtd_validation</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">load_dtd</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">no_network</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">ns_clean</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">recover</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">schema</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">huge_tree</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">resolve_entities</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">remove_comments</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">remove_pis</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">strip_cdata</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">target</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compact</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ETCompatXMLParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ETCompatXMLParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ETCompatXMLParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attribute_defaults</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dtd_validation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">load_dtd</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">no_network</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ns_clean</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recover</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">schema</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">huge_tree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">resolve_entities</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_comments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_pis</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip_cdata</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compact</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ETCompatXMLParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XMLParser" title="lxml.etree.XMLParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XMLParser</span></code></a></p>
 <p>An XML parser with an ElementTree compatible default setup.</p>
 <p>See the XMLParser class for details.</p>
@@ -727,8 +639,8 @@ and thus ignores comments and processing instructions.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ETXPath">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ETXPath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">regexp</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ETXPath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ETXPath">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ETXPath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">regexp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ETXPath" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XPath" title="lxml.etree.XPath"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XPath</span></code></a></p>
 <p>Special XPath class that supports the ElementTree {uri} notation for namespaces.</p>
 <p>Note that this class does not accept the <code class="docutils literal notranslate"><span class="pre">namespace</span></code> keyword
@@ -738,8 +650,8 @@ you pass <code class="docutils literal notranslate"><span class="pre">smart_stri
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementBase">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementBase</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">children</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_extra</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementBase" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementBase">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementBase</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">children</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_extra</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementBase" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Element" title="lxml.etree._Element"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Element</span></code></a></p>
 <p>The public Element class.  All custom Element classes must inherit
 from this one.  To create an Element, use the <cite>Element()</cite> factory.</p>
@@ -770,52 +682,52 @@ hierarchies that implement a common namespace.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementChildIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementChildIterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">node</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">reversed</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementChildIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementChildIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementChildIterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reversed</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementChildIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ElementMatchIterator" title="lxml.etree._ElementMatchIterator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ElementMatchIterator</span></code></a></p>
 <p>Iterates over the children of an element.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Superclass of Element class lookups.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementDefaultClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementDefaultClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">comment</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pi</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">entity</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementDefaultClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementDefaultClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">comment</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.ElementClassLookup" title="lxml.etree.ElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ElementClassLookup</span></code></a></p>
 <p>Element class lookup scheme that always returns the default Element
 class.</p>
 <p>The keyword arguments <code class="docutils literal notranslate"><span class="pre">element</span></code>, <code class="docutils literal notranslate"><span class="pre">comment</span></code>, <code class="docutils literal notranslate"><span class="pre">pi</span></code> and <code class="docutils literal notranslate"><span class="pre">entity</span></code>
 accept the respective Element classes.</p>
 <dl class="py attribute">
-<dt id="lxml.etree.ElementDefaultClassLookup.comment_class">
-<code class="sig-name descname">comment_class</code><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.comment_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementDefaultClassLookup.comment_class">
+<span class="sig-name descname"><span class="pre">comment_class</span></span><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.comment_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ElementDefaultClassLookup.element_class">
-<code class="sig-name descname">element_class</code><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.element_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementDefaultClassLookup.element_class">
+<span class="sig-name descname"><span class="pre">element_class</span></span><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.element_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ElementDefaultClassLookup.entity_class">
-<code class="sig-name descname">entity_class</code><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.entity_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementDefaultClassLookup.entity_class">
+<span class="sig-name descname"><span class="pre">entity_class</span></span><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.entity_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ElementDefaultClassLookup.pi_class">
-<code class="sig-name descname">pi_class</code><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.pi_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementDefaultClassLookup.pi_class">
+<span class="sig-name descname"><span class="pre">pi_class</span></span><a class="headerlink" href="#lxml.etree.ElementDefaultClassLookup.pi_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementDepthFirstIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementDepthFirstIterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">node</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">inclusive</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementDepthFirstIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementDepthFirstIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementDepthFirstIterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inclusive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementDepthFirstIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Iterates over an element and its sub-elements in document order (depth
 first pre-order).</p>
@@ -833,8 +745,8 @@ tree it traverses is modified during iteration.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementNamespaceClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementNamespaceClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">fallback</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementNamespaceClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementNamespaceClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementNamespaceClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementNamespaceClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.FallbackElementClassLookup" title="lxml.etree.FallbackElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.FallbackElementClassLookup</span></code></a></p>
 <p>Element class lookup scheme that searches the Element class in the
 Namespace registry.</p>
@@ -854,8 +766,8 @@ Namespace registry.</p>
 </pre></div>
 </div>
 <dl class="py method">
-<dt id="lxml.etree.ElementNamespaceClassLookup.get_namespace">
-<code class="sig-name descname">get_namespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">ns_uri</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementNamespaceClassLookup.get_namespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementNamespaceClassLookup.get_namespace">
+<span class="sig-name descname"><span class="pre">get_namespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ns_uri</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementNamespaceClassLookup.get_namespace" title="Permalink to this definition"></a></dt>
 <dd><p>Retrieve the namespace object associated with the given URI.
 Pass None for the empty namespace.</p>
 <p>Creates a new namespace object if it does not yet exist.</p>
@@ -864,8 +776,8 @@ Pass None for the empty namespace.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ElementTextIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementTextIterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementTextIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementTextIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementTextIterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementTextIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Iterates over the text content of a subtree.</p>
 <p>You can pass the <code class="docutils literal notranslate"><span class="pre">tag</span></code> keyword argument to restrict text content to a
@@ -875,8 +787,8 @@ tail text (e.g. if you know that it’s only whitespace from pretty-printing).</
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.EntityBase">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">EntityBase</code><a class="headerlink" href="#lxml.etree.EntityBase" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.EntityBase">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">EntityBase</span></span><a class="headerlink" href="#lxml.etree.EntityBase" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Entity" title="lxml.etree._Entity"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Entity</span></code></a></p>
 <p>All custom Entity classes must inherit from this one.</p>
 <p>To create an XML Entity instance, use the <code class="docutils literal notranslate"><span class="pre">Entity()</span></code> factory.</p>
@@ -889,3925 +801,3925 @@ called after object creation.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ErrorDomains">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ErrorDomains</code><a class="headerlink" href="#lxml.etree.ErrorDomains" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ErrorDomains</span></span><a class="headerlink" href="#lxml.etree.ErrorDomains" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Libxml2 error domains</p>
 <dl class="py method">
-<dt id="lxml.etree.ErrorDomains._getName">
-<code class="sig-name descname">_getName</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">/</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ErrorDomains._getName" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains._getName">
+<span class="sig-name descname"><span class="pre">_getName</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">/</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ErrorDomains._getName" title="Permalink to this definition"></a></dt>
 <dd><p>Return the value for key if key is in the dictionary, else default.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.BUFFER">
-<code class="sig-name descname">BUFFER</code><em class="property"> = 29</em><a class="headerlink" href="#lxml.etree.ErrorDomains.BUFFER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.BUFFER">
+<span class="sig-name descname"><span class="pre">BUFFER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">29</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.BUFFER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.C14N">
-<code class="sig-name descname">C14N</code><em class="property"> = 21</em><a class="headerlink" href="#lxml.etree.ErrorDomains.C14N" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.C14N">
+<span class="sig-name descname"><span class="pre">C14N</span></span><em class="property"> <span class="pre">=</span> <span class="pre">21</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.C14N" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.CATALOG">
-<code class="sig-name descname">CATALOG</code><em class="property"> = 20</em><a class="headerlink" href="#lxml.etree.ErrorDomains.CATALOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.CATALOG">
+<span class="sig-name descname"><span class="pre">CATALOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">20</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.CATALOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.CHECK">
-<code class="sig-name descname">CHECK</code><em class="property"> = 24</em><a class="headerlink" href="#lxml.etree.ErrorDomains.CHECK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.CHECK">
+<span class="sig-name descname"><span class="pre">CHECK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">24</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.CHECK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.DATATYPE">
-<code class="sig-name descname">DATATYPE</code><em class="property"> = 15</em><a class="headerlink" href="#lxml.etree.ErrorDomains.DATATYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.DATATYPE">
+<span class="sig-name descname"><span class="pre">DATATYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">15</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.DATATYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.DTD">
-<code class="sig-name descname">DTD</code><em class="property"> = 4</em><a class="headerlink" href="#lxml.etree.ErrorDomains.DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.DTD">
+<span class="sig-name descname"><span class="pre">DTD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.DTD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.FTP">
-<code class="sig-name descname">FTP</code><em class="property"> = 9</em><a class="headerlink" href="#lxml.etree.ErrorDomains.FTP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.FTP">
+<span class="sig-name descname"><span class="pre">FTP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">9</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.FTP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.HTML">
-<code class="sig-name descname">HTML</code><em class="property"> = 5</em><a class="headerlink" href="#lxml.etree.ErrorDomains.HTML" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.HTML">
+<span class="sig-name descname"><span class="pre">HTML</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.HTML" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.HTTP">
-<code class="sig-name descname">HTTP</code><em class="property"> = 10</em><a class="headerlink" href="#lxml.etree.ErrorDomains.HTTP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.HTTP">
+<span class="sig-name descname"><span class="pre">HTTP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">10</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.HTTP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.I18N">
-<code class="sig-name descname">I18N</code><em class="property"> = 27</em><a class="headerlink" href="#lxml.etree.ErrorDomains.I18N" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.I18N">
+<span class="sig-name descname"><span class="pre">I18N</span></span><em class="property"> <span class="pre">=</span> <span class="pre">27</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.I18N" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.IO">
-<code class="sig-name descname">IO</code><em class="property"> = 8</em><a class="headerlink" href="#lxml.etree.ErrorDomains.IO" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.IO">
+<span class="sig-name descname"><span class="pre">IO</span></span><em class="property"> <span class="pre">=</span> <span class="pre">8</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.IO" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.MEMORY">
-<code class="sig-name descname">MEMORY</code><em class="property"> = 6</em><a class="headerlink" href="#lxml.etree.ErrorDomains.MEMORY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.MEMORY">
+<span class="sig-name descname"><span class="pre">MEMORY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.MEMORY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.MODULE">
-<code class="sig-name descname">MODULE</code><em class="property"> = 26</em><a class="headerlink" href="#lxml.etree.ErrorDomains.MODULE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.MODULE">
+<span class="sig-name descname"><span class="pre">MODULE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">26</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.MODULE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.NAMESPACE">
-<code class="sig-name descname">NAMESPACE</code><em class="property"> = 3</em><a class="headerlink" href="#lxml.etree.ErrorDomains.NAMESPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.NAMESPACE">
+<span class="sig-name descname"><span class="pre">NAMESPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.NAMESPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.NONE">
-<code class="sig-name descname">NONE</code><em class="property"> = 0</em><a class="headerlink" href="#lxml.etree.ErrorDomains.NONE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.NONE">
+<span class="sig-name descname"><span class="pre">NONE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">0</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.NONE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.OUTPUT">
-<code class="sig-name descname">OUTPUT</code><em class="property"> = 7</em><a class="headerlink" href="#lxml.etree.ErrorDomains.OUTPUT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.OUTPUT">
+<span class="sig-name descname"><span class="pre">OUTPUT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">7</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.OUTPUT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.PARSER">
-<code class="sig-name descname">PARSER</code><em class="property"> = 1</em><a class="headerlink" href="#lxml.etree.ErrorDomains.PARSER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.PARSER">
+<span class="sig-name descname"><span class="pre">PARSER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.PARSER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.REGEXP">
-<code class="sig-name descname">REGEXP</code><em class="property"> = 14</em><a class="headerlink" href="#lxml.etree.ErrorDomains.REGEXP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.REGEXP">
+<span class="sig-name descname"><span class="pre">REGEXP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">14</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.REGEXP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.RELAXNGP">
-<code class="sig-name descname">RELAXNGP</code><em class="property"> = 18</em><a class="headerlink" href="#lxml.etree.ErrorDomains.RELAXNGP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.RELAXNGP">
+<span class="sig-name descname"><span class="pre">RELAXNGP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">18</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.RELAXNGP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.RELAXNGV">
-<code class="sig-name descname">RELAXNGV</code><em class="property"> = 19</em><a class="headerlink" href="#lxml.etree.ErrorDomains.RELAXNGV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.RELAXNGV">
+<span class="sig-name descname"><span class="pre">RELAXNGV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">19</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.RELAXNGV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.SCHEMASP">
-<code class="sig-name descname">SCHEMASP</code><em class="property"> = 16</em><a class="headerlink" href="#lxml.etree.ErrorDomains.SCHEMASP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.SCHEMASP">
+<span class="sig-name descname"><span class="pre">SCHEMASP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">16</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.SCHEMASP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.SCHEMASV">
-<code class="sig-name descname">SCHEMASV</code><em class="property"> = 17</em><a class="headerlink" href="#lxml.etree.ErrorDomains.SCHEMASV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.SCHEMASV">
+<span class="sig-name descname"><span class="pre">SCHEMASV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">17</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.SCHEMASV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.SCHEMATRONV">
-<code class="sig-name descname">SCHEMATRONV</code><em class="property"> = 28</em><a class="headerlink" href="#lxml.etree.ErrorDomains.SCHEMATRONV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.SCHEMATRONV">
+<span class="sig-name descname"><span class="pre">SCHEMATRONV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">28</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.SCHEMATRONV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.TREE">
-<code class="sig-name descname">TREE</code><em class="property"> = 2</em><a class="headerlink" href="#lxml.etree.ErrorDomains.TREE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.TREE">
+<span class="sig-name descname"><span class="pre">TREE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.TREE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.URI">
-<code class="sig-name descname">URI</code><em class="property"> = 30</em><a class="headerlink" href="#lxml.etree.ErrorDomains.URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.URI">
+<span class="sig-name descname"><span class="pre">URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">30</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.VALID">
-<code class="sig-name descname">VALID</code><em class="property"> = 23</em><a class="headerlink" href="#lxml.etree.ErrorDomains.VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.VALID">
+<span class="sig-name descname"><span class="pre">VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">23</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.WRITER">
-<code class="sig-name descname">WRITER</code><em class="property"> = 25</em><a class="headerlink" href="#lxml.etree.ErrorDomains.WRITER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.WRITER">
+<span class="sig-name descname"><span class="pre">WRITER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">25</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.WRITER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.XINCLUDE">
-<code class="sig-name descname">XINCLUDE</code><em class="property"> = 11</em><a class="headerlink" href="#lxml.etree.ErrorDomains.XINCLUDE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.XINCLUDE">
+<span class="sig-name descname"><span class="pre">XINCLUDE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">11</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.XINCLUDE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.XPATH">
-<code class="sig-name descname">XPATH</code><em class="property"> = 12</em><a class="headerlink" href="#lxml.etree.ErrorDomains.XPATH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.XPATH">
+<span class="sig-name descname"><span class="pre">XPATH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">12</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.XPATH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.XPOINTER">
-<code class="sig-name descname">XPOINTER</code><em class="property"> = 13</em><a class="headerlink" href="#lxml.etree.ErrorDomains.XPOINTER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.XPOINTER">
+<span class="sig-name descname"><span class="pre">XPOINTER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">13</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.XPOINTER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains.XSLT">
-<code class="sig-name descname">XSLT</code><em class="property"> = 22</em><a class="headerlink" href="#lxml.etree.ErrorDomains.XSLT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains.XSLT">
+<span class="sig-name descname"><span class="pre">XSLT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">22</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains.XSLT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorDomains._names">
-<code class="sig-name descname">_names</code><em class="property"> = {0: 'NONE', 1: 'PARSER', 2: 'TREE', 3: 'NAMESPACE', 4: 'DTD', 5: 'HTML', 6: 'MEMORY', 7: 'OUTPUT', 8: 'IO', 9: 'FTP', 10: 'HTTP', 11: 'XINCLUDE', 12: 'XPATH', 13: 'XPOINTER', 14: 'REGEXP', 15: 'DATATYPE', 16: 'SCHEMASP', 17: 'SCHEMASV', 18: 'RELAXNGP', 19: 'RELAXNGV', 20: 'CATALOG', 21: 'C14N', 22: 'XSLT', 23: 'VALID', 24: 'CHECK', 25: 'WRITER', 26: 'MODULE', 27: 'I18N', 28: 'SCHEMATRONV', 29: 'BUFFER', 30: 'URI'}</em><a class="headerlink" href="#lxml.etree.ErrorDomains._names" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorDomains._names">
+<span class="sig-name descname"><span class="pre">_names</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{0:</span> <span class="pre">'NONE',</span> <span class="pre">1:</span> <span class="pre">'PARSER',</span> <span class="pre">2:</span> <span class="pre">'TREE',</span> <span class="pre">3:</span> <span class="pre">'NAMESPACE',</span> <span class="pre">4:</span> <span class="pre">'DTD',</span> <span class="pre">5:</span> <span class="pre">'HTML',</span> <span class="pre">6:</span> <span class="pre">'MEMORY',</span> <span class="pre">7:</span> <span class="pre">'OUTPUT',</span> <span class="pre">8:</span> <span class="pre">'IO',</span> <span class="pre">9:</span> <span class="pre">'FTP',</span> <span class="pre">10:</span> <span class="pre">'HTTP',</span> <span class="pre">11:</span> <span class="pre">'XINCLUDE',</span> <span class="pre">12:</span> <span class="pre">'XPATH',</span> <span class="pre">13:</span> <span class="pre">'XPOINTER',</span> <span class="pre">14:</span> <span class="pre">'REGEXP',</span> <span class="pre">15:</span> <span class="pre">'DATATYPE',</span> <span class="pre">16:</span> <span class="pre">'SCHEMASP',</span> <span class="pre">17:</span> <span class="pre">'SCHEMASV',</span> <span class="pre">18:</span> <span class="pre">'RELAXNGP',</span> <span class="pre">19:</span> <span class="pre">'RELAXNGV',</span> <span class="pre">20:</span> <span class="pre">'CATALOG',</span> <span class="pre">21:</span> <span class="pre">'C14N',</span> <span class="pre">22:</span> <span class="pre">'XSLT',</span> <span class="pre">23:</span> <span class="pre">'VALID',</span> <span class="pre">24:</span> <span class="pre">'CHECK',</span> <span class="pre">25:</span> <span class="pre">'WRITER',</span> <span class="pre">26:</span> <span class="pre">'MODULE',</span> <span class="pre">27:</span> <span class="pre">'I18N',</span> <span class="pre">28:</span> <span class="pre">'SCHEMATRONV',</span> <span class="pre">29:</span> <span class="pre">'BUFFER',</span> <span class="pre">30:</span> <span class="pre">'URI'}</span></em><a class="headerlink" href="#lxml.etree.ErrorDomains._names" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ErrorLevels">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ErrorLevels</code><a class="headerlink" href="#lxml.etree.ErrorLevels" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ErrorLevels</span></span><a class="headerlink" href="#lxml.etree.ErrorLevels" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Libxml2 error levels</p>
 <dl class="py method">
-<dt id="lxml.etree.ErrorLevels._getName">
-<code class="sig-name descname">_getName</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">/</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ErrorLevels._getName" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels._getName">
+<span class="sig-name descname"><span class="pre">_getName</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">/</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ErrorLevels._getName" title="Permalink to this definition"></a></dt>
 <dd><p>Return the value for key if key is in the dictionary, else default.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorLevels.ERROR">
-<code class="sig-name descname">ERROR</code><em class="property"> = 2</em><a class="headerlink" href="#lxml.etree.ErrorLevels.ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels.ERROR">
+<span class="sig-name descname"><span class="pre">ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#lxml.etree.ErrorLevels.ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorLevels.FATAL">
-<code class="sig-name descname">FATAL</code><em class="property"> = 3</em><a class="headerlink" href="#lxml.etree.ErrorLevels.FATAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels.FATAL">
+<span class="sig-name descname"><span class="pre">FATAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#lxml.etree.ErrorLevels.FATAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorLevels.NONE">
-<code class="sig-name descname">NONE</code><em class="property"> = 0</em><a class="headerlink" href="#lxml.etree.ErrorLevels.NONE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels.NONE">
+<span class="sig-name descname"><span class="pre">NONE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">0</span></em><a class="headerlink" href="#lxml.etree.ErrorLevels.NONE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorLevels.WARNING">
-<code class="sig-name descname">WARNING</code><em class="property"> = 1</em><a class="headerlink" href="#lxml.etree.ErrorLevels.WARNING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels.WARNING">
+<span class="sig-name descname"><span class="pre">WARNING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#lxml.etree.ErrorLevels.WARNING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorLevels._names">
-<code class="sig-name descname">_names</code><em class="property"> = {0: 'NONE', 1: 'WARNING', 2: 'ERROR', 3: 'FATAL'}</em><a class="headerlink" href="#lxml.etree.ErrorLevels._names" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorLevels._names">
+<span class="sig-name descname"><span class="pre">_names</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{0:</span> <span class="pre">'NONE',</span> <span class="pre">1:</span> <span class="pre">'WARNING',</span> <span class="pre">2:</span> <span class="pre">'ERROR',</span> <span class="pre">3:</span> <span class="pre">'FATAL'}</span></em><a class="headerlink" href="#lxml.etree.ErrorLevels._names" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ErrorTypes">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ErrorTypes</code><a class="headerlink" href="#lxml.etree.ErrorTypes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ErrorTypes</span></span><a class="headerlink" href="#lxml.etree.ErrorTypes" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Libxml2 error types</p>
 <dl class="py method">
-<dt id="lxml.etree.ErrorTypes._getName">
-<code class="sig-name descname">_getName</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">/</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ErrorTypes._getName" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes._getName">
+<span class="sig-name descname"><span class="pre">_getName</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">/</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ErrorTypes._getName" title="Permalink to this definition"></a></dt>
 <dd><p>Return the value for key if key is in the dictionary, else default.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.BUF_OVERFLOW">
-<code class="sig-name descname">BUF_OVERFLOW</code><em class="property"> = 7000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.BUF_OVERFLOW" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.BUF_OVERFLOW">
+<span class="sig-name descname"><span class="pre">BUF_OVERFLOW</span></span><em class="property"> <span class="pre">=</span> <span class="pre">7000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.BUF_OVERFLOW" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.C14N_CREATE_CTXT">
-<code class="sig-name descname">C14N_CREATE_CTXT</code><em class="property"> = 1950</em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_CREATE_CTXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.C14N_CREATE_CTXT">
+<span class="sig-name descname"><span class="pre">C14N_CREATE_CTXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1950</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_CREATE_CTXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.C14N_CREATE_STACK">
-<code class="sig-name descname">C14N_CREATE_STACK</code><em class="property"> = 1952</em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_CREATE_STACK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.C14N_CREATE_STACK">
+<span class="sig-name descname"><span class="pre">C14N_CREATE_STACK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1952</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_CREATE_STACK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.C14N_INVALID_NODE">
-<code class="sig-name descname">C14N_INVALID_NODE</code><em class="property"> = 1953</em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_INVALID_NODE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.C14N_INVALID_NODE">
+<span class="sig-name descname"><span class="pre">C14N_INVALID_NODE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1953</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_INVALID_NODE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.C14N_RELATIVE_NAMESPACE">
-<code class="sig-name descname">C14N_RELATIVE_NAMESPACE</code><em class="property"> = 1955</em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_RELATIVE_NAMESPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.C14N_RELATIVE_NAMESPACE">
+<span class="sig-name descname"><span class="pre">C14N_RELATIVE_NAMESPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1955</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_RELATIVE_NAMESPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.C14N_REQUIRES_UTF8">
-<code class="sig-name descname">C14N_REQUIRES_UTF8</code><em class="property"> = 1951</em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_REQUIRES_UTF8" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.C14N_REQUIRES_UTF8">
+<span class="sig-name descname"><span class="pre">C14N_REQUIRES_UTF8</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1951</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_REQUIRES_UTF8" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.C14N_UNKNOW_NODE">
-<code class="sig-name descname">C14N_UNKNOW_NODE</code><em class="property"> = 1954</em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_UNKNOW_NODE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.C14N_UNKNOW_NODE">
+<span class="sig-name descname"><span class="pre">C14N_UNKNOW_NODE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1954</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.C14N_UNKNOW_NODE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CATALOG_ENTRY_BROKEN">
-<code class="sig-name descname">CATALOG_ENTRY_BROKEN</code><em class="property"> = 1651</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_ENTRY_BROKEN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CATALOG_ENTRY_BROKEN">
+<span class="sig-name descname"><span class="pre">CATALOG_ENTRY_BROKEN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1651</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_ENTRY_BROKEN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CATALOG_MISSING_ATTR">
-<code class="sig-name descname">CATALOG_MISSING_ATTR</code><em class="property"> = 1650</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_MISSING_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CATALOG_MISSING_ATTR">
+<span class="sig-name descname"><span class="pre">CATALOG_MISSING_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1650</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_MISSING_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CATALOG_NOT_CATALOG">
-<code class="sig-name descname">CATALOG_NOT_CATALOG</code><em class="property"> = 1653</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_NOT_CATALOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CATALOG_NOT_CATALOG">
+<span class="sig-name descname"><span class="pre">CATALOG_NOT_CATALOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1653</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_NOT_CATALOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CATALOG_PREFER_VALUE">
-<code class="sig-name descname">CATALOG_PREFER_VALUE</code><em class="property"> = 1652</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_PREFER_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CATALOG_PREFER_VALUE">
+<span class="sig-name descname"><span class="pre">CATALOG_PREFER_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1652</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_PREFER_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CATALOG_RECURSION">
-<code class="sig-name descname">CATALOG_RECURSION</code><em class="property"> = 1654</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_RECURSION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CATALOG_RECURSION">
+<span class="sig-name descname"><span class="pre">CATALOG_RECURSION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1654</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CATALOG_RECURSION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_ENTITY_TYPE">
-<code class="sig-name descname">CHECK_ENTITY_TYPE</code><em class="property"> = 5012</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_ENTITY_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_ENTITY_TYPE">
+<span class="sig-name descname"><span class="pre">CHECK_ENTITY_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5012</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_ENTITY_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_ATTRIBUTE">
-<code class="sig-name descname">CHECK_FOUND_ATTRIBUTE</code><em class="property"> = 5001</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ATTRIBUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_ATTRIBUTE">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_ATTRIBUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5001</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ATTRIBUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_CDATA">
-<code class="sig-name descname">CHECK_FOUND_CDATA</code><em class="property"> = 5003</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_CDATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_CDATA">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_CDATA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5003</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_CDATA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_COMMENT">
-<code class="sig-name descname">CHECK_FOUND_COMMENT</code><em class="property"> = 5007</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_COMMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_COMMENT">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_COMMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5007</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_COMMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_DOCTYPE">
-<code class="sig-name descname">CHECK_FOUND_DOCTYPE</code><em class="property"> = 5008</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_DOCTYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_DOCTYPE">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_DOCTYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5008</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_DOCTYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_ELEMENT">
-<code class="sig-name descname">CHECK_FOUND_ELEMENT</code><em class="property"> = 5000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ELEMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_ELEMENT">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_ELEMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ELEMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_ENTITY">
-<code class="sig-name descname">CHECK_FOUND_ENTITY</code><em class="property"> = 5005</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ENTITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_ENTITY">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_ENTITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5005</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ENTITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_ENTITYREF">
-<code class="sig-name descname">CHECK_FOUND_ENTITYREF</code><em class="property"> = 5004</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ENTITYREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_ENTITYREF">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_ENTITYREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5004</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_ENTITYREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_FRAGMENT">
-<code class="sig-name descname">CHECK_FOUND_FRAGMENT</code><em class="property"> = 5009</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_FRAGMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_FRAGMENT">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_FRAGMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5009</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_FRAGMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_NOTATION">
-<code class="sig-name descname">CHECK_FOUND_NOTATION</code><em class="property"> = 5010</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_NOTATION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_NOTATION">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_NOTATION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5010</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_NOTATION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_PI">
-<code class="sig-name descname">CHECK_FOUND_PI</code><em class="property"> = 5006</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_PI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_PI">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_PI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5006</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_PI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_FOUND_TEXT">
-<code class="sig-name descname">CHECK_FOUND_TEXT</code><em class="property"> = 5002</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_TEXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_FOUND_TEXT">
+<span class="sig-name descname"><span class="pre">CHECK_FOUND_TEXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5002</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_FOUND_TEXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NAME_NOT_NULL">
-<code class="sig-name descname">CHECK_NAME_NOT_NULL</code><em class="property"> = 5037</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NAME_NOT_NULL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NAME_NOT_NULL">
+<span class="sig-name descname"><span class="pre">CHECK_NAME_NOT_NULL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5037</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NAME_NOT_NULL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_ATTR">
-<code class="sig-name descname">CHECK_NOT_ATTR</code><em class="property"> = 5023</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_ATTR">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5023</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_ATTR_DECL">
-<code class="sig-name descname">CHECK_NOT_ATTR_DECL</code><em class="property"> = 5024</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ATTR_DECL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_ATTR_DECL">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_ATTR_DECL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5024</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ATTR_DECL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_DTD">
-<code class="sig-name descname">CHECK_NOT_DTD</code><em class="property"> = 5022</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_DTD">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_DTD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5022</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_DTD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_ELEM_DECL">
-<code class="sig-name descname">CHECK_NOT_ELEM_DECL</code><em class="property"> = 5025</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ELEM_DECL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_ELEM_DECL">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_ELEM_DECL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5025</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ELEM_DECL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_ENTITY_DECL">
-<code class="sig-name descname">CHECK_NOT_ENTITY_DECL</code><em class="property"> = 5026</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ENTITY_DECL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_ENTITY_DECL">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_ENTITY_DECL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5026</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_ENTITY_DECL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_NCNAME">
-<code class="sig-name descname">CHECK_NOT_NCNAME</code><em class="property"> = 5034</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_NCNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_NCNAME">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_NCNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5034</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_NCNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_NS_DECL">
-<code class="sig-name descname">CHECK_NOT_NS_DECL</code><em class="property"> = 5027</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_NS_DECL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_NS_DECL">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_NS_DECL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5027</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_NS_DECL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NOT_UTF8">
-<code class="sig-name descname">CHECK_NOT_UTF8</code><em class="property"> = 5032</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_UTF8" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NOT_UTF8">
+<span class="sig-name descname"><span class="pre">CHECK_NOT_UTF8</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5032</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NOT_UTF8" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_DICT">
-<code class="sig-name descname">CHECK_NO_DICT</code><em class="property"> = 5033</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_DICT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_DICT">
+<span class="sig-name descname"><span class="pre">CHECK_NO_DICT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5033</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_DICT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_DOC">
-<code class="sig-name descname">CHECK_NO_DOC</code><em class="property"> = 5014</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_DOC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_DOC">
+<span class="sig-name descname"><span class="pre">CHECK_NO_DOC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5014</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_DOC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_ELEM">
-<code class="sig-name descname">CHECK_NO_ELEM</code><em class="property"> = 5016</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_ELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_ELEM">
+<span class="sig-name descname"><span class="pre">CHECK_NO_ELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5016</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_ELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_HREF">
-<code class="sig-name descname">CHECK_NO_HREF</code><em class="property"> = 5028</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_HREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_HREF">
+<span class="sig-name descname"><span class="pre">CHECK_NO_HREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5028</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_HREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_NAME">
-<code class="sig-name descname">CHECK_NO_NAME</code><em class="property"> = 5015</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_NAME">
+<span class="sig-name descname"><span class="pre">CHECK_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5015</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_NEXT">
-<code class="sig-name descname">CHECK_NO_NEXT</code><em class="property"> = 5020</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_NEXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_NEXT">
+<span class="sig-name descname"><span class="pre">CHECK_NO_NEXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5020</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_NEXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_PARENT">
-<code class="sig-name descname">CHECK_NO_PARENT</code><em class="property"> = 5013</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_PARENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_PARENT">
+<span class="sig-name descname"><span class="pre">CHECK_NO_PARENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5013</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_PARENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NO_PREV">
-<code class="sig-name descname">CHECK_NO_PREV</code><em class="property"> = 5018</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_PREV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NO_PREV">
+<span class="sig-name descname"><span class="pre">CHECK_NO_PREV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5018</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NO_PREV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NS_ANCESTOR">
-<code class="sig-name descname">CHECK_NS_ANCESTOR</code><em class="property"> = 5031</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NS_ANCESTOR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NS_ANCESTOR">
+<span class="sig-name descname"><span class="pre">CHECK_NS_ANCESTOR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5031</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NS_ANCESTOR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_NS_SCOPE">
-<code class="sig-name descname">CHECK_NS_SCOPE</code><em class="property"> = 5030</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NS_SCOPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_NS_SCOPE">
+<span class="sig-name descname"><span class="pre">CHECK_NS_SCOPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5030</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_NS_SCOPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_OUTSIDE_DICT">
-<code class="sig-name descname">CHECK_OUTSIDE_DICT</code><em class="property"> = 5035</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_OUTSIDE_DICT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_OUTSIDE_DICT">
+<span class="sig-name descname"><span class="pre">CHECK_OUTSIDE_DICT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5035</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_OUTSIDE_DICT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_UNKNOWN_NODE">
-<code class="sig-name descname">CHECK_UNKNOWN_NODE</code><em class="property"> = 5011</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_UNKNOWN_NODE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_UNKNOWN_NODE">
+<span class="sig-name descname"><span class="pre">CHECK_UNKNOWN_NODE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5011</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_UNKNOWN_NODE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_WRONG_DOC">
-<code class="sig-name descname">CHECK_WRONG_DOC</code><em class="property"> = 5017</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_DOC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_WRONG_DOC">
+<span class="sig-name descname"><span class="pre">CHECK_WRONG_DOC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5017</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_DOC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_WRONG_NAME">
-<code class="sig-name descname">CHECK_WRONG_NAME</code><em class="property"> = 5036</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_WRONG_NAME">
+<span class="sig-name descname"><span class="pre">CHECK_WRONG_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5036</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_WRONG_NEXT">
-<code class="sig-name descname">CHECK_WRONG_NEXT</code><em class="property"> = 5021</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_NEXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_WRONG_NEXT">
+<span class="sig-name descname"><span class="pre">CHECK_WRONG_NEXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5021</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_NEXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_WRONG_PARENT">
-<code class="sig-name descname">CHECK_WRONG_PARENT</code><em class="property"> = 5029</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_PARENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_WRONG_PARENT">
+<span class="sig-name descname"><span class="pre">CHECK_WRONG_PARENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5029</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_PARENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.CHECK_WRONG_PREV">
-<code class="sig-name descname">CHECK_WRONG_PREV</code><em class="property"> = 5019</em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_PREV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.CHECK_WRONG_PREV">
+<span class="sig-name descname"><span class="pre">CHECK_WRONG_PREV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5019</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.CHECK_WRONG_PREV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ATTRIBUTE_DEFAULT">
-<code class="sig-name descname">DTD_ATTRIBUTE_DEFAULT</code><em class="property"> = 500</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_DEFAULT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ATTRIBUTE_DEFAULT">
+<span class="sig-name descname"><span class="pre">DTD_ATTRIBUTE_DEFAULT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">500</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_DEFAULT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ATTRIBUTE_REDEFINED">
-<code class="sig-name descname">DTD_ATTRIBUTE_REDEFINED</code><em class="property"> = 501</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ATTRIBUTE_REDEFINED">
+<span class="sig-name descname"><span class="pre">DTD_ATTRIBUTE_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">501</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ATTRIBUTE_VALUE">
-<code class="sig-name descname">DTD_ATTRIBUTE_VALUE</code><em class="property"> = 502</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ATTRIBUTE_VALUE">
+<span class="sig-name descname"><span class="pre">DTD_ATTRIBUTE_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">502</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_CONTENT_ERROR">
-<code class="sig-name descname">DTD_CONTENT_ERROR</code><em class="property"> = 503</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_CONTENT_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_CONTENT_ERROR">
+<span class="sig-name descname"><span class="pre">DTD_CONTENT_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">503</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_CONTENT_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_CONTENT_MODEL">
-<code class="sig-name descname">DTD_CONTENT_MODEL</code><em class="property"> = 504</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_CONTENT_MODEL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_CONTENT_MODEL">
+<span class="sig-name descname"><span class="pre">DTD_CONTENT_MODEL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">504</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_CONTENT_MODEL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_CONTENT_NOT_DETERMINIST">
-<code class="sig-name descname">DTD_CONTENT_NOT_DETERMINIST</code><em class="property"> = 505</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_CONTENT_NOT_DETERMINIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_CONTENT_NOT_DETERMINIST">
+<span class="sig-name descname"><span class="pre">DTD_CONTENT_NOT_DETERMINIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">505</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_CONTENT_NOT_DETERMINIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_DIFFERENT_PREFIX">
-<code class="sig-name descname">DTD_DIFFERENT_PREFIX</code><em class="property"> = 506</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_DIFFERENT_PREFIX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_DIFFERENT_PREFIX">
+<span class="sig-name descname"><span class="pre">DTD_DIFFERENT_PREFIX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">506</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_DIFFERENT_PREFIX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_DUP_TOKEN">
-<code class="sig-name descname">DTD_DUP_TOKEN</code><em class="property"> = 541</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_DUP_TOKEN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_DUP_TOKEN">
+<span class="sig-name descname"><span class="pre">DTD_DUP_TOKEN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">541</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_DUP_TOKEN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE">
-<code class="sig-name descname">DTD_ELEM_DEFAULT_NAMESPACE</code><em class="property"> = 507</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE">
+<span class="sig-name descname"><span class="pre">DTD_ELEM_DEFAULT_NAMESPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">507</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ELEM_NAMESPACE">
-<code class="sig-name descname">DTD_ELEM_NAMESPACE</code><em class="property"> = 508</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ELEM_NAMESPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ELEM_NAMESPACE">
+<span class="sig-name descname"><span class="pre">DTD_ELEM_NAMESPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">508</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ELEM_NAMESPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ELEM_REDEFINED">
-<code class="sig-name descname">DTD_ELEM_REDEFINED</code><em class="property"> = 509</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ELEM_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ELEM_REDEFINED">
+<span class="sig-name descname"><span class="pre">DTD_ELEM_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">509</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ELEM_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_EMPTY_NOTATION">
-<code class="sig-name descname">DTD_EMPTY_NOTATION</code><em class="property"> = 510</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_EMPTY_NOTATION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_EMPTY_NOTATION">
+<span class="sig-name descname"><span class="pre">DTD_EMPTY_NOTATION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">510</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_EMPTY_NOTATION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ENTITY_TYPE">
-<code class="sig-name descname">DTD_ENTITY_TYPE</code><em class="property"> = 511</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ENTITY_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ENTITY_TYPE">
+<span class="sig-name descname"><span class="pre">DTD_ENTITY_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">511</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ENTITY_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ID_FIXED">
-<code class="sig-name descname">DTD_ID_FIXED</code><em class="property"> = 512</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ID_FIXED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ID_FIXED">
+<span class="sig-name descname"><span class="pre">DTD_ID_FIXED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">512</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ID_FIXED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ID_REDEFINED">
-<code class="sig-name descname">DTD_ID_REDEFINED</code><em class="property"> = 513</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ID_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ID_REDEFINED">
+<span class="sig-name descname"><span class="pre">DTD_ID_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">513</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ID_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ID_SUBSET">
-<code class="sig-name descname">DTD_ID_SUBSET</code><em class="property"> = 514</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ID_SUBSET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ID_SUBSET">
+<span class="sig-name descname"><span class="pre">DTD_ID_SUBSET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">514</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ID_SUBSET" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_INVALID_CHILD">
-<code class="sig-name descname">DTD_INVALID_CHILD</code><em class="property"> = 515</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_INVALID_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_INVALID_CHILD">
+<span class="sig-name descname"><span class="pre">DTD_INVALID_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">515</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_INVALID_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_INVALID_DEFAULT">
-<code class="sig-name descname">DTD_INVALID_DEFAULT</code><em class="property"> = 516</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_INVALID_DEFAULT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_INVALID_DEFAULT">
+<span class="sig-name descname"><span class="pre">DTD_INVALID_DEFAULT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">516</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_INVALID_DEFAULT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_LOAD_ERROR">
-<code class="sig-name descname">DTD_LOAD_ERROR</code><em class="property"> = 517</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_LOAD_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_LOAD_ERROR">
+<span class="sig-name descname"><span class="pre">DTD_LOAD_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">517</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_LOAD_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_MISSING_ATTRIBUTE">
-<code class="sig-name descname">DTD_MISSING_ATTRIBUTE</code><em class="property"> = 518</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_MISSING_ATTRIBUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_MISSING_ATTRIBUTE">
+<span class="sig-name descname"><span class="pre">DTD_MISSING_ATTRIBUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">518</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_MISSING_ATTRIBUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_MIXED_CORRUPT">
-<code class="sig-name descname">DTD_MIXED_CORRUPT</code><em class="property"> = 519</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_MIXED_CORRUPT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_MIXED_CORRUPT">
+<span class="sig-name descname"><span class="pre">DTD_MIXED_CORRUPT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">519</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_MIXED_CORRUPT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_MULTIPLE_ID">
-<code class="sig-name descname">DTD_MULTIPLE_ID</code><em class="property"> = 520</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_MULTIPLE_ID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_MULTIPLE_ID">
+<span class="sig-name descname"><span class="pre">DTD_MULTIPLE_ID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">520</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_MULTIPLE_ID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NOTATION_REDEFINED">
-<code class="sig-name descname">DTD_NOTATION_REDEFINED</code><em class="property"> = 526</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOTATION_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NOTATION_REDEFINED">
+<span class="sig-name descname"><span class="pre">DTD_NOTATION_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">526</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOTATION_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NOTATION_VALUE">
-<code class="sig-name descname">DTD_NOTATION_VALUE</code><em class="property"> = 527</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOTATION_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NOTATION_VALUE">
+<span class="sig-name descname"><span class="pre">DTD_NOTATION_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">527</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOTATION_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NOT_EMPTY">
-<code class="sig-name descname">DTD_NOT_EMPTY</code><em class="property"> = 528</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NOT_EMPTY">
+<span class="sig-name descname"><span class="pre">DTD_NOT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">528</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NOT_PCDATA">
-<code class="sig-name descname">DTD_NOT_PCDATA</code><em class="property"> = 529</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOT_PCDATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NOT_PCDATA">
+<span class="sig-name descname"><span class="pre">DTD_NOT_PCDATA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">529</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOT_PCDATA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NOT_STANDALONE">
-<code class="sig-name descname">DTD_NOT_STANDALONE</code><em class="property"> = 530</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOT_STANDALONE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NOT_STANDALONE">
+<span class="sig-name descname"><span class="pre">DTD_NOT_STANDALONE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">530</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NOT_STANDALONE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NO_DOC">
-<code class="sig-name descname">DTD_NO_DOC</code><em class="property"> = 521</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_DOC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NO_DOC">
+<span class="sig-name descname"><span class="pre">DTD_NO_DOC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">521</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_DOC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NO_DTD">
-<code class="sig-name descname">DTD_NO_DTD</code><em class="property"> = 522</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NO_DTD">
+<span class="sig-name descname"><span class="pre">DTD_NO_DTD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">522</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_DTD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NO_ELEM_NAME">
-<code class="sig-name descname">DTD_NO_ELEM_NAME</code><em class="property"> = 523</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_ELEM_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NO_ELEM_NAME">
+<span class="sig-name descname"><span class="pre">DTD_NO_ELEM_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">523</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_ELEM_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NO_PREFIX">
-<code class="sig-name descname">DTD_NO_PREFIX</code><em class="property"> = 524</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_PREFIX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NO_PREFIX">
+<span class="sig-name descname"><span class="pre">DTD_NO_PREFIX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">524</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_PREFIX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_NO_ROOT">
-<code class="sig-name descname">DTD_NO_ROOT</code><em class="property"> = 525</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_ROOT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_NO_ROOT">
+<span class="sig-name descname"><span class="pre">DTD_NO_ROOT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">525</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_NO_ROOT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_ROOT_NAME">
-<code class="sig-name descname">DTD_ROOT_NAME</code><em class="property"> = 531</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ROOT_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_ROOT_NAME">
+<span class="sig-name descname"><span class="pre">DTD_ROOT_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">531</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_ROOT_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_STANDALONE_DEFAULTED">
-<code class="sig-name descname">DTD_STANDALONE_DEFAULTED</code><em class="property"> = 538</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_STANDALONE_DEFAULTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_STANDALONE_DEFAULTED">
+<span class="sig-name descname"><span class="pre">DTD_STANDALONE_DEFAULTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">538</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_STANDALONE_DEFAULTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_STANDALONE_WHITE_SPACE">
-<code class="sig-name descname">DTD_STANDALONE_WHITE_SPACE</code><em class="property"> = 532</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_STANDALONE_WHITE_SPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_STANDALONE_WHITE_SPACE">
+<span class="sig-name descname"><span class="pre">DTD_STANDALONE_WHITE_SPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">532</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_STANDALONE_WHITE_SPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ATTRIBUTE">
-<code class="sig-name descname">DTD_UNKNOWN_ATTRIBUTE</code><em class="property"> = 533</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ATTRIBUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ATTRIBUTE">
+<span class="sig-name descname"><span class="pre">DTD_UNKNOWN_ATTRIBUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">533</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ATTRIBUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ELEM">
-<code class="sig-name descname">DTD_UNKNOWN_ELEM</code><em class="property"> = 534</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ELEM">
+<span class="sig-name descname"><span class="pre">DTD_UNKNOWN_ELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">534</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ENTITY">
-<code class="sig-name descname">DTD_UNKNOWN_ENTITY</code><em class="property"> = 535</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ENTITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ENTITY">
+<span class="sig-name descname"><span class="pre">DTD_UNKNOWN_ENTITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">535</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ENTITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ID">
-<code class="sig-name descname">DTD_UNKNOWN_ID</code><em class="property"> = 536</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_UNKNOWN_ID">
+<span class="sig-name descname"><span class="pre">DTD_UNKNOWN_ID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">536</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_ID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_UNKNOWN_NOTATION">
-<code class="sig-name descname">DTD_UNKNOWN_NOTATION</code><em class="property"> = 537</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_NOTATION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_UNKNOWN_NOTATION">
+<span class="sig-name descname"><span class="pre">DTD_UNKNOWN_NOTATION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">537</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_UNKNOWN_NOTATION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_XMLID_TYPE">
-<code class="sig-name descname">DTD_XMLID_TYPE</code><em class="property"> = 540</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_XMLID_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_XMLID_TYPE">
+<span class="sig-name descname"><span class="pre">DTD_XMLID_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">540</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_XMLID_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.DTD_XMLID_VALUE">
-<code class="sig-name descname">DTD_XMLID_VALUE</code><em class="property"> = 539</em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_XMLID_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.DTD_XMLID_VALUE">
+<span class="sig-name descname"><span class="pre">DTD_XMLID_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">539</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.DTD_XMLID_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_FINISHED">
-<code class="sig-name descname">ERR_ATTLIST_NOT_FINISHED</code><em class="property"> = 51</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_ATTLIST_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">51</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_STARTED">
-<code class="sig-name descname">ERR_ATTLIST_NOT_STARTED</code><em class="property"> = 50</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_ATTLIST_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">50</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED">
-<code class="sig-name descname">ERR_ATTRIBUTE_NOT_FINISHED</code><em class="property"> = 40</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_ATTRIBUTE_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">40</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED">
-<code class="sig-name descname">ERR_ATTRIBUTE_NOT_STARTED</code><em class="property"> = 39</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_ATTRIBUTE_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">39</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_REDEFINED">
-<code class="sig-name descname">ERR_ATTRIBUTE_REDEFINED</code><em class="property"> = 42</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_REDEFINED">
+<span class="sig-name descname"><span class="pre">ERR_ATTRIBUTE_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">42</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE">
-<code class="sig-name descname">ERR_ATTRIBUTE_WITHOUT_VALUE</code><em class="property"> = 41</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE">
+<span class="sig-name descname"><span class="pre">ERR_ATTRIBUTE_WITHOUT_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">41</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CDATA_NOT_FINISHED">
-<code class="sig-name descname">ERR_CDATA_NOT_FINISHED</code><em class="property"> = 63</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CDATA_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CDATA_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_CDATA_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">63</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CDATA_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CHARREF_AT_EOF">
-<code class="sig-name descname">ERR_CHARREF_AT_EOF</code><em class="property"> = 10</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_AT_EOF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CHARREF_AT_EOF">
+<span class="sig-name descname"><span class="pre">ERR_CHARREF_AT_EOF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">10</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_AT_EOF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CHARREF_IN_DTD">
-<code class="sig-name descname">ERR_CHARREF_IN_DTD</code><em class="property"> = 13</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_IN_DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CHARREF_IN_DTD">
+<span class="sig-name descname"><span class="pre">ERR_CHARREF_IN_DTD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">13</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_IN_DTD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CHARREF_IN_EPILOG">
-<code class="sig-name descname">ERR_CHARREF_IN_EPILOG</code><em class="property"> = 12</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_IN_EPILOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CHARREF_IN_EPILOG">
+<span class="sig-name descname"><span class="pre">ERR_CHARREF_IN_EPILOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">12</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_IN_EPILOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CHARREF_IN_PROLOG">
-<code class="sig-name descname">ERR_CHARREF_IN_PROLOG</code><em class="property"> = 11</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_IN_PROLOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CHARREF_IN_PROLOG">
+<span class="sig-name descname"><span class="pre">ERR_CHARREF_IN_PROLOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">11</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CHARREF_IN_PROLOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_COMMENT_NOT_FINISHED">
-<code class="sig-name descname">ERR_COMMENT_NOT_FINISHED</code><em class="property"> = 45</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_COMMENT_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_COMMENT_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_COMMENT_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">45</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_COMMENT_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID">
-<code class="sig-name descname">ERR_CONDSEC_INVALID</code><em class="property"> = 83</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID">
+<span class="sig-name descname"><span class="pre">ERR_CONDSEC_INVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">83</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD">
-<code class="sig-name descname">ERR_CONDSEC_INVALID_KEYWORD</code><em class="property"> = 95</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD">
+<span class="sig-name descname"><span class="pre">ERR_CONDSEC_INVALID_KEYWORD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">95</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_FINISHED">
-<code class="sig-name descname">ERR_CONDSEC_NOT_FINISHED</code><em class="property"> = 59</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_CONDSEC_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">59</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_STARTED">
-<code class="sig-name descname">ERR_CONDSEC_NOT_STARTED</code><em class="property"> = 58</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_CONDSEC_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">58</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_DOCTYPE_NOT_FINISHED">
-<code class="sig-name descname">ERR_DOCTYPE_NOT_FINISHED</code><em class="property"> = 61</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCTYPE_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_DOCTYPE_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_DOCTYPE_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">61</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCTYPE_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_DOCUMENT_EMPTY">
-<code class="sig-name descname">ERR_DOCUMENT_EMPTY</code><em class="property"> = 4</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCUMENT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_DOCUMENT_EMPTY">
+<span class="sig-name descname"><span class="pre">ERR_DOCUMENT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCUMENT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_DOCUMENT_END">
-<code class="sig-name descname">ERR_DOCUMENT_END</code><em class="property"> = 5</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCUMENT_END" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_DOCUMENT_END">
+<span class="sig-name descname"><span class="pre">ERR_DOCUMENT_END</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCUMENT_END" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_DOCUMENT_START">
-<code class="sig-name descname">ERR_DOCUMENT_START</code><em class="property"> = 3</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCUMENT_START" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_DOCUMENT_START">
+<span class="sig-name descname"><span class="pre">ERR_DOCUMENT_START</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_DOCUMENT_START" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED">
-<code class="sig-name descname">ERR_ELEMCONTENT_NOT_FINISHED</code><em class="property"> = 55</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_ELEMCONTENT_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">55</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED">
-<code class="sig-name descname">ERR_ELEMCONTENT_NOT_STARTED</code><em class="property"> = 54</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_ELEMCONTENT_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">54</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENCODING_NAME">
-<code class="sig-name descname">ERR_ENCODING_NAME</code><em class="property"> = 79</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENCODING_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENCODING_NAME">
+<span class="sig-name descname"><span class="pre">ERR_ENCODING_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">79</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENCODING_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITYREF_AT_EOF">
-<code class="sig-name descname">ERR_ENTITYREF_AT_EOF</code><em class="property"> = 14</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_AT_EOF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITYREF_AT_EOF">
+<span class="sig-name descname"><span class="pre">ERR_ENTITYREF_AT_EOF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">14</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_AT_EOF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_DTD">
-<code class="sig-name descname">ERR_ENTITYREF_IN_DTD</code><em class="property"> = 17</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_DTD">
+<span class="sig-name descname"><span class="pre">ERR_ENTITYREF_IN_DTD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">17</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_DTD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_EPILOG">
-<code class="sig-name descname">ERR_ENTITYREF_IN_EPILOG</code><em class="property"> = 16</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_EPILOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_EPILOG">
+<span class="sig-name descname"><span class="pre">ERR_ENTITYREF_IN_EPILOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">16</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_EPILOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_PROLOG">
-<code class="sig-name descname">ERR_ENTITYREF_IN_PROLOG</code><em class="property"> = 15</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_PROLOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_PROLOG">
+<span class="sig-name descname"><span class="pre">ERR_ENTITYREF_IN_PROLOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">15</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_PROLOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITYREF_NO_NAME">
-<code class="sig-name descname">ERR_ENTITYREF_NO_NAME</code><em class="property"> = 22</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITYREF_NO_NAME">
+<span class="sig-name descname"><span class="pre">ERR_ENTITYREF_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">22</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING">
-<code class="sig-name descname">ERR_ENTITYREF_SEMICOL_MISSING</code><em class="property"> = 23</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING">
+<span class="sig-name descname"><span class="pre">ERR_ENTITYREF_SEMICOL_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">23</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_BOUNDARY">
-<code class="sig-name descname">ERR_ENTITY_BOUNDARY</code><em class="property"> = 90</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_BOUNDARY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_BOUNDARY">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_BOUNDARY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">90</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_BOUNDARY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_CHAR_ERROR">
-<code class="sig-name descname">ERR_ENTITY_CHAR_ERROR</code><em class="property"> = 87</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_CHAR_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_CHAR_ERROR">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_CHAR_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">87</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_CHAR_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_IS_EXTERNAL">
-<code class="sig-name descname">ERR_ENTITY_IS_EXTERNAL</code><em class="property"> = 29</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_IS_EXTERNAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_IS_EXTERNAL">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_IS_EXTERNAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">29</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_IS_EXTERNAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_IS_PARAMETER">
-<code class="sig-name descname">ERR_ENTITY_IS_PARAMETER</code><em class="property"> = 30</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_IS_PARAMETER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_IS_PARAMETER">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_IS_PARAMETER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">30</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_IS_PARAMETER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_LOOP">
-<code class="sig-name descname">ERR_ENTITY_LOOP</code><em class="property"> = 89</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_LOOP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_LOOP">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_LOOP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">89</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_LOOP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_NOT_FINISHED">
-<code class="sig-name descname">ERR_ENTITY_NOT_FINISHED</code><em class="property"> = 37</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">37</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_NOT_STARTED">
-<code class="sig-name descname">ERR_ENTITY_NOT_STARTED</code><em class="property"> = 36</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">36</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_PE_INTERNAL">
-<code class="sig-name descname">ERR_ENTITY_PE_INTERNAL</code><em class="property"> = 88</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_PE_INTERNAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_PE_INTERNAL">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_PE_INTERNAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">88</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_PE_INTERNAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_ENTITY_PROCESSING">
-<code class="sig-name descname">ERR_ENTITY_PROCESSING</code><em class="property"> = 104</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_PROCESSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_ENTITY_PROCESSING">
+<span class="sig-name descname"><span class="pre">ERR_ENTITY_PROCESSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">104</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_ENTITY_PROCESSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_EQUAL_REQUIRED">
-<code class="sig-name descname">ERR_EQUAL_REQUIRED</code><em class="property"> = 75</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EQUAL_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_EQUAL_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_EQUAL_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">75</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EQUAL_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_EXTRA_CONTENT">
-<code class="sig-name descname">ERR_EXTRA_CONTENT</code><em class="property"> = 86</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EXTRA_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_EXTRA_CONTENT">
+<span class="sig-name descname"><span class="pre">ERR_EXTRA_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">86</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EXTRA_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_EXT_ENTITY_STANDALONE">
-<code class="sig-name descname">ERR_EXT_ENTITY_STANDALONE</code><em class="property"> = 82</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EXT_ENTITY_STANDALONE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_EXT_ENTITY_STANDALONE">
+<span class="sig-name descname"><span class="pre">ERR_EXT_ENTITY_STANDALONE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">82</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EXT_ENTITY_STANDALONE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED">
-<code class="sig-name descname">ERR_EXT_SUBSET_NOT_FINISHED</code><em class="property"> = 60</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_EXT_SUBSET_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">60</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_GT_REQUIRED">
-<code class="sig-name descname">ERR_GT_REQUIRED</code><em class="property"> = 73</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_GT_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_GT_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_GT_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">73</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_GT_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_HYPHEN_IN_COMMENT">
-<code class="sig-name descname">ERR_HYPHEN_IN_COMMENT</code><em class="property"> = 80</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_HYPHEN_IN_COMMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_HYPHEN_IN_COMMENT">
+<span class="sig-name descname"><span class="pre">ERR_HYPHEN_IN_COMMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">80</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_HYPHEN_IN_COMMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INTERNAL_ERROR">
-<code class="sig-name descname">ERR_INTERNAL_ERROR</code><em class="property"> = 1</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INTERNAL_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INTERNAL_ERROR">
+<span class="sig-name descname"><span class="pre">ERR_INTERNAL_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INTERNAL_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INVALID_CHAR">
-<code class="sig-name descname">ERR_INVALID_CHAR</code><em class="property"> = 9</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_CHAR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INVALID_CHAR">
+<span class="sig-name descname"><span class="pre">ERR_INVALID_CHAR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">9</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_CHAR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INVALID_CHARREF">
-<code class="sig-name descname">ERR_INVALID_CHARREF</code><em class="property"> = 8</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_CHARREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INVALID_CHARREF">
+<span class="sig-name descname"><span class="pre">ERR_INVALID_CHARREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">8</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_CHARREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INVALID_DEC_CHARREF">
-<code class="sig-name descname">ERR_INVALID_DEC_CHARREF</code><em class="property"> = 7</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_DEC_CHARREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INVALID_DEC_CHARREF">
+<span class="sig-name descname"><span class="pre">ERR_INVALID_DEC_CHARREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">7</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_DEC_CHARREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INVALID_ENCODING">
-<code class="sig-name descname">ERR_INVALID_ENCODING</code><em class="property"> = 81</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_ENCODING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INVALID_ENCODING">
+<span class="sig-name descname"><span class="pre">ERR_INVALID_ENCODING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">81</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_ENCODING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INVALID_HEX_CHARREF">
-<code class="sig-name descname">ERR_INVALID_HEX_CHARREF</code><em class="property"> = 6</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_HEX_CHARREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INVALID_HEX_CHARREF">
+<span class="sig-name descname"><span class="pre">ERR_INVALID_HEX_CHARREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_HEX_CHARREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_INVALID_URI">
-<code class="sig-name descname">ERR_INVALID_URI</code><em class="property"> = 91</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_INVALID_URI">
+<span class="sig-name descname"><span class="pre">ERR_INVALID_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">91</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_INVALID_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_LITERAL_NOT_FINISHED">
-<code class="sig-name descname">ERR_LITERAL_NOT_FINISHED</code><em class="property"> = 44</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LITERAL_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_LITERAL_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_LITERAL_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">44</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LITERAL_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_LITERAL_NOT_STARTED">
-<code class="sig-name descname">ERR_LITERAL_NOT_STARTED</code><em class="property"> = 43</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LITERAL_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_LITERAL_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_LITERAL_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">43</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LITERAL_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_LTSLASH_REQUIRED">
-<code class="sig-name descname">ERR_LTSLASH_REQUIRED</code><em class="property"> = 74</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LTSLASH_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_LTSLASH_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_LTSLASH_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">74</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LTSLASH_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_LT_IN_ATTRIBUTE">
-<code class="sig-name descname">ERR_LT_IN_ATTRIBUTE</code><em class="property"> = 38</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LT_IN_ATTRIBUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_LT_IN_ATTRIBUTE">
+<span class="sig-name descname"><span class="pre">ERR_LT_IN_ATTRIBUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">38</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LT_IN_ATTRIBUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_LT_REQUIRED">
-<code class="sig-name descname">ERR_LT_REQUIRED</code><em class="property"> = 72</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LT_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_LT_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_LT_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">72</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_LT_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_MISPLACED_CDATA_END">
-<code class="sig-name descname">ERR_MISPLACED_CDATA_END</code><em class="property"> = 62</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MISPLACED_CDATA_END" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_MISPLACED_CDATA_END">
+<span class="sig-name descname"><span class="pre">ERR_MISPLACED_CDATA_END</span></span><em class="property"> <span class="pre">=</span> <span class="pre">62</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MISPLACED_CDATA_END" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_MISSING_ENCODING">
-<code class="sig-name descname">ERR_MISSING_ENCODING</code><em class="property"> = 101</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MISSING_ENCODING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_MISSING_ENCODING">
+<span class="sig-name descname"><span class="pre">ERR_MISSING_ENCODING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">101</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MISSING_ENCODING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_MIXED_NOT_FINISHED">
-<code class="sig-name descname">ERR_MIXED_NOT_FINISHED</code><em class="property"> = 53</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MIXED_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_MIXED_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_MIXED_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">53</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MIXED_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_MIXED_NOT_STARTED">
-<code class="sig-name descname">ERR_MIXED_NOT_STARTED</code><em class="property"> = 52</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MIXED_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_MIXED_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_MIXED_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">52</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_MIXED_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NAME_REQUIRED">
-<code class="sig-name descname">ERR_NAME_REQUIRED</code><em class="property"> = 68</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NAME_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NAME_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_NAME_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">68</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NAME_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG">
-<code class="sig-name descname">ERR_NAME_TOO_LONG</code><em class="property"> = 110</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG">
+<span class="sig-name descname"><span class="pre">ERR_NAME_TOO_LONG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">110</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED">
-<code class="sig-name descname">ERR_NMTOKEN_REQUIRED</code><em class="property"> = 67</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_NMTOKEN_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">67</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED">
-<code class="sig-name descname">ERR_NOTATION_NOT_FINISHED</code><em class="property"> = 49</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_NOTATION_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">49</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED">
-<code class="sig-name descname">ERR_NOTATION_NOT_STARTED</code><em class="property"> = 48</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_NOTATION_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">48</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING">
-<code class="sig-name descname">ERR_NOTATION_PROCESSING</code><em class="property"> = 105</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING">
+<span class="sig-name descname"><span class="pre">ERR_NOTATION_PROCESSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">105</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NOT_STANDALONE">
-<code class="sig-name descname">ERR_NOT_STANDALONE</code><em class="property"> = 103</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOT_STANDALONE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NOT_STANDALONE">
+<span class="sig-name descname"><span class="pre">ERR_NOT_STANDALONE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">103</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOT_STANDALONE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NOT_WELL_BALANCED">
-<code class="sig-name descname">ERR_NOT_WELL_BALANCED</code><em class="property"> = 85</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOT_WELL_BALANCED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NOT_WELL_BALANCED">
+<span class="sig-name descname"><span class="pre">ERR_NOT_WELL_BALANCED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">85</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NOT_WELL_BALANCED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NO_DTD">
-<code class="sig-name descname">ERR_NO_DTD</code><em class="property"> = 94</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NO_DTD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NO_DTD">
+<span class="sig-name descname"><span class="pre">ERR_NO_DTD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">94</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NO_DTD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NO_MEMORY">
-<code class="sig-name descname">ERR_NO_MEMORY</code><em class="property"> = 2</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NO_MEMORY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NO_MEMORY">
+<span class="sig-name descname"><span class="pre">ERR_NO_MEMORY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NO_MEMORY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_NS_DECL_ERROR">
-<code class="sig-name descname">ERR_NS_DECL_ERROR</code><em class="property"> = 35</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NS_DECL_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_NS_DECL_ERROR">
+<span class="sig-name descname"><span class="pre">ERR_NS_DECL_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">35</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_NS_DECL_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_OK">
-<code class="sig-name descname">ERR_OK</code><em class="property"> = 0</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_OK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_OK">
+<span class="sig-name descname"><span class="pre">ERR_OK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">0</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_OK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PCDATA_REQUIRED">
-<code class="sig-name descname">ERR_PCDATA_REQUIRED</code><em class="property"> = 69</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PCDATA_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PCDATA_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_PCDATA_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">69</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PCDATA_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PEREF_AT_EOF">
-<code class="sig-name descname">ERR_PEREF_AT_EOF</code><em class="property"> = 18</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_AT_EOF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PEREF_AT_EOF">
+<span class="sig-name descname"><span class="pre">ERR_PEREF_AT_EOF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">18</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_AT_EOF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PEREF_IN_EPILOG">
-<code class="sig-name descname">ERR_PEREF_IN_EPILOG</code><em class="property"> = 20</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_IN_EPILOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PEREF_IN_EPILOG">
+<span class="sig-name descname"><span class="pre">ERR_PEREF_IN_EPILOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">20</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_IN_EPILOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PEREF_IN_INT_SUBSET">
-<code class="sig-name descname">ERR_PEREF_IN_INT_SUBSET</code><em class="property"> = 21</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_IN_INT_SUBSET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PEREF_IN_INT_SUBSET">
+<span class="sig-name descname"><span class="pre">ERR_PEREF_IN_INT_SUBSET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">21</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_IN_INT_SUBSET" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PEREF_IN_PROLOG">
-<code class="sig-name descname">ERR_PEREF_IN_PROLOG</code><em class="property"> = 19</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_IN_PROLOG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PEREF_IN_PROLOG">
+<span class="sig-name descname"><span class="pre">ERR_PEREF_IN_PROLOG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">19</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_IN_PROLOG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PEREF_NO_NAME">
-<code class="sig-name descname">ERR_PEREF_NO_NAME</code><em class="property"> = 24</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PEREF_NO_NAME">
+<span class="sig-name descname"><span class="pre">ERR_PEREF_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">24</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PEREF_SEMICOL_MISSING">
-<code class="sig-name descname">ERR_PEREF_SEMICOL_MISSING</code><em class="property"> = 25</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_SEMICOL_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PEREF_SEMICOL_MISSING">
+<span class="sig-name descname"><span class="pre">ERR_PEREF_SEMICOL_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">25</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PEREF_SEMICOL_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PI_NOT_FINISHED">
-<code class="sig-name descname">ERR_PI_NOT_FINISHED</code><em class="property"> = 47</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PI_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PI_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_PI_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">47</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PI_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PI_NOT_STARTED">
-<code class="sig-name descname">ERR_PI_NOT_STARTED</code><em class="property"> = 46</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PI_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PI_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_PI_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">46</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PI_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_PUBID_REQUIRED">
-<code class="sig-name descname">ERR_PUBID_REQUIRED</code><em class="property"> = 71</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PUBID_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_PUBID_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_PUBID_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">71</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_PUBID_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_RESERVED_XML_NAME">
-<code class="sig-name descname">ERR_RESERVED_XML_NAME</code><em class="property"> = 64</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_RESERVED_XML_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_RESERVED_XML_NAME">
+<span class="sig-name descname"><span class="pre">ERR_RESERVED_XML_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">64</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_RESERVED_XML_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_SEPARATOR_REQUIRED">
-<code class="sig-name descname">ERR_SEPARATOR_REQUIRED</code><em class="property"> = 66</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_SEPARATOR_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_SEPARATOR_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_SEPARATOR_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">66</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_SEPARATOR_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_SPACE_REQUIRED">
-<code class="sig-name descname">ERR_SPACE_REQUIRED</code><em class="property"> = 65</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_SPACE_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_SPACE_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_SPACE_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">65</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_SPACE_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_STANDALONE_VALUE">
-<code class="sig-name descname">ERR_STANDALONE_VALUE</code><em class="property"> = 78</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_STANDALONE_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_STANDALONE_VALUE">
+<span class="sig-name descname"><span class="pre">ERR_STANDALONE_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">78</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_STANDALONE_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_STRING_NOT_CLOSED">
-<code class="sig-name descname">ERR_STRING_NOT_CLOSED</code><em class="property"> = 34</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_STRING_NOT_CLOSED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_STRING_NOT_CLOSED">
+<span class="sig-name descname"><span class="pre">ERR_STRING_NOT_CLOSED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">34</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_STRING_NOT_CLOSED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_STRING_NOT_STARTED">
-<code class="sig-name descname">ERR_STRING_NOT_STARTED</code><em class="property"> = 33</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_STRING_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_STRING_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_STRING_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">33</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_STRING_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_TAG_NAME_MISMATCH">
-<code class="sig-name descname">ERR_TAG_NAME_MISMATCH</code><em class="property"> = 76</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_TAG_NAME_MISMATCH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_TAG_NAME_MISMATCH">
+<span class="sig-name descname"><span class="pre">ERR_TAG_NAME_MISMATCH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">76</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_TAG_NAME_MISMATCH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_TAG_NOT_FINISHED">
-<code class="sig-name descname">ERR_TAG_NOT_FINISHED</code><em class="property"> = 77</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_TAG_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_TAG_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_TAG_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">77</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_TAG_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_UNDECLARED_ENTITY">
-<code class="sig-name descname">ERR_UNDECLARED_ENTITY</code><em class="property"> = 26</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNDECLARED_ENTITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_UNDECLARED_ENTITY">
+<span class="sig-name descname"><span class="pre">ERR_UNDECLARED_ENTITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">26</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNDECLARED_ENTITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_UNKNOWN_ENCODING">
-<code class="sig-name descname">ERR_UNKNOWN_ENCODING</code><em class="property"> = 31</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNKNOWN_ENCODING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_UNKNOWN_ENCODING">
+<span class="sig-name descname"><span class="pre">ERR_UNKNOWN_ENCODING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">31</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNKNOWN_ENCODING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_UNKNOWN_VERSION">
-<code class="sig-name descname">ERR_UNKNOWN_VERSION</code><em class="property"> = 108</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNKNOWN_VERSION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_UNKNOWN_VERSION">
+<span class="sig-name descname"><span class="pre">ERR_UNKNOWN_VERSION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">108</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNKNOWN_VERSION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_UNPARSED_ENTITY">
-<code class="sig-name descname">ERR_UNPARSED_ENTITY</code><em class="property"> = 28</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNPARSED_ENTITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_UNPARSED_ENTITY">
+<span class="sig-name descname"><span class="pre">ERR_UNPARSED_ENTITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">28</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNPARSED_ENTITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_UNSUPPORTED_ENCODING">
-<code class="sig-name descname">ERR_UNSUPPORTED_ENCODING</code><em class="property"> = 32</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNSUPPORTED_ENCODING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_UNSUPPORTED_ENCODING">
+<span class="sig-name descname"><span class="pre">ERR_UNSUPPORTED_ENCODING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">32</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_UNSUPPORTED_ENCODING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_URI_FRAGMENT">
-<code class="sig-name descname">ERR_URI_FRAGMENT</code><em class="property"> = 92</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_URI_FRAGMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_URI_FRAGMENT">
+<span class="sig-name descname"><span class="pre">ERR_URI_FRAGMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">92</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_URI_FRAGMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_URI_REQUIRED">
-<code class="sig-name descname">ERR_URI_REQUIRED</code><em class="property"> = 70</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_URI_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_URI_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_URI_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">70</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_URI_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_USER_STOP">
-<code class="sig-name descname">ERR_USER_STOP</code><em class="property"> = 111</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_USER_STOP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_USER_STOP">
+<span class="sig-name descname"><span class="pre">ERR_USER_STOP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">111</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_USER_STOP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_VALUE_REQUIRED">
-<code class="sig-name descname">ERR_VALUE_REQUIRED</code><em class="property"> = 84</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_VALUE_REQUIRED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_VALUE_REQUIRED">
+<span class="sig-name descname"><span class="pre">ERR_VALUE_REQUIRED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">84</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_VALUE_REQUIRED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_VERSION_MISMATCH">
-<code class="sig-name descname">ERR_VERSION_MISMATCH</code><em class="property"> = 109</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_VERSION_MISMATCH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_VERSION_MISMATCH">
+<span class="sig-name descname"><span class="pre">ERR_VERSION_MISMATCH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">109</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_VERSION_MISMATCH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_VERSION_MISSING">
-<code class="sig-name descname">ERR_VERSION_MISSING</code><em class="property"> = 96</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_VERSION_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_VERSION_MISSING">
+<span class="sig-name descname"><span class="pre">ERR_VERSION_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">96</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_VERSION_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_FINISHED">
-<code class="sig-name descname">ERR_XMLDECL_NOT_FINISHED</code><em class="property"> = 57</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_FINISHED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_FINISHED">
+<span class="sig-name descname"><span class="pre">ERR_XMLDECL_NOT_FINISHED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">57</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_FINISHED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_STARTED">
-<code class="sig-name descname">ERR_XMLDECL_NOT_STARTED</code><em class="property"> = 56</em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_STARTED">
+<span class="sig-name descname"><span class="pre">ERR_XMLDECL_NOT_STARTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">56</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_STARTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.FTP_ACCNT">
-<code class="sig-name descname">FTP_ACCNT</code><em class="property"> = 2002</em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_ACCNT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.FTP_ACCNT">
+<span class="sig-name descname"><span class="pre">FTP_ACCNT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2002</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_ACCNT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.FTP_EPSV_ANSWER">
-<code class="sig-name descname">FTP_EPSV_ANSWER</code><em class="property"> = 2001</em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_EPSV_ANSWER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.FTP_EPSV_ANSWER">
+<span class="sig-name descname"><span class="pre">FTP_EPSV_ANSWER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2001</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_EPSV_ANSWER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.FTP_PASV_ANSWER">
-<code class="sig-name descname">FTP_PASV_ANSWER</code><em class="property"> = 2000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_PASV_ANSWER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.FTP_PASV_ANSWER">
+<span class="sig-name descname"><span class="pre">FTP_PASV_ANSWER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_PASV_ANSWER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.FTP_URL_SYNTAX">
-<code class="sig-name descname">FTP_URL_SYNTAX</code><em class="property"> = 2003</em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_URL_SYNTAX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.FTP_URL_SYNTAX">
+<span class="sig-name descname"><span class="pre">FTP_URL_SYNTAX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2003</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.FTP_URL_SYNTAX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.HTML_STRUCURE_ERROR">
-<code class="sig-name descname">HTML_STRUCURE_ERROR</code><em class="property"> = 800</em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTML_STRUCURE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.HTML_STRUCURE_ERROR">
+<span class="sig-name descname"><span class="pre">HTML_STRUCURE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">800</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTML_STRUCURE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.HTML_UNKNOWN_TAG">
-<code class="sig-name descname">HTML_UNKNOWN_TAG</code><em class="property"> = 801</em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTML_UNKNOWN_TAG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.HTML_UNKNOWN_TAG">
+<span class="sig-name descname"><span class="pre">HTML_UNKNOWN_TAG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">801</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTML_UNKNOWN_TAG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.HTTP_UNKNOWN_HOST">
-<code class="sig-name descname">HTTP_UNKNOWN_HOST</code><em class="property"> = 2022</em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTTP_UNKNOWN_HOST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.HTTP_UNKNOWN_HOST">
+<span class="sig-name descname"><span class="pre">HTTP_UNKNOWN_HOST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2022</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTTP_UNKNOWN_HOST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.HTTP_URL_SYNTAX">
-<code class="sig-name descname">HTTP_URL_SYNTAX</code><em class="property"> = 2020</em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTTP_URL_SYNTAX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.HTTP_URL_SYNTAX">
+<span class="sig-name descname"><span class="pre">HTTP_URL_SYNTAX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2020</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTTP_URL_SYNTAX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.HTTP_USE_IP">
-<code class="sig-name descname">HTTP_USE_IP</code><em class="property"> = 2021</em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTTP_USE_IP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.HTTP_USE_IP">
+<span class="sig-name descname"><span class="pre">HTTP_USE_IP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2021</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.HTTP_USE_IP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.I18N_CONV_FAILED">
-<code class="sig-name descname">I18N_CONV_FAILED</code><em class="property"> = 6003</em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_CONV_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.I18N_CONV_FAILED">
+<span class="sig-name descname"><span class="pre">I18N_CONV_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6003</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_CONV_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.I18N_EXCESS_HANDLER">
-<code class="sig-name descname">I18N_EXCESS_HANDLER</code><em class="property"> = 6002</em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_EXCESS_HANDLER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.I18N_EXCESS_HANDLER">
+<span class="sig-name descname"><span class="pre">I18N_EXCESS_HANDLER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6002</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_EXCESS_HANDLER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.I18N_NO_HANDLER">
-<code class="sig-name descname">I18N_NO_HANDLER</code><em class="property"> = 6001</em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_NO_HANDLER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.I18N_NO_HANDLER">
+<span class="sig-name descname"><span class="pre">I18N_NO_HANDLER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6001</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_NO_HANDLER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.I18N_NO_NAME">
-<code class="sig-name descname">I18N_NO_NAME</code><em class="property"> = 6000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.I18N_NO_NAME">
+<span class="sig-name descname"><span class="pre">I18N_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.I18N_NO_OUTPUT">
-<code class="sig-name descname">I18N_NO_OUTPUT</code><em class="property"> = 6004</em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_NO_OUTPUT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.I18N_NO_OUTPUT">
+<span class="sig-name descname"><span class="pre">I18N_NO_OUTPUT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6004</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.I18N_NO_OUTPUT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_BUFFER_FULL">
-<code class="sig-name descname">IO_BUFFER_FULL</code><em class="property"> = 1548</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_BUFFER_FULL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_BUFFER_FULL">
+<span class="sig-name descname"><span class="pre">IO_BUFFER_FULL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1548</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_BUFFER_FULL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EACCES">
-<code class="sig-name descname">IO_EACCES</code><em class="property"> = 1501</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EACCES" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EACCES">
+<span class="sig-name descname"><span class="pre">IO_EACCES</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1501</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EACCES" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EADDRINUSE">
-<code class="sig-name descname">IO_EADDRINUSE</code><em class="property"> = 1554</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EADDRINUSE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EADDRINUSE">
+<span class="sig-name descname"><span class="pre">IO_EADDRINUSE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1554</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EADDRINUSE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EAFNOSUPPORT">
-<code class="sig-name descname">IO_EAFNOSUPPORT</code><em class="property"> = 1556</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EAFNOSUPPORT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EAFNOSUPPORT">
+<span class="sig-name descname"><span class="pre">IO_EAFNOSUPPORT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1556</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EAFNOSUPPORT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EAGAIN">
-<code class="sig-name descname">IO_EAGAIN</code><em class="property"> = 1502</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EAGAIN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EAGAIN">
+<span class="sig-name descname"><span class="pre">IO_EAGAIN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1502</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EAGAIN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EALREADY">
-<code class="sig-name descname">IO_EALREADY</code><em class="property"> = 1555</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EALREADY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EALREADY">
+<span class="sig-name descname"><span class="pre">IO_EALREADY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1555</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EALREADY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EBADF">
-<code class="sig-name descname">IO_EBADF</code><em class="property"> = 1503</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EBADF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EBADF">
+<span class="sig-name descname"><span class="pre">IO_EBADF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1503</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EBADF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EBADMSG">
-<code class="sig-name descname">IO_EBADMSG</code><em class="property"> = 1504</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EBADMSG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EBADMSG">
+<span class="sig-name descname"><span class="pre">IO_EBADMSG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1504</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EBADMSG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EBUSY">
-<code class="sig-name descname">IO_EBUSY</code><em class="property"> = 1505</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EBUSY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EBUSY">
+<span class="sig-name descname"><span class="pre">IO_EBUSY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1505</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EBUSY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ECANCELED">
-<code class="sig-name descname">IO_ECANCELED</code><em class="property"> = 1506</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ECANCELED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ECANCELED">
+<span class="sig-name descname"><span class="pre">IO_ECANCELED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1506</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ECANCELED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ECHILD">
-<code class="sig-name descname">IO_ECHILD</code><em class="property"> = 1507</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ECHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ECHILD">
+<span class="sig-name descname"><span class="pre">IO_ECHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1507</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ECHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ECONNREFUSED">
-<code class="sig-name descname">IO_ECONNREFUSED</code><em class="property"> = 1552</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ECONNREFUSED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ECONNREFUSED">
+<span class="sig-name descname"><span class="pre">IO_ECONNREFUSED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1552</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ECONNREFUSED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EDEADLK">
-<code class="sig-name descname">IO_EDEADLK</code><em class="property"> = 1508</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EDEADLK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EDEADLK">
+<span class="sig-name descname"><span class="pre">IO_EDEADLK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1508</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EDEADLK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EDOM">
-<code class="sig-name descname">IO_EDOM</code><em class="property"> = 1509</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EDOM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EDOM">
+<span class="sig-name descname"><span class="pre">IO_EDOM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1509</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EDOM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EEXIST">
-<code class="sig-name descname">IO_EEXIST</code><em class="property"> = 1510</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EEXIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EEXIST">
+<span class="sig-name descname"><span class="pre">IO_EEXIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1510</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EEXIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EFAULT">
-<code class="sig-name descname">IO_EFAULT</code><em class="property"> = 1511</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EFAULT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EFAULT">
+<span class="sig-name descname"><span class="pre">IO_EFAULT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1511</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EFAULT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EFBIG">
-<code class="sig-name descname">IO_EFBIG</code><em class="property"> = 1512</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EFBIG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EFBIG">
+<span class="sig-name descname"><span class="pre">IO_EFBIG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1512</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EFBIG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EINPROGRESS">
-<code class="sig-name descname">IO_EINPROGRESS</code><em class="property"> = 1513</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EINPROGRESS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EINPROGRESS">
+<span class="sig-name descname"><span class="pre">IO_EINPROGRESS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1513</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EINPROGRESS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EINTR">
-<code class="sig-name descname">IO_EINTR</code><em class="property"> = 1514</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EINTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EINTR">
+<span class="sig-name descname"><span class="pre">IO_EINTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1514</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EINTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EINVAL">
-<code class="sig-name descname">IO_EINVAL</code><em class="property"> = 1515</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EINVAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EINVAL">
+<span class="sig-name descname"><span class="pre">IO_EINVAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1515</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EINVAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EIO">
-<code class="sig-name descname">IO_EIO</code><em class="property"> = 1516</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EIO" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EIO">
+<span class="sig-name descname"><span class="pre">IO_EIO</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1516</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EIO" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EISCONN">
-<code class="sig-name descname">IO_EISCONN</code><em class="property"> = 1551</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EISCONN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EISCONN">
+<span class="sig-name descname"><span class="pre">IO_EISCONN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1551</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EISCONN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EISDIR">
-<code class="sig-name descname">IO_EISDIR</code><em class="property"> = 1517</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EISDIR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EISDIR">
+<span class="sig-name descname"><span class="pre">IO_EISDIR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1517</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EISDIR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EMFILE">
-<code class="sig-name descname">IO_EMFILE</code><em class="property"> = 1518</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EMFILE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EMFILE">
+<span class="sig-name descname"><span class="pre">IO_EMFILE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1518</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EMFILE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EMLINK">
-<code class="sig-name descname">IO_EMLINK</code><em class="property"> = 1519</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EMLINK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EMLINK">
+<span class="sig-name descname"><span class="pre">IO_EMLINK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1519</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EMLINK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EMSGSIZE">
-<code class="sig-name descname">IO_EMSGSIZE</code><em class="property"> = 1520</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EMSGSIZE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EMSGSIZE">
+<span class="sig-name descname"><span class="pre">IO_EMSGSIZE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1520</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EMSGSIZE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENAMETOOLONG">
-<code class="sig-name descname">IO_ENAMETOOLONG</code><em class="property"> = 1521</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENAMETOOLONG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENAMETOOLONG">
+<span class="sig-name descname"><span class="pre">IO_ENAMETOOLONG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1521</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENAMETOOLONG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENCODER">
-<code class="sig-name descname">IO_ENCODER</code><em class="property"> = 1544</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENCODER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENCODER">
+<span class="sig-name descname"><span class="pre">IO_ENCODER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1544</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENCODER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENETUNREACH">
-<code class="sig-name descname">IO_ENETUNREACH</code><em class="property"> = 1553</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENETUNREACH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENETUNREACH">
+<span class="sig-name descname"><span class="pre">IO_ENETUNREACH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1553</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENETUNREACH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENFILE">
-<code class="sig-name descname">IO_ENFILE</code><em class="property"> = 1522</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENFILE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENFILE">
+<span class="sig-name descname"><span class="pre">IO_ENFILE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1522</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENFILE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENODEV">
-<code class="sig-name descname">IO_ENODEV</code><em class="property"> = 1523</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENODEV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENODEV">
+<span class="sig-name descname"><span class="pre">IO_ENODEV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1523</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENODEV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOENT">
-<code class="sig-name descname">IO_ENOENT</code><em class="property"> = 1524</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOENT">
+<span class="sig-name descname"><span class="pre">IO_ENOENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1524</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOEXEC">
-<code class="sig-name descname">IO_ENOEXEC</code><em class="property"> = 1525</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOEXEC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOEXEC">
+<span class="sig-name descname"><span class="pre">IO_ENOEXEC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1525</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOEXEC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOLCK">
-<code class="sig-name descname">IO_ENOLCK</code><em class="property"> = 1526</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOLCK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOLCK">
+<span class="sig-name descname"><span class="pre">IO_ENOLCK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1526</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOLCK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOMEM">
-<code class="sig-name descname">IO_ENOMEM</code><em class="property"> = 1527</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOMEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOMEM">
+<span class="sig-name descname"><span class="pre">IO_ENOMEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1527</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOMEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOSPC">
-<code class="sig-name descname">IO_ENOSPC</code><em class="property"> = 1528</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOSPC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOSPC">
+<span class="sig-name descname"><span class="pre">IO_ENOSPC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1528</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOSPC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOSYS">
-<code class="sig-name descname">IO_ENOSYS</code><em class="property"> = 1529</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOSYS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOSYS">
+<span class="sig-name descname"><span class="pre">IO_ENOSYS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1529</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOSYS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOTDIR">
-<code class="sig-name descname">IO_ENOTDIR</code><em class="property"> = 1530</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTDIR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOTDIR">
+<span class="sig-name descname"><span class="pre">IO_ENOTDIR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1530</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTDIR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOTEMPTY">
-<code class="sig-name descname">IO_ENOTEMPTY</code><em class="property"> = 1531</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTEMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOTEMPTY">
+<span class="sig-name descname"><span class="pre">IO_ENOTEMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1531</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTEMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOTSOCK">
-<code class="sig-name descname">IO_ENOTSOCK</code><em class="property"> = 1550</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTSOCK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOTSOCK">
+<span class="sig-name descname"><span class="pre">IO_ENOTSOCK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1550</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTSOCK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOTSUP">
-<code class="sig-name descname">IO_ENOTSUP</code><em class="property"> = 1532</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTSUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOTSUP">
+<span class="sig-name descname"><span class="pre">IO_ENOTSUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1532</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTSUP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENOTTY">
-<code class="sig-name descname">IO_ENOTTY</code><em class="property"> = 1533</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENOTTY">
+<span class="sig-name descname"><span class="pre">IO_ENOTTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1533</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENOTTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ENXIO">
-<code class="sig-name descname">IO_ENXIO</code><em class="property"> = 1534</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENXIO" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ENXIO">
+<span class="sig-name descname"><span class="pre">IO_ENXIO</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1534</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ENXIO" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EPERM">
-<code class="sig-name descname">IO_EPERM</code><em class="property"> = 1535</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EPERM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EPERM">
+<span class="sig-name descname"><span class="pre">IO_EPERM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1535</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EPERM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EPIPE">
-<code class="sig-name descname">IO_EPIPE</code><em class="property"> = 1536</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EPIPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EPIPE">
+<span class="sig-name descname"><span class="pre">IO_EPIPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1536</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EPIPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ERANGE">
-<code class="sig-name descname">IO_ERANGE</code><em class="property"> = 1537</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ERANGE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ERANGE">
+<span class="sig-name descname"><span class="pre">IO_ERANGE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1537</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ERANGE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EROFS">
-<code class="sig-name descname">IO_EROFS</code><em class="property"> = 1538</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EROFS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EROFS">
+<span class="sig-name descname"><span class="pre">IO_EROFS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1538</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EROFS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ESPIPE">
-<code class="sig-name descname">IO_ESPIPE</code><em class="property"> = 1539</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ESPIPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ESPIPE">
+<span class="sig-name descname"><span class="pre">IO_ESPIPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1539</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ESPIPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ESRCH">
-<code class="sig-name descname">IO_ESRCH</code><em class="property"> = 1540</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ESRCH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ESRCH">
+<span class="sig-name descname"><span class="pre">IO_ESRCH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1540</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ESRCH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_ETIMEDOUT">
-<code class="sig-name descname">IO_ETIMEDOUT</code><em class="property"> = 1541</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ETIMEDOUT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_ETIMEDOUT">
+<span class="sig-name descname"><span class="pre">IO_ETIMEDOUT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1541</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_ETIMEDOUT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_EXDEV">
-<code class="sig-name descname">IO_EXDEV</code><em class="property"> = 1542</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EXDEV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_EXDEV">
+<span class="sig-name descname"><span class="pre">IO_EXDEV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1542</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_EXDEV" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_FLUSH">
-<code class="sig-name descname">IO_FLUSH</code><em class="property"> = 1545</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_FLUSH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_FLUSH">
+<span class="sig-name descname"><span class="pre">IO_FLUSH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1545</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_FLUSH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_LOAD_ERROR">
-<code class="sig-name descname">IO_LOAD_ERROR</code><em class="property"> = 1549</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_LOAD_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_LOAD_ERROR">
+<span class="sig-name descname"><span class="pre">IO_LOAD_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1549</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_LOAD_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_NETWORK_ATTEMPT">
-<code class="sig-name descname">IO_NETWORK_ATTEMPT</code><em class="property"> = 1543</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_NETWORK_ATTEMPT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_NETWORK_ATTEMPT">
+<span class="sig-name descname"><span class="pre">IO_NETWORK_ATTEMPT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1543</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_NETWORK_ATTEMPT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_NO_INPUT">
-<code class="sig-name descname">IO_NO_INPUT</code><em class="property"> = 1547</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_NO_INPUT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_NO_INPUT">
+<span class="sig-name descname"><span class="pre">IO_NO_INPUT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1547</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_NO_INPUT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_UNKNOWN">
-<code class="sig-name descname">IO_UNKNOWN</code><em class="property"> = 1500</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_UNKNOWN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_UNKNOWN">
+<span class="sig-name descname"><span class="pre">IO_UNKNOWN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1500</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_UNKNOWN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.IO_WRITE">
-<code class="sig-name descname">IO_WRITE</code><em class="property"> = 1546</em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_WRITE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.IO_WRITE">
+<span class="sig-name descname"><span class="pre">IO_WRITE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1546</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.IO_WRITE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.MODULE_CLOSE">
-<code class="sig-name descname">MODULE_CLOSE</code><em class="property"> = 4901</em><a class="headerlink" href="#lxml.etree.ErrorTypes.MODULE_CLOSE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.MODULE_CLOSE">
+<span class="sig-name descname"><span class="pre">MODULE_CLOSE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4901</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.MODULE_CLOSE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.MODULE_OPEN">
-<code class="sig-name descname">MODULE_OPEN</code><em class="property"> = 4900</em><a class="headerlink" href="#lxml.etree.ErrorTypes.MODULE_OPEN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.MODULE_OPEN">
+<span class="sig-name descname"><span class="pre">MODULE_OPEN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4900</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.MODULE_OPEN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED">
-<code class="sig-name descname">NS_ERR_ATTRIBUTE_REDEFINED</code><em class="property"> = 203</em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED">
+<span class="sig-name descname"><span class="pre">NS_ERR_ATTRIBUTE_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">203</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.NS_ERR_COLON">
-<code class="sig-name descname">NS_ERR_COLON</code><em class="property"> = 205</em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_COLON" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.NS_ERR_COLON">
+<span class="sig-name descname"><span class="pre">NS_ERR_COLON</span></span><em class="property"> <span class="pre">=</span> <span class="pre">205</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_COLON" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.NS_ERR_EMPTY">
-<code class="sig-name descname">NS_ERR_EMPTY</code><em class="property"> = 204</em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.NS_ERR_EMPTY">
+<span class="sig-name descname"><span class="pre">NS_ERR_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">204</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.NS_ERR_QNAME">
-<code class="sig-name descname">NS_ERR_QNAME</code><em class="property"> = 202</em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_QNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.NS_ERR_QNAME">
+<span class="sig-name descname"><span class="pre">NS_ERR_QNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">202</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_QNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE">
-<code class="sig-name descname">NS_ERR_UNDEFINED_NAMESPACE</code><em class="property"> = 201</em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE">
+<span class="sig-name descname"><span class="pre">NS_ERR_UNDEFINED_NAMESPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">201</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.NS_ERR_XML_NAMESPACE">
-<code class="sig-name descname">NS_ERR_XML_NAMESPACE</code><em class="property"> = 200</em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_XML_NAMESPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.NS_ERR_XML_NAMESPACE">
+<span class="sig-name descname"><span class="pre">NS_ERR_XML_NAMESPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">200</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.NS_ERR_XML_NAMESPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.REGEXP_COMPILE_ERROR">
-<code class="sig-name descname">REGEXP_COMPILE_ERROR</code><em class="property"> = 1450</em><a class="headerlink" href="#lxml.etree.ErrorTypes.REGEXP_COMPILE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.REGEXP_COMPILE_ERROR">
+<span class="sig-name descname"><span class="pre">REGEXP_COMPILE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1450</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.REGEXP_COMPILE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR">
-<code class="sig-name descname">RNGP_ANYNAME_ATTR_ANCESTOR</code><em class="property"> = 1000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR">
+<span class="sig-name descname"><span class="pre">RNGP_ANYNAME_ATTR_ANCESTOR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CHILDREN">
-<code class="sig-name descname">RNGP_ATTRIBUTE_CHILDREN</code><em class="property"> = 1002</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CHILDREN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CHILDREN">
+<span class="sig-name descname"><span class="pre">RNGP_ATTRIBUTE_CHILDREN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1002</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CHILDREN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CONTENT">
-<code class="sig-name descname">RNGP_ATTRIBUTE_CONTENT</code><em class="property"> = 1003</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_ATTRIBUTE_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1003</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_EMPTY">
-<code class="sig-name descname">RNGP_ATTRIBUTE_EMPTY</code><em class="property"> = 1004</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_ATTRIBUTE_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1004</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_NOOP">
-<code class="sig-name descname">RNGP_ATTRIBUTE_NOOP</code><em class="property"> = 1005</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_NOOP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_NOOP">
+<span class="sig-name descname"><span class="pre">RNGP_ATTRIBUTE_NOOP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1005</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_NOOP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ATTR_CONFLICT">
-<code class="sig-name descname">RNGP_ATTR_CONFLICT</code><em class="property"> = 1001</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTR_CONFLICT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ATTR_CONFLICT">
+<span class="sig-name descname"><span class="pre">RNGP_ATTR_CONFLICT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1001</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ATTR_CONFLICT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_CHOICE_CONTENT">
-<code class="sig-name descname">RNGP_CHOICE_CONTENT</code><em class="property"> = 1006</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_CHOICE_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_CHOICE_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_CHOICE_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1006</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_CHOICE_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_CHOICE_EMPTY">
-<code class="sig-name descname">RNGP_CHOICE_EMPTY</code><em class="property"> = 1007</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_CHOICE_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_CHOICE_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_CHOICE_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1007</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_CHOICE_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_CREATE_FAILURE">
-<code class="sig-name descname">RNGP_CREATE_FAILURE</code><em class="property"> = 1008</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_CREATE_FAILURE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_CREATE_FAILURE">
+<span class="sig-name descname"><span class="pre">RNGP_CREATE_FAILURE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1008</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_CREATE_FAILURE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_DATA_CONTENT">
-<code class="sig-name descname">RNGP_DATA_CONTENT</code><em class="property"> = 1009</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DATA_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_DATA_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_DATA_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1009</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DATA_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_DEFINE_CREATE_FAILED">
-<code class="sig-name descname">RNGP_DEFINE_CREATE_FAILED</code><em class="property"> = 1011</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_CREATE_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_DEFINE_CREATE_FAILED">
+<span class="sig-name descname"><span class="pre">RNGP_DEFINE_CREATE_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1011</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_CREATE_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_DEFINE_EMPTY">
-<code class="sig-name descname">RNGP_DEFINE_EMPTY</code><em class="property"> = 1012</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_DEFINE_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_DEFINE_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1012</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_DEFINE_MISSING">
-<code class="sig-name descname">RNGP_DEFINE_MISSING</code><em class="property"> = 1013</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_DEFINE_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_DEFINE_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1013</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_DEFINE_NAME_MISSING">
-<code class="sig-name descname">RNGP_DEFINE_NAME_MISSING</code><em class="property"> = 1014</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_NAME_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_DEFINE_NAME_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_DEFINE_NAME_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1014</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEFINE_NAME_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE">
-<code class="sig-name descname">RNGP_DEF_CHOICE_AND_INTERLEAVE</code><em class="property"> = 1010</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE">
+<span class="sig-name descname"><span class="pre">RNGP_DEF_CHOICE_AND_INTERLEAVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1010</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEMENT_CONTENT">
-<code class="sig-name descname">RNGP_ELEMENT_CONTENT</code><em class="property"> = 1018</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEMENT_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_ELEMENT_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1018</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEMENT_EMPTY">
-<code class="sig-name descname">RNGP_ELEMENT_EMPTY</code><em class="property"> = 1017</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEMENT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_ELEMENT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1017</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEMENT_NAME">
-<code class="sig-name descname">RNGP_ELEMENT_NAME</code><em class="property"> = 1019</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEMENT_NAME">
+<span class="sig-name descname"><span class="pre">RNGP_ELEMENT_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1019</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEMENT_NO_CONTENT">
-<code class="sig-name descname">RNGP_ELEMENT_NO_CONTENT</code><em class="property"> = 1020</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_NO_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEMENT_NO_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_ELEMENT_NO_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1020</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEMENT_NO_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_EMPTY">
-<code class="sig-name descname">RNGP_ELEM_CONTENT_EMPTY</code><em class="property"> = 1015</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_ELEM_CONTENT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1015</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_ERROR">
-<code class="sig-name descname">RNGP_ELEM_CONTENT_ERROR</code><em class="property"> = 1016</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_ERROR">
+<span class="sig-name descname"><span class="pre">RNGP_ELEM_CONTENT_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1016</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ELEM_TEXT_CONFLICT">
-<code class="sig-name descname">RNGP_ELEM_TEXT_CONFLICT</code><em class="property"> = 1021</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEM_TEXT_CONFLICT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ELEM_TEXT_CONFLICT">
+<span class="sig-name descname"><span class="pre">RNGP_ELEM_TEXT_CONFLICT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1021</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ELEM_TEXT_CONFLICT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EMPTY">
-<code class="sig-name descname">RNGP_EMPTY</code><em class="property"> = 1022</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1022</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EMPTY_CONSTRUCT">
-<code class="sig-name descname">RNGP_EMPTY_CONSTRUCT</code><em class="property"> = 1023</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY_CONSTRUCT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EMPTY_CONSTRUCT">
+<span class="sig-name descname"><span class="pre">RNGP_EMPTY_CONSTRUCT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1023</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY_CONSTRUCT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EMPTY_CONTENT">
-<code class="sig-name descname">RNGP_EMPTY_CONTENT</code><em class="property"> = 1024</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EMPTY_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_EMPTY_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1024</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EMPTY_NOT_EMPTY">
-<code class="sig-name descname">RNGP_EMPTY_NOT_EMPTY</code><em class="property"> = 1025</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY_NOT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EMPTY_NOT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_EMPTY_NOT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1025</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EMPTY_NOT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_ERROR_TYPE_LIB">
-<code class="sig-name descname">RNGP_ERROR_TYPE_LIB</code><em class="property"> = 1026</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ERROR_TYPE_LIB" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_ERROR_TYPE_LIB">
+<span class="sig-name descname"><span class="pre">RNGP_ERROR_TYPE_LIB</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1026</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_ERROR_TYPE_LIB" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXCEPT_EMPTY">
-<code class="sig-name descname">RNGP_EXCEPT_EMPTY</code><em class="property"> = 1027</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXCEPT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_EXCEPT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1027</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXCEPT_MISSING">
-<code class="sig-name descname">RNGP_EXCEPT_MISSING</code><em class="property"> = 1028</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXCEPT_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_EXCEPT_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1028</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXCEPT_MULTIPLE">
-<code class="sig-name descname">RNGP_EXCEPT_MULTIPLE</code><em class="property"> = 1029</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_MULTIPLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXCEPT_MULTIPLE">
+<span class="sig-name descname"><span class="pre">RNGP_EXCEPT_MULTIPLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1029</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_MULTIPLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXCEPT_NO_CONTENT">
-<code class="sig-name descname">RNGP_EXCEPT_NO_CONTENT</code><em class="property"> = 1030</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_NO_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXCEPT_NO_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_EXCEPT_NO_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1030</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXCEPT_NO_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXTERNALREF_EMTPY">
-<code class="sig-name descname">RNGP_EXTERNALREF_EMTPY</code><em class="property"> = 1031</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXTERNALREF_EMTPY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXTERNALREF_EMTPY">
+<span class="sig-name descname"><span class="pre">RNGP_EXTERNALREF_EMTPY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1031</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXTERNALREF_EMTPY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXTERNALREF_RECURSE">
-<code class="sig-name descname">RNGP_EXTERNALREF_RECURSE</code><em class="property"> = 1033</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXTERNALREF_RECURSE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXTERNALREF_RECURSE">
+<span class="sig-name descname"><span class="pre">RNGP_EXTERNALREF_RECURSE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1033</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXTERNALREF_RECURSE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_EXTERNAL_REF_FAILURE">
-<code class="sig-name descname">RNGP_EXTERNAL_REF_FAILURE</code><em class="property"> = 1032</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXTERNAL_REF_FAILURE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_EXTERNAL_REF_FAILURE">
+<span class="sig-name descname"><span class="pre">RNGP_EXTERNAL_REF_FAILURE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1032</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_EXTERNAL_REF_FAILURE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE">
-<code class="sig-name descname">RNGP_FORBIDDEN_ATTRIBUTE</code><em class="property"> = 1034</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE">
+<span class="sig-name descname"><span class="pre">RNGP_FORBIDDEN_ATTRIBUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1034</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_FOREIGN_ELEMENT">
-<code class="sig-name descname">RNGP_FOREIGN_ELEMENT</code><em class="property"> = 1035</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_FOREIGN_ELEMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_FOREIGN_ELEMENT">
+<span class="sig-name descname"><span class="pre">RNGP_FOREIGN_ELEMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1035</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_FOREIGN_ELEMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_CONTENT">
-<code class="sig-name descname">RNGP_GRAMMAR_CONTENT</code><em class="property"> = 1036</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_GRAMMAR_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1036</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_EMPTY">
-<code class="sig-name descname">RNGP_GRAMMAR_EMPTY</code><em class="property"> = 1037</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_GRAMMAR_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1037</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_MISSING">
-<code class="sig-name descname">RNGP_GRAMMAR_MISSING</code><em class="property"> = 1038</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_GRAMMAR_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1038</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_NO_START">
-<code class="sig-name descname">RNGP_GRAMMAR_NO_START</code><em class="property"> = 1039</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_NO_START" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_GRAMMAR_NO_START">
+<span class="sig-name descname"><span class="pre">RNGP_GRAMMAR_NO_START</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1039</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GRAMMAR_NO_START" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_GROUP_ATTR_CONFLICT">
-<code class="sig-name descname">RNGP_GROUP_ATTR_CONFLICT</code><em class="property"> = 1040</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GROUP_ATTR_CONFLICT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_GROUP_ATTR_CONFLICT">
+<span class="sig-name descname"><span class="pre">RNGP_GROUP_ATTR_CONFLICT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1040</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_GROUP_ATTR_CONFLICT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_HREF_ERROR">
-<code class="sig-name descname">RNGP_HREF_ERROR</code><em class="property"> = 1041</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_HREF_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_HREF_ERROR">
+<span class="sig-name descname"><span class="pre">RNGP_HREF_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1041</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_HREF_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INCLUDE_EMPTY">
-<code class="sig-name descname">RNGP_INCLUDE_EMPTY</code><em class="property"> = 1042</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INCLUDE_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INCLUDE_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_INCLUDE_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1042</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INCLUDE_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INCLUDE_FAILURE">
-<code class="sig-name descname">RNGP_INCLUDE_FAILURE</code><em class="property"> = 1043</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INCLUDE_FAILURE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INCLUDE_FAILURE">
+<span class="sig-name descname"><span class="pre">RNGP_INCLUDE_FAILURE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1043</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INCLUDE_FAILURE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INCLUDE_RECURSE">
-<code class="sig-name descname">RNGP_INCLUDE_RECURSE</code><em class="property"> = 1044</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INCLUDE_RECURSE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INCLUDE_RECURSE">
+<span class="sig-name descname"><span class="pre">RNGP_INCLUDE_RECURSE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1044</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INCLUDE_RECURSE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_ADD">
-<code class="sig-name descname">RNGP_INTERLEAVE_ADD</code><em class="property"> = 1045</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_ADD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_ADD">
+<span class="sig-name descname"><span class="pre">RNGP_INTERLEAVE_ADD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1045</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_ADD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED">
-<code class="sig-name descname">RNGP_INTERLEAVE_CREATE_FAILED</code><em class="property"> = 1046</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED">
+<span class="sig-name descname"><span class="pre">RNGP_INTERLEAVE_CREATE_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1046</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_EMPTY">
-<code class="sig-name descname">RNGP_INTERLEAVE_EMPTY</code><em class="property"> = 1047</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_INTERLEAVE_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1047</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT">
-<code class="sig-name descname">RNGP_INTERLEAVE_NO_CONTENT</code><em class="property"> = 1048</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_INTERLEAVE_NO_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1048</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INVALID_DEFINE_NAME">
-<code class="sig-name descname">RNGP_INVALID_DEFINE_NAME</code><em class="property"> = 1049</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INVALID_DEFINE_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INVALID_DEFINE_NAME">
+<span class="sig-name descname"><span class="pre">RNGP_INVALID_DEFINE_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1049</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INVALID_DEFINE_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INVALID_URI">
-<code class="sig-name descname">RNGP_INVALID_URI</code><em class="property"> = 1050</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INVALID_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INVALID_URI">
+<span class="sig-name descname"><span class="pre">RNGP_INVALID_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1050</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INVALID_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_INVALID_VALUE">
-<code class="sig-name descname">RNGP_INVALID_VALUE</code><em class="property"> = 1051</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INVALID_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_INVALID_VALUE">
+<span class="sig-name descname"><span class="pre">RNGP_INVALID_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1051</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_INVALID_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_MISSING_HREF">
-<code class="sig-name descname">RNGP_MISSING_HREF</code><em class="property"> = 1052</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_MISSING_HREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_MISSING_HREF">
+<span class="sig-name descname"><span class="pre">RNGP_MISSING_HREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1052</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_MISSING_HREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_NAME_MISSING">
-<code class="sig-name descname">RNGP_NAME_MISSING</code><em class="property"> = 1053</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NAME_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_NAME_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_NAME_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1053</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NAME_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_NEED_COMBINE">
-<code class="sig-name descname">RNGP_NEED_COMBINE</code><em class="property"> = 1054</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NEED_COMBINE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_NEED_COMBINE">
+<span class="sig-name descname"><span class="pre">RNGP_NEED_COMBINE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1054</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NEED_COMBINE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY">
-<code class="sig-name descname">RNGP_NOTALLOWED_NOT_EMPTY</code><em class="property"> = 1055</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_NOTALLOWED_NOT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1055</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR">
-<code class="sig-name descname">RNGP_NSNAME_ATTR_ANCESTOR</code><em class="property"> = 1056</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR">
+<span class="sig-name descname"><span class="pre">RNGP_NSNAME_ATTR_ANCESTOR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1056</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_NSNAME_NO_NS">
-<code class="sig-name descname">RNGP_NSNAME_NO_NS</code><em class="property"> = 1057</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NSNAME_NO_NS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_NSNAME_NO_NS">
+<span class="sig-name descname"><span class="pre">RNGP_NSNAME_NO_NS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1057</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_NSNAME_NO_NS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARAM_FORBIDDEN">
-<code class="sig-name descname">RNGP_PARAM_FORBIDDEN</code><em class="property"> = 1058</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARAM_FORBIDDEN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARAM_FORBIDDEN">
+<span class="sig-name descname"><span class="pre">RNGP_PARAM_FORBIDDEN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1058</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARAM_FORBIDDEN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARAM_NAME_MISSING">
-<code class="sig-name descname">RNGP_PARAM_NAME_MISSING</code><em class="property"> = 1059</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARAM_NAME_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARAM_NAME_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_PARAM_NAME_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1059</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARAM_NAME_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARENTREF_CREATE_FAILED">
-<code class="sig-name descname">RNGP_PARENTREF_CREATE_FAILED</code><em class="property"> = 1060</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_CREATE_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARENTREF_CREATE_FAILED">
+<span class="sig-name descname"><span class="pre">RNGP_PARENTREF_CREATE_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1060</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_CREATE_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NAME_INVALID">
-<code class="sig-name descname">RNGP_PARENTREF_NAME_INVALID</code><em class="property"> = 1061</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NAME_INVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NAME_INVALID">
+<span class="sig-name descname"><span class="pre">RNGP_PARENTREF_NAME_INVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1061</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NAME_INVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NOT_EMPTY">
-<code class="sig-name descname">RNGP_PARENTREF_NOT_EMPTY</code><em class="property"> = 1064</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NOT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NOT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_PARENTREF_NOT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1064</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NOT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_NAME">
-<code class="sig-name descname">RNGP_PARENTREF_NO_NAME</code><em class="property"> = 1062</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_NAME">
+<span class="sig-name descname"><span class="pre">RNGP_PARENTREF_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1062</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_PARENT">
-<code class="sig-name descname">RNGP_PARENTREF_NO_PARENT</code><em class="property"> = 1063</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_PARENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_PARENT">
+<span class="sig-name descname"><span class="pre">RNGP_PARENTREF_NO_PARENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1063</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_PARENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PARSE_ERROR">
-<code class="sig-name descname">RNGP_PARSE_ERROR</code><em class="property"> = 1065</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARSE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PARSE_ERROR">
+<span class="sig-name descname"><span class="pre">RNGP_PARSE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1065</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PARSE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME">
-<code class="sig-name descname">RNGP_PAT_ANYNAME_EXCEPT_ANYNAME</code><em class="property"> = 1066</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_ANYNAME_EXCEPT_ANYNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1066</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ATTR">
-<code class="sig-name descname">RNGP_PAT_ATTR_ATTR</code><em class="property"> = 1067</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ATTR">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_ATTR_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1067</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ELEM">
-<code class="sig-name descname">RNGP_PAT_ATTR_ELEM</code><em class="property"> = 1068</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ELEM">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_ATTR_ELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1068</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_ATTR</code><em class="property"> = 1069</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1069</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_ELEM</code><em class="property"> = 1070</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_ELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1070</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_EMPTY</code><em class="property"> = 1071</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1071</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_GROUP</code><em class="property"> = 1072</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_GROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1072</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_INTERLEAVE</code><em class="property"> = 1073</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_INTERLEAVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1073</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_LIST</code><em class="property"> = 1074</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_LIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1074</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_ONEMORE</code><em class="property"> = 1075</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_ONEMORE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1075</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_REF</code><em class="property"> = 1076</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_REF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1076</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT">
-<code class="sig-name descname">RNGP_PAT_DATA_EXCEPT_TEXT</code><em class="property"> = 1077</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_DATA_EXCEPT_TEXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1077</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_ATTR">
-<code class="sig-name descname">RNGP_PAT_LIST_ATTR</code><em class="property"> = 1078</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_ATTR">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_LIST_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1078</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_ELEM">
-<code class="sig-name descname">RNGP_PAT_LIST_ELEM</code><em class="property"> = 1079</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_ELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_ELEM">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_LIST_ELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1079</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_ELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_INTERLEAVE">
-<code class="sig-name descname">RNGP_PAT_LIST_INTERLEAVE</code><em class="property"> = 1080</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_INTERLEAVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_INTERLEAVE">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_LIST_INTERLEAVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1080</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_INTERLEAVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_LIST">
-<code class="sig-name descname">RNGP_PAT_LIST_LIST</code><em class="property"> = 1081</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_LIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_LIST">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_LIST_LIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1081</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_LIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_REF">
-<code class="sig-name descname">RNGP_PAT_LIST_REF</code><em class="property"> = 1082</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_REF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_REF">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_LIST_REF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1082</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_REF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_TEXT">
-<code class="sig-name descname">RNGP_PAT_LIST_TEXT</code><em class="property"> = 1083</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_TEXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_LIST_TEXT">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_LIST_TEXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1083</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_LIST_TEXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME">
-<code class="sig-name descname">RNGP_PAT_NSNAME_EXCEPT_ANYNAME</code><em class="property"> = 1084</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_NSNAME_EXCEPT_ANYNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1084</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME">
-<code class="sig-name descname">RNGP_PAT_NSNAME_EXCEPT_NSNAME</code><em class="property"> = 1085</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_NSNAME_EXCEPT_NSNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1085</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR">
-<code class="sig-name descname">RNGP_PAT_ONEMORE_GROUP_ATTR</code><em class="property"> = 1086</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_ONEMORE_GROUP_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1086</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR">
-<code class="sig-name descname">RNGP_PAT_ONEMORE_INTERLEAVE_ATTR</code><em class="property"> = 1087</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_ONEMORE_INTERLEAVE_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1087</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_ATTR">
-<code class="sig-name descname">RNGP_PAT_START_ATTR</code><em class="property"> = 1088</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_ATTR">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1088</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_DATA">
-<code class="sig-name descname">RNGP_PAT_START_DATA</code><em class="property"> = 1089</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_DATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_DATA">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_DATA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1089</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_DATA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_EMPTY">
-<code class="sig-name descname">RNGP_PAT_START_EMPTY</code><em class="property"> = 1090</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1090</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_GROUP">
-<code class="sig-name descname">RNGP_PAT_START_GROUP</code><em class="property"> = 1091</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_GROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_GROUP">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_GROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1091</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_GROUP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_INTERLEAVE">
-<code class="sig-name descname">RNGP_PAT_START_INTERLEAVE</code><em class="property"> = 1092</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_INTERLEAVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_INTERLEAVE">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_INTERLEAVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1092</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_INTERLEAVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_LIST">
-<code class="sig-name descname">RNGP_PAT_START_LIST</code><em class="property"> = 1093</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_LIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_LIST">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_LIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1093</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_LIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_ONEMORE">
-<code class="sig-name descname">RNGP_PAT_START_ONEMORE</code><em class="property"> = 1094</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_ONEMORE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_ONEMORE">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_ONEMORE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1094</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_ONEMORE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_TEXT">
-<code class="sig-name descname">RNGP_PAT_START_TEXT</code><em class="property"> = 1095</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_TEXT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_TEXT">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_TEXT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1095</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_TEXT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PAT_START_VALUE">
-<code class="sig-name descname">RNGP_PAT_START_VALUE</code><em class="property"> = 1096</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PAT_START_VALUE">
+<span class="sig-name descname"><span class="pre">RNGP_PAT_START_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1096</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PAT_START_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_PREFIX_UNDEFINED">
-<code class="sig-name descname">RNGP_PREFIX_UNDEFINED</code><em class="property"> = 1097</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PREFIX_UNDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_PREFIX_UNDEFINED">
+<span class="sig-name descname"><span class="pre">RNGP_PREFIX_UNDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1097</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_PREFIX_UNDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_REF_CREATE_FAILED">
-<code class="sig-name descname">RNGP_REF_CREATE_FAILED</code><em class="property"> = 1098</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_CREATE_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_REF_CREATE_FAILED">
+<span class="sig-name descname"><span class="pre">RNGP_REF_CREATE_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1098</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_CREATE_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_REF_CYCLE">
-<code class="sig-name descname">RNGP_REF_CYCLE</code><em class="property"> = 1099</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_CYCLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_REF_CYCLE">
+<span class="sig-name descname"><span class="pre">RNGP_REF_CYCLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1099</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_CYCLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_REF_NAME_INVALID">
-<code class="sig-name descname">RNGP_REF_NAME_INVALID</code><em class="property"> = 1100</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NAME_INVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_REF_NAME_INVALID">
+<span class="sig-name descname"><span class="pre">RNGP_REF_NAME_INVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1100</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NAME_INVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_REF_NOT_EMPTY">
-<code class="sig-name descname">RNGP_REF_NOT_EMPTY</code><em class="property"> = 1103</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NOT_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_REF_NOT_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_REF_NOT_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1103</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NOT_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_REF_NO_DEF">
-<code class="sig-name descname">RNGP_REF_NO_DEF</code><em class="property"> = 1101</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NO_DEF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_REF_NO_DEF">
+<span class="sig-name descname"><span class="pre">RNGP_REF_NO_DEF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1101</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NO_DEF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_REF_NO_NAME">
-<code class="sig-name descname">RNGP_REF_NO_NAME</code><em class="property"> = 1102</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_REF_NO_NAME">
+<span class="sig-name descname"><span class="pre">RNGP_REF_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1102</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_REF_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE">
-<code class="sig-name descname">RNGP_START_CHOICE_AND_INTERLEAVE</code><em class="property"> = 1104</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE">
+<span class="sig-name descname"><span class="pre">RNGP_START_CHOICE_AND_INTERLEAVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1104</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_START_CONTENT">
-<code class="sig-name descname">RNGP_START_CONTENT</code><em class="property"> = 1105</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_START_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_START_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1105</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_START_EMPTY">
-<code class="sig-name descname">RNGP_START_EMPTY</code><em class="property"> = 1106</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_START_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_START_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1106</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_START_MISSING">
-<code class="sig-name descname">RNGP_START_MISSING</code><em class="property"> = 1107</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_START_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_START_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1107</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_START_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_TEXT_EXPECTED">
-<code class="sig-name descname">RNGP_TEXT_EXPECTED</code><em class="property"> = 1108</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TEXT_EXPECTED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_TEXT_EXPECTED">
+<span class="sig-name descname"><span class="pre">RNGP_TEXT_EXPECTED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1108</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TEXT_EXPECTED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_TEXT_HAS_CHILD">
-<code class="sig-name descname">RNGP_TEXT_HAS_CHILD</code><em class="property"> = 1109</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TEXT_HAS_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_TEXT_HAS_CHILD">
+<span class="sig-name descname"><span class="pre">RNGP_TEXT_HAS_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1109</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TEXT_HAS_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_TYPE_MISSING">
-<code class="sig-name descname">RNGP_TYPE_MISSING</code><em class="property"> = 1110</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TYPE_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_TYPE_MISSING">
+<span class="sig-name descname"><span class="pre">RNGP_TYPE_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1110</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TYPE_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_TYPE_NOT_FOUND">
-<code class="sig-name descname">RNGP_TYPE_NOT_FOUND</code><em class="property"> = 1111</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TYPE_NOT_FOUND" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_TYPE_NOT_FOUND">
+<span class="sig-name descname"><span class="pre">RNGP_TYPE_NOT_FOUND</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1111</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TYPE_NOT_FOUND" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_TYPE_VALUE">
-<code class="sig-name descname">RNGP_TYPE_VALUE</code><em class="property"> = 1112</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TYPE_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_TYPE_VALUE">
+<span class="sig-name descname"><span class="pre">RNGP_TYPE_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1112</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_TYPE_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE">
-<code class="sig-name descname">RNGP_UNKNOWN_ATTRIBUTE</code><em class="property"> = 1113</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE">
+<span class="sig-name descname"><span class="pre">RNGP_UNKNOWN_ATTRIBUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1113</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_COMBINE">
-<code class="sig-name descname">RNGP_UNKNOWN_COMBINE</code><em class="property"> = 1114</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_COMBINE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_COMBINE">
+<span class="sig-name descname"><span class="pre">RNGP_UNKNOWN_COMBINE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1114</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_COMBINE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_CONSTRUCT">
-<code class="sig-name descname">RNGP_UNKNOWN_CONSTRUCT</code><em class="property"> = 1115</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_CONSTRUCT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_CONSTRUCT">
+<span class="sig-name descname"><span class="pre">RNGP_UNKNOWN_CONSTRUCT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1115</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_CONSTRUCT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_TYPE_LIB">
-<code class="sig-name descname">RNGP_UNKNOWN_TYPE_LIB</code><em class="property"> = 1116</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_TYPE_LIB" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_UNKNOWN_TYPE_LIB">
+<span class="sig-name descname"><span class="pre">RNGP_UNKNOWN_TYPE_LIB</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1116</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_UNKNOWN_TYPE_LIB" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_URI_FRAGMENT">
-<code class="sig-name descname">RNGP_URI_FRAGMENT</code><em class="property"> = 1117</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_URI_FRAGMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_URI_FRAGMENT">
+<span class="sig-name descname"><span class="pre">RNGP_URI_FRAGMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1117</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_URI_FRAGMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_URI_NOT_ABSOLUTE">
-<code class="sig-name descname">RNGP_URI_NOT_ABSOLUTE</code><em class="property"> = 1118</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_URI_NOT_ABSOLUTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_URI_NOT_ABSOLUTE">
+<span class="sig-name descname"><span class="pre">RNGP_URI_NOT_ABSOLUTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1118</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_URI_NOT_ABSOLUTE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_VALUE_EMPTY">
-<code class="sig-name descname">RNGP_VALUE_EMPTY</code><em class="property"> = 1119</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_VALUE_EMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_VALUE_EMPTY">
+<span class="sig-name descname"><span class="pre">RNGP_VALUE_EMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1119</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_VALUE_EMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_VALUE_NO_CONTENT">
-<code class="sig-name descname">RNGP_VALUE_NO_CONTENT</code><em class="property"> = 1120</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_VALUE_NO_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_VALUE_NO_CONTENT">
+<span class="sig-name descname"><span class="pre">RNGP_VALUE_NO_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1120</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_VALUE_NO_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_XMLNS_NAME">
-<code class="sig-name descname">RNGP_XMLNS_NAME</code><em class="property"> = 1121</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_XMLNS_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_XMLNS_NAME">
+<span class="sig-name descname"><span class="pre">RNGP_XMLNS_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1121</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_XMLNS_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.RNGP_XML_NS">
-<code class="sig-name descname">RNGP_XML_NS</code><em class="property"> = 1122</em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_XML_NS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.RNGP_XML_NS">
+<span class="sig-name descname"><span class="pre">RNGP_XML_NS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1122</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.RNGP_XML_NS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SAVE_CHAR_INVALID">
-<code class="sig-name descname">SAVE_CHAR_INVALID</code><em class="property"> = 1401</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_CHAR_INVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SAVE_CHAR_INVALID">
+<span class="sig-name descname"><span class="pre">SAVE_CHAR_INVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1401</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_CHAR_INVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SAVE_NOT_UTF8">
-<code class="sig-name descname">SAVE_NOT_UTF8</code><em class="property"> = 1400</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_NOT_UTF8" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SAVE_NOT_UTF8">
+<span class="sig-name descname"><span class="pre">SAVE_NOT_UTF8</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1400</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_NOT_UTF8" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SAVE_NO_DOCTYPE">
-<code class="sig-name descname">SAVE_NO_DOCTYPE</code><em class="property"> = 1402</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_NO_DOCTYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SAVE_NO_DOCTYPE">
+<span class="sig-name descname"><span class="pre">SAVE_NO_DOCTYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1402</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_NO_DOCTYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SAVE_UNKNOWN_ENCODING">
-<code class="sig-name descname">SAVE_UNKNOWN_ENCODING</code><em class="property"> = 1403</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_UNKNOWN_ENCODING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SAVE_UNKNOWN_ENCODING">
+<span class="sig-name descname"><span class="pre">SAVE_UNKNOWN_ENCODING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1403</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SAVE_UNKNOWN_ENCODING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_AG_PROPS_CORRECT">
-<code class="sig-name descname">SCHEMAP_AG_PROPS_CORRECT</code><em class="property"> = 3087</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_AG_PROPS_CORRECT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_AG_PROPS_CORRECT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_AG_PROPS_CORRECT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3087</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_AG_PROPS_CORRECT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE">
-<code class="sig-name descname">SCHEMAP_ATTRFORMDEFAULT_VALUE</code><em class="property"> = 1701</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ATTRFORMDEFAULT_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1701</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF">
-<code class="sig-name descname">SCHEMAP_ATTRGRP_NONAME_NOREF</code><em class="property"> = 1702</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ATTRGRP_NONAME_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1702</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF">
-<code class="sig-name descname">SCHEMAP_ATTR_NONAME_NOREF</code><em class="property"> = 1703</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ATTR_NONAME_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1703</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT">
-<code class="sig-name descname">SCHEMAP_AU_PROPS_CORRECT</code><em class="property"> = 3089</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_AU_PROPS_CORRECT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3089</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2">
-<code class="sig-name descname">SCHEMAP_AU_PROPS_CORRECT_2</code><em class="property"> = 3078</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_AU_PROPS_CORRECT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3078</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2">
-<code class="sig-name descname">SCHEMAP_A_PROPS_CORRECT_2</code><em class="property"> = 3079</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_A_PROPS_CORRECT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3079</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3">
-<code class="sig-name descname">SCHEMAP_A_PROPS_CORRECT_3</code><em class="property"> = 3090</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_A_PROPS_CORRECT_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3090</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF">
-<code class="sig-name descname">SCHEMAP_COMPLEXTYPE_NONAME_NOREF</code><em class="property"> = 1704</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COMPLEXTYPE_NONAME_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1704</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ALL_LIMITED">
-<code class="sig-name descname">SCHEMAP_COS_ALL_LIMITED</code><em class="property"> = 3091</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ALL_LIMITED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ALL_LIMITED">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ALL_LIMITED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3091</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ALL_LIMITED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1">
-<code class="sig-name descname">SCHEMAP_COS_CT_EXTENDS_1_1</code><em class="property"> = 3063</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_CT_EXTENDS_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3063</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2">
-<code class="sig-name descname">SCHEMAP_COS_CT_EXTENDS_1_2</code><em class="property"> = 3088</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_CT_EXTENDS_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3088</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3">
-<code class="sig-name descname">SCHEMAP_COS_CT_EXTENDS_1_3</code><em class="property"> = 1800</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_CT_EXTENDS_1_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1800</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_DERIVED_OK_2_1</code><em class="property"> = 3031</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_DERIVED_OK_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3031</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_DERIVED_OK_2_2</code><em class="property"> = 3032</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_DERIVED_OK_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3032</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_1_1</code><em class="property"> = 3011</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3011</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_1_2</code><em class="property"> = 3012</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3012</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_1_3_1</code><em class="property"> = 3013</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_1_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3013</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_1_3_2</code><em class="property"> = 3014</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_1_3_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3014</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_1</code><em class="property"> = 3015</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3015</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_1_1</code><em class="property"> = 3016</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3016</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_1_2</code><em class="property"> = 3017</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3017</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_2_1</code><em class="property"> = 3018</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3018</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_2_2</code><em class="property"> = 3019</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3019</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_2_3</code><em class="property"> = 3020</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_2_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3020</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_2_4</code><em class="property"> = 3021</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_2_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3021</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_2_3_2_5</code><em class="property"> = 3022</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_2_3_2_5</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3022</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_1</code><em class="property"> = 3023</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3023</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_1</code><em class="property"> = 3024</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3024</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_1_2</code><em class="property"> = 3025</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3025</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_2_1</code><em class="property"> = 3027</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3027</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_2_2</code><em class="property"> = 3026</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3026</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_2_3</code><em class="property"> = 3028</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_2_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3028</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_2_4</code><em class="property"> = 3029</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_2_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3029</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5">
-<code class="sig-name descname">SCHEMAP_COS_ST_RESTRICTS_3_3_2_5</code><em class="property"> = 3030</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_ST_RESTRICTS_3_3_2_5</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3030</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1">
-<code class="sig-name descname">SCHEMAP_COS_VALID_DEFAULT_1</code><em class="property"> = 3058</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_VALID_DEFAULT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3058</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1">
-<code class="sig-name descname">SCHEMAP_COS_VALID_DEFAULT_2_1</code><em class="property"> = 3059</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_VALID_DEFAULT_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3059</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1">
-<code class="sig-name descname">SCHEMAP_COS_VALID_DEFAULT_2_2_1</code><em class="property"> = 3060</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_VALID_DEFAULT_2_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3060</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2">
-<code class="sig-name descname">SCHEMAP_COS_VALID_DEFAULT_2_2_2</code><em class="property"> = 3061</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_COS_VALID_DEFAULT_2_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3061</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1">
-<code class="sig-name descname">SCHEMAP_CT_PROPS_CORRECT_1</code><em class="property"> = 1782</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_CT_PROPS_CORRECT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1782</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2">
-<code class="sig-name descname">SCHEMAP_CT_PROPS_CORRECT_2</code><em class="property"> = 1783</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_CT_PROPS_CORRECT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1783</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3">
-<code class="sig-name descname">SCHEMAP_CT_PROPS_CORRECT_3</code><em class="property"> = 1784</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_CT_PROPS_CORRECT_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1784</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4">
-<code class="sig-name descname">SCHEMAP_CT_PROPS_CORRECT_4</code><em class="property"> = 1785</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4">
+<span class="sig-name descname"><span class="pre">SCHEMAP_CT_PROPS_CORRECT_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1785</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5">
-<code class="sig-name descname">SCHEMAP_CT_PROPS_CORRECT_5</code><em class="property"> = 1786</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5">
+<span class="sig-name descname"><span class="pre">SCHEMAP_CT_PROPS_CORRECT_5</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1786</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE">
-<code class="sig-name descname">SCHEMAP_CVC_SIMPLE_TYPE</code><em class="property"> = 3062</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_CVC_SIMPLE_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3062</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_C_PROPS_CORRECT">
-<code class="sig-name descname">SCHEMAP_C_PROPS_CORRECT</code><em class="property"> = 3080</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_C_PROPS_CORRECT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_C_PROPS_CORRECT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_C_PROPS_CORRECT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3080</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_C_PROPS_CORRECT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DEF_AND_PREFIX">
-<code class="sig-name descname">SCHEMAP_DEF_AND_PREFIX</code><em class="property"> = 1768</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DEF_AND_PREFIX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DEF_AND_PREFIX">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DEF_AND_PREFIX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1768</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DEF_AND_PREFIX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_1</code><em class="property"> = 1787</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1787</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1</code><em class="property"> = 1788</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1788</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2</code><em class="property"> = 1789</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1789</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3</code><em class="property"> = 3077</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3077</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_2_2</code><em class="property"> = 1790</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1790</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_3</code><em class="property"> = 1791</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1791</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_4_1</code><em class="property"> = 1797</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_4_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1797</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_4_2</code><em class="property"> = 1798</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_4_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1798</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3">
-<code class="sig-name descname">SCHEMAP_DERIVATION_OK_RESTRICTION_4_3</code><em class="property"> = 1799</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_DERIVATION_OK_RESTRICTION_4_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1799</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE">
-<code class="sig-name descname">SCHEMAP_ELEMFORMDEFAULT_VALUE</code><em class="property"> = 1705</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ELEMFORMDEFAULT_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1705</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED">
-<code class="sig-name descname">SCHEMAP_ELEM_DEFAULT_FIXED</code><em class="property"> = 1755</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ELEM_DEFAULT_FIXED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1755</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF">
-<code class="sig-name descname">SCHEMAP_ELEM_NONAME_NOREF</code><em class="property"> = 1706</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ELEM_NONAME_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1706</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_EXTENSION_NO_BASE">
-<code class="sig-name descname">SCHEMAP_EXTENSION_NO_BASE</code><em class="property"> = 1707</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_EXTENSION_NO_BASE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_EXTENSION_NO_BASE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_EXTENSION_NO_BASE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1707</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_EXTENSION_NO_BASE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2">
-<code class="sig-name descname">SCHEMAP_E_PROPS_CORRECT_2</code><em class="property"> = 3045</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_E_PROPS_CORRECT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3045</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3">
-<code class="sig-name descname">SCHEMAP_E_PROPS_CORRECT_3</code><em class="property"> = 3046</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_E_PROPS_CORRECT_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3046</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4">
-<code class="sig-name descname">SCHEMAP_E_PROPS_CORRECT_4</code><em class="property"> = 3047</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4">
+<span class="sig-name descname"><span class="pre">SCHEMAP_E_PROPS_CORRECT_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3047</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5">
-<code class="sig-name descname">SCHEMAP_E_PROPS_CORRECT_5</code><em class="property"> = 3048</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5">
+<span class="sig-name descname"><span class="pre">SCHEMAP_E_PROPS_CORRECT_5</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3048</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6">
-<code class="sig-name descname">SCHEMAP_E_PROPS_CORRECT_6</code><em class="property"> = 3049</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6">
+<span class="sig-name descname"><span class="pre">SCHEMAP_E_PROPS_CORRECT_6</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3049</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_FACET_NO_VALUE">
-<code class="sig-name descname">SCHEMAP_FACET_NO_VALUE</code><em class="property"> = 1708</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FACET_NO_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_FACET_NO_VALUE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_FACET_NO_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1708</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FACET_NO_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT">
-<code class="sig-name descname">SCHEMAP_FAILED_BUILD_IMPORT</code><em class="property"> = 1709</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_FAILED_BUILD_IMPORT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1709</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_FAILED_LOAD">
-<code class="sig-name descname">SCHEMAP_FAILED_LOAD</code><em class="property"> = 1757</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FAILED_LOAD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_FAILED_LOAD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_FAILED_LOAD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1757</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FAILED_LOAD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_FAILED_PARSE">
-<code class="sig-name descname">SCHEMAP_FAILED_PARSE</code><em class="property"> = 1766</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FAILED_PARSE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_FAILED_PARSE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_FAILED_PARSE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1766</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_FAILED_PARSE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF">
-<code class="sig-name descname">SCHEMAP_GROUP_NONAME_NOREF</code><em class="property"> = 1710</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_GROUP_NONAME_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1710</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI">
-<code class="sig-name descname">SCHEMAP_IMPORT_NAMESPACE_NOT_URI</code><em class="property"> = 1711</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI">
+<span class="sig-name descname"><span class="pre">SCHEMAP_IMPORT_NAMESPACE_NOT_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1711</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME">
-<code class="sig-name descname">SCHEMAP_IMPORT_REDEFINE_NSNAME</code><em class="property"> = 1712</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME">
+<span class="sig-name descname"><span class="pre">SCHEMAP_IMPORT_REDEFINE_NSNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1712</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI">
-<code class="sig-name descname">SCHEMAP_IMPORT_SCHEMA_NOT_URI</code><em class="property"> = 1713</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI">
+<span class="sig-name descname"><span class="pre">SCHEMAP_IMPORT_SCHEMA_NOT_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1713</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI">
-<code class="sig-name descname">SCHEMAP_INCLUDE_SCHEMA_NOT_URI</code><em class="property"> = 1770</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INCLUDE_SCHEMA_NOT_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1770</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI">
-<code class="sig-name descname">SCHEMAP_INCLUDE_SCHEMA_NO_URI</code><em class="property"> = 1771</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INCLUDE_SCHEMA_NO_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1771</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INTERNAL">
-<code class="sig-name descname">SCHEMAP_INTERNAL</code><em class="property"> = 3069</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INTERNAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INTERNAL">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INTERNAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3069</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INTERNAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE">
-<code class="sig-name descname">SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE</code><em class="property"> = 1793</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1793</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION">
-<code class="sig-name descname">SCHEMAP_INVALID_ATTR_COMBINATION</code><em class="property"> = 1777</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_ATTR_COMBINATION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1777</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION">
-<code class="sig-name descname">SCHEMAP_INVALID_ATTR_INLINE_COMBINATION</code><em class="property"> = 1778</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_ATTR_INLINE_COMBINATION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1778</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_NAME">
-<code class="sig-name descname">SCHEMAP_INVALID_ATTR_NAME</code><em class="property"> = 1780</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_NAME">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_ATTR_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1780</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_USE">
-<code class="sig-name descname">SCHEMAP_INVALID_ATTR_USE</code><em class="property"> = 1774</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_USE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_USE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_ATTR_USE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1774</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_USE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_BOOLEAN">
-<code class="sig-name descname">SCHEMAP_INVALID_BOOLEAN</code><em class="property"> = 1714</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_BOOLEAN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_BOOLEAN">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_BOOLEAN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1714</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_BOOLEAN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ENUM">
-<code class="sig-name descname">SCHEMAP_INVALID_ENUM</code><em class="property"> = 1715</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ENUM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_ENUM">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_ENUM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1715</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ENUM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET">
-<code class="sig-name descname">SCHEMAP_INVALID_FACET</code><em class="property"> = 1716</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_FACET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1716</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET_VALUE">
-<code class="sig-name descname">SCHEMAP_INVALID_FACET_VALUE</code><em class="property"> = 1717</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET_VALUE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_FACET_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1717</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_MAXOCCURS">
-<code class="sig-name descname">SCHEMAP_INVALID_MAXOCCURS</code><em class="property"> = 1718</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_MAXOCCURS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_MAXOCCURS">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_MAXOCCURS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1718</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_MAXOCCURS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_MINOCCURS">
-<code class="sig-name descname">SCHEMAP_INVALID_MINOCCURS</code><em class="property"> = 1719</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_MINOCCURS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_MINOCCURS">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_MINOCCURS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1719</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_MINOCCURS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE">
-<code class="sig-name descname">SCHEMAP_INVALID_REF_AND_SUBTYPE</code><em class="property"> = 1720</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_REF_AND_SUBTYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1720</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE">
-<code class="sig-name descname">SCHEMAP_INVALID_WHITE_SPACE</code><em class="property"> = 1721</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_INVALID_WHITE_SPACE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1721</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1">
-<code class="sig-name descname">SCHEMAP_MG_PROPS_CORRECT_1</code><em class="property"> = 3074</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_MG_PROPS_CORRECT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3074</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2">
-<code class="sig-name descname">SCHEMAP_MG_PROPS_CORRECT_2</code><em class="property"> = 3075</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_MG_PROPS_CORRECT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3075</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD">
-<code class="sig-name descname">SCHEMAP_MISSING_SIMPLETYPE_CHILD</code><em class="property"> = 1779</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_MISSING_SIMPLETYPE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1779</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOATTR_NOREF">
-<code class="sig-name descname">SCHEMAP_NOATTR_NOREF</code><em class="property"> = 1722</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOATTR_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOATTR_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOATTR_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1722</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOATTR_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOROOT">
-<code class="sig-name descname">SCHEMAP_NOROOT</code><em class="property"> = 1759</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOROOT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOROOT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOROOT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1759</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOROOT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOTATION_NO_NAME">
-<code class="sig-name descname">SCHEMAP_NOTATION_NO_NAME</code><em class="property"> = 1723</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOTATION_NO_NAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOTATION_NO_NAME">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOTATION_NO_NAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1723</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOTATION_NO_NAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOTHING_TO_PARSE">
-<code class="sig-name descname">SCHEMAP_NOTHING_TO_PARSE</code><em class="property"> = 1758</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOTHING_TO_PARSE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOTHING_TO_PARSE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOTHING_TO_PARSE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1758</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOTHING_TO_PARSE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOTYPE_NOREF">
-<code class="sig-name descname">SCHEMAP_NOTYPE_NOREF</code><em class="property"> = 1724</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOTYPE_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOTYPE_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOTYPE_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1724</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOTYPE_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOT_DETERMINISTIC">
-<code class="sig-name descname">SCHEMAP_NOT_DETERMINISTIC</code><em class="property"> = 3070</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOT_DETERMINISTIC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOT_DETERMINISTIC">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOT_DETERMINISTIC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3070</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOT_DETERMINISTIC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NOT_SCHEMA">
-<code class="sig-name descname">SCHEMAP_NOT_SCHEMA</code><em class="property"> = 1772</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOT_SCHEMA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NOT_SCHEMA">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NOT_SCHEMA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1772</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NOT_SCHEMA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NO_XMLNS">
-<code class="sig-name descname">SCHEMAP_NO_XMLNS</code><em class="property"> = 3056</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NO_XMLNS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NO_XMLNS">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NO_XMLNS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3056</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NO_XMLNS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_NO_XSI">
-<code class="sig-name descname">SCHEMAP_NO_XSI</code><em class="property"> = 3057</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NO_XSI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_NO_XSI">
+<span class="sig-name descname"><span class="pre">SCHEMAP_NO_XSI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3057</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_NO_XSI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_PREFIX_UNDEFINED">
-<code class="sig-name descname">SCHEMAP_PREFIX_UNDEFINED</code><em class="property"> = 1700</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_PREFIX_UNDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_PREFIX_UNDEFINED">
+<span class="sig-name descname"><span class="pre">SCHEMAP_PREFIX_UNDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1700</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_PREFIX_UNDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1">
-<code class="sig-name descname">SCHEMAP_P_PROPS_CORRECT_1</code><em class="property"> = 3042</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_P_PROPS_CORRECT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3042</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1">
-<code class="sig-name descname">SCHEMAP_P_PROPS_CORRECT_2_1</code><em class="property"> = 3043</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_P_PROPS_CORRECT_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3043</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2">
-<code class="sig-name descname">SCHEMAP_P_PROPS_CORRECT_2_2</code><em class="property"> = 3044</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_P_PROPS_CORRECT_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3044</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_RECURSIVE">
-<code class="sig-name descname">SCHEMAP_RECURSIVE</code><em class="property"> = 1775</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_RECURSIVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_RECURSIVE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_RECURSIVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1775</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_RECURSIVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTR">
-<code class="sig-name descname">SCHEMAP_REDEFINED_ATTR</code><em class="property"> = 1764</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTR">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REDEFINED_ATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1764</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP">
-<code class="sig-name descname">SCHEMAP_REDEFINED_ATTRGROUP</code><em class="property"> = 1763</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REDEFINED_ATTRGROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1763</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ELEMENT">
-<code class="sig-name descname">SCHEMAP_REDEFINED_ELEMENT</code><em class="property"> = 1762</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ELEMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ELEMENT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REDEFINED_ELEMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1762</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ELEMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_GROUP">
-<code class="sig-name descname">SCHEMAP_REDEFINED_GROUP</code><em class="property"> = 1760</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_GROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_GROUP">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REDEFINED_GROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1760</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_GROUP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_NOTATION">
-<code class="sig-name descname">SCHEMAP_REDEFINED_NOTATION</code><em class="property"> = 1765</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_NOTATION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_NOTATION">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REDEFINED_NOTATION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1765</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_NOTATION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_TYPE">
-<code class="sig-name descname">SCHEMAP_REDEFINED_TYPE</code><em class="property"> = 1761</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REDEFINED_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1761</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REF_AND_CONTENT">
-<code class="sig-name descname">SCHEMAP_REF_AND_CONTENT</code><em class="property"> = 1781</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REF_AND_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REF_AND_CONTENT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REF_AND_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1781</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REF_AND_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REF_AND_SUBTYPE">
-<code class="sig-name descname">SCHEMAP_REF_AND_SUBTYPE</code><em class="property"> = 1725</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REF_AND_SUBTYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REF_AND_SUBTYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REF_AND_SUBTYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1725</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REF_AND_SUBTYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_REGEXP_INVALID">
-<code class="sig-name descname">SCHEMAP_REGEXP_INVALID</code><em class="property"> = 1756</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REGEXP_INVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_REGEXP_INVALID">
+<span class="sig-name descname"><span class="pre">SCHEMAP_REGEXP_INVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1756</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_REGEXP_INVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF">
-<code class="sig-name descname">SCHEMAP_RESTRICTION_NONAME_NOREF</code><em class="property"> = 1726</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_RESTRICTION_NONAME_NOREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1726</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE">
-<code class="sig-name descname">SCHEMAP_S4S_ATTR_INVALID_VALUE</code><em class="property"> = 3037</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_S4S_ATTR_INVALID_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3037</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_MISSING">
-<code class="sig-name descname">SCHEMAP_S4S_ATTR_MISSING</code><em class="property"> = 3036</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_MISSING">
+<span class="sig-name descname"><span class="pre">SCHEMAP_S4S_ATTR_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3036</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED">
-<code class="sig-name descname">SCHEMAP_S4S_ATTR_NOT_ALLOWED</code><em class="property"> = 3035</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED">
+<span class="sig-name descname"><span class="pre">SCHEMAP_S4S_ATTR_NOT_ALLOWED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3035</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_MISSING">
-<code class="sig-name descname">SCHEMAP_S4S_ELEM_MISSING</code><em class="property"> = 3034</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_MISSING">
+<span class="sig-name descname"><span class="pre">SCHEMAP_S4S_ELEM_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3034</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED">
-<code class="sig-name descname">SCHEMAP_S4S_ELEM_NOT_ALLOWED</code><em class="property"> = 3033</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED">
+<span class="sig-name descname"><span class="pre">SCHEMAP_S4S_ELEM_NOT_ALLOWED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3033</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME">
-<code class="sig-name descname">SCHEMAP_SIMPLETYPE_NONAME</code><em class="property"> = 1727</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SIMPLETYPE_NONAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1727</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_1</code><em class="property"> = 3051</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3051</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_2</code><em class="property"> = 3052</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3052</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_3_1</code><em class="property"> = 3053</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3053</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_3_2</code><em class="property"> = 3054</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_3_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3054</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_4</code><em class="property"> = 3055</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3055</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_GROUP_1</code><em class="property"> = 3071</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_GROUP_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3071</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_GROUP_2</code><em class="property"> = 3072</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_GROUP_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3072</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3">
-<code class="sig-name descname">SCHEMAP_SRC_ATTRIBUTE_GROUP_3</code><em class="property"> = 3073</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ATTRIBUTE_GROUP_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3073</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_CT_1">
-<code class="sig-name descname">SCHEMAP_SRC_CT_1</code><em class="property"> = 3076</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_CT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_CT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_CT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3076</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_CT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_1">
-<code class="sig-name descname">SCHEMAP_SRC_ELEMENT_1</code><em class="property"> = 3038</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ELEMENT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3038</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1">
-<code class="sig-name descname">SCHEMAP_SRC_ELEMENT_2_1</code><em class="property"> = 3039</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ELEMENT_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3039</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2">
-<code class="sig-name descname">SCHEMAP_SRC_ELEMENT_2_2</code><em class="property"> = 3040</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ELEMENT_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3040</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_3">
-<code class="sig-name descname">SCHEMAP_SRC_ELEMENT_3</code><em class="property"> = 3041</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_ELEMENT_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3041</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT</code><em class="property"> = 3082</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3082</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_1">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_1_1</code><em class="property"> = 3064</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3064</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_2">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_1_2</code><em class="property"> = 3065</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3065</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_2</code><em class="property"> = 3066</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3066</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_1">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_2_1</code><em class="property"> = 3067</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3067</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_2">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_2_2</code><em class="property"> = 3068</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3068</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_1">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_3_1</code><em class="property"> = 1795</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1795</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_2">
-<code class="sig-name descname">SCHEMAP_SRC_IMPORT_3_2</code><em class="property"> = 1796</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_IMPORT_3_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1796</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_INCLUDE">
-<code class="sig-name descname">SCHEMAP_SRC_INCLUDE</code><em class="property"> = 3050</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_INCLUDE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_INCLUDE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_INCLUDE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3050</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_INCLUDE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE">
-<code class="sig-name descname">SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE</code><em class="property"> = 3006</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3006</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_REDEFINE">
-<code class="sig-name descname">SCHEMAP_SRC_REDEFINE</code><em class="property"> = 3081</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_REDEFINE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_REDEFINE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_REDEFINE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3081</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_REDEFINE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_RESOLVE">
-<code class="sig-name descname">SCHEMAP_SRC_RESOLVE</code><em class="property"> = 3004</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_RESOLVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_RESOLVE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_RESOLVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3004</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_RESOLVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE">
-<code class="sig-name descname">SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE</code><em class="property"> = 3005</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3005</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1">
-<code class="sig-name descname">SCHEMAP_SRC_SIMPLE_TYPE_1</code><em class="property"> = 3000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_SIMPLE_TYPE_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2">
-<code class="sig-name descname">SCHEMAP_SRC_SIMPLE_TYPE_2</code><em class="property"> = 3001</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_SIMPLE_TYPE_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3001</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3">
-<code class="sig-name descname">SCHEMAP_SRC_SIMPLE_TYPE_3</code><em class="property"> = 3002</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_SIMPLE_TYPE_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3002</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4">
-<code class="sig-name descname">SCHEMAP_SRC_SIMPLE_TYPE_4</code><em class="property"> = 3003</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_SIMPLE_TYPE_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3003</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES">
-<code class="sig-name descname">SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES</code><em class="property"> = 3007</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3007</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1">
-<code class="sig-name descname">SCHEMAP_ST_PROPS_CORRECT_1</code><em class="property"> = 3008</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ST_PROPS_CORRECT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3008</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2">
-<code class="sig-name descname">SCHEMAP_ST_PROPS_CORRECT_2</code><em class="property"> = 3009</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ST_PROPS_CORRECT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3009</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3">
-<code class="sig-name descname">SCHEMAP_ST_PROPS_CORRECT_3</code><em class="property"> = 3010</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3">
+<span class="sig-name descname"><span class="pre">SCHEMAP_ST_PROPS_CORRECT_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3010</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE">
-<code class="sig-name descname">SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE</code><em class="property"> = 1776</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1776</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE">
-<code class="sig-name descname">SCHEMAP_TYPE_AND_SUBTYPE</code><em class="property"> = 1728</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_TYPE_AND_SUBTYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1728</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE">
-<code class="sig-name descname">SCHEMAP_UNION_NOT_EXPRESSIBLE</code><em class="property"> = 1794</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNION_NOT_EXPRESSIBLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1794</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_ALL_CHILD</code><em class="property"> = 1729</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_ALL_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1729</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD</code><em class="property"> = 1730</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1730</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_ATTRGRP_CHILD</code><em class="property"> = 1732</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_ATTRGRP_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1732</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP</code><em class="property"> = 1733</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1733</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_ATTR_CHILD</code><em class="property"> = 1731</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_ATTR_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1731</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_BASE_TYPE</code><em class="property"> = 1734</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_BASE_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1734</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_CHOICE_CHILD</code><em class="property"> = 1735</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_CHOICE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1735</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD</code><em class="property"> = 1736</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1736</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD</code><em class="property"> = 1737</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1737</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_ELEM_CHILD</code><em class="property"> = 1738</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_ELEM_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1738</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_EXTENSION_CHILD</code><em class="property"> = 1739</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_EXTENSION_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1739</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_FACET_CHILD</code><em class="property"> = 1740</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_FACET_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1740</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_FACET_TYPE</code><em class="property"> = 1741</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_FACET_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1741</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_GROUP_CHILD</code><em class="property"> = 1742</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_GROUP_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1742</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_IMPORT_CHILD</code><em class="property"> = 1743</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_IMPORT_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1743</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_INCLUDE_CHILD</code><em class="property"> = 1769</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_INCLUDE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1769</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_LIST_CHILD</code><em class="property"> = 1744</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_LIST_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1744</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_MEMBER_TYPE</code><em class="property"> = 1773</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_MEMBER_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1773</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_NOTATION_CHILD</code><em class="property"> = 1745</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_NOTATION_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1745</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PREFIX">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_PREFIX</code><em class="property"> = 1767</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PREFIX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PREFIX">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_PREFIX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1767</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PREFIX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD</code><em class="property"> = 1746</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1746</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_REF">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_REF</code><em class="property"> = 1747</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_REF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_REF">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_REF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1747</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_REF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_RESTRICTION_CHILD</code><em class="property"> = 1748</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_RESTRICTION_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1748</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_SCHEMAS_CHILD</code><em class="property"> = 1749</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_SCHEMAS_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1749</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_SEQUENCE_CHILD</code><em class="property"> = 1750</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_SEQUENCE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1750</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD</code><em class="property"> = 1751</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1751</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD</code><em class="property"> = 1752</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1752</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_TYPE">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_TYPE</code><em class="property"> = 1753</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_TYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1753</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD">
-<code class="sig-name descname">SCHEMAP_UNKNOWN_UNION_CHILD</code><em class="property"> = 1754</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD">
+<span class="sig-name descname"><span class="pre">SCHEMAP_UNKNOWN_UNION_CHILD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1754</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH">
-<code class="sig-name descname">SCHEMAP_WARN_ATTR_POINTLESS_PROH</code><em class="property"> = 3086</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH">
+<span class="sig-name descname"><span class="pre">SCHEMAP_WARN_ATTR_POINTLESS_PROH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3086</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH">
-<code class="sig-name descname">SCHEMAP_WARN_ATTR_REDECL_PROH</code><em class="property"> = 3085</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH">
+<span class="sig-name descname"><span class="pre">SCHEMAP_WARN_ATTR_REDECL_PROH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3085</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA">
-<code class="sig-name descname">SCHEMAP_WARN_SKIP_SCHEMA</code><em class="property"> = 3083</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA">
+<span class="sig-name descname"><span class="pre">SCHEMAP_WARN_SKIP_SCHEMA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3083</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA">
-<code class="sig-name descname">SCHEMAP_WARN_UNLOCATED_SCHEMA</code><em class="property"> = 3084</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA">
+<span class="sig-name descname"><span class="pre">SCHEMAP_WARN_UNLOCATED_SCHEMA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3084</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER">
-<code class="sig-name descname">SCHEMAP_WILDCARD_INVALID_NS_MEMBER</code><em class="property"> = 1792</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER">
+<span class="sig-name descname"><span class="pre">SCHEMAP_WILDCARD_INVALID_NS_MEMBER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1792</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMATRONV_ASSERT">
-<code class="sig-name descname">SCHEMATRONV_ASSERT</code><em class="property"> = 4000</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMATRONV_ASSERT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMATRONV_ASSERT">
+<span class="sig-name descname"><span class="pre">SCHEMATRONV_ASSERT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4000</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMATRONV_ASSERT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMATRONV_REPORT">
-<code class="sig-name descname">SCHEMATRONV_REPORT</code><em class="property"> = 4001</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMATRONV_REPORT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMATRONV_REPORT">
+<span class="sig-name descname"><span class="pre">SCHEMATRONV_REPORT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4001</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMATRONV_REPORT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_ATTRINVALID">
-<code class="sig-name descname">SCHEMAV_ATTRINVALID</code><em class="property"> = 1821</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ATTRINVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_ATTRINVALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_ATTRINVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1821</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ATTRINVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_ATTRUNKNOWN">
-<code class="sig-name descname">SCHEMAV_ATTRUNKNOWN</code><em class="property"> = 1820</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ATTRUNKNOWN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_ATTRUNKNOWN">
+<span class="sig-name descname"><span class="pre">SCHEMAV_ATTRUNKNOWN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1820</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ATTRUNKNOWN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CONSTRUCT">
-<code class="sig-name descname">SCHEMAV_CONSTRUCT</code><em class="property"> = 1817</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CONSTRUCT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CONSTRUCT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CONSTRUCT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1817</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CONSTRUCT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1">
-<code class="sig-name descname">SCHEMAV_CVC_ATTRIBUTE_1</code><em class="property"> = 1861</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ATTRIBUTE_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1861</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2">
-<code class="sig-name descname">SCHEMAV_CVC_ATTRIBUTE_2</code><em class="property"> = 1862</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ATTRIBUTE_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1862</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3">
-<code class="sig-name descname">SCHEMAV_CVC_ATTRIBUTE_3</code><em class="property"> = 1863</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ATTRIBUTE_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1863</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4">
-<code class="sig-name descname">SCHEMAV_CVC_ATTRIBUTE_4</code><em class="property"> = 1864</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ATTRIBUTE_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1864</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_AU">
-<code class="sig-name descname">SCHEMAV_CVC_AU</code><em class="property"> = 1874</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_AU" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_AU">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_AU</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1874</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_AU" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_1</code><em class="property"> = 1873</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1873</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_2_1</code><em class="property"> = 1841</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1841</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_2_2</code><em class="property"> = 1842</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1842</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_2_3</code><em class="property"> = 1843</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_2_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1843</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_2_4</code><em class="property"> = 1844</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_2_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1844</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_3_1</code><em class="property"> = 1865</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1865</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_3_2_1</code><em class="property"> = 1866</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_3_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1866</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_3_2_2</code><em class="property"> = 1867</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_3_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1867</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_4</code><em class="property"> = 1868</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1868</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_5_1</code><em class="property"> = 1869</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_5_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1869</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2">
-<code class="sig-name descname">SCHEMAV_CVC_COMPLEX_TYPE_5_2</code><em class="property"> = 1870</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_COMPLEX_TYPE_5_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1870</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_DATATYPE_VALID_1_2_1</code><em class="property"> = 1824</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_DATATYPE_VALID_1_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1824</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2">
-<code class="sig-name descname">SCHEMAV_CVC_DATATYPE_VALID_1_2_2</code><em class="property"> = 1825</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_DATATYPE_VALID_1_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1825</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3">
-<code class="sig-name descname">SCHEMAV_CVC_DATATYPE_VALID_1_2_3</code><em class="property"> = 1826</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_DATATYPE_VALID_1_2_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1826</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_1</code><em class="property"> = 1845</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1845</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_2">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_2</code><em class="property"> = 1846</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1846</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_3_1</code><em class="property"> = 1847</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_3_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1847</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_3_2_1</code><em class="property"> = 1848</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_3_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1848</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_2">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_3_2_2</code><em class="property"> = 1849</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_3_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1849</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_4_1</code><em class="property"> = 1850</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_4_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1850</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_2">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_4_2</code><em class="property"> = 1851</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_4_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1851</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_3">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_4_3</code><em class="property"> = 1852</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_3">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_4_3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1852</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_3" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_5_1_1</code><em class="property"> = 1853</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_5_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1853</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_2">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_5_1_2</code><em class="property"> = 1854</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_5_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1854</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_5_2_1</code><em class="property"> = 1855</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_5_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1855</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_5_2_2_1</code><em class="property"> = 1856</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_5_2_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1856</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_5_2_2_2_1</code><em class="property"> = 1857</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_5_2_2_2_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1857</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_5_2_2_2_2</code><em class="property"> = 1858</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_5_2_2_2_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1858</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_6">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_6</code><em class="property"> = 1859</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_6" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_6">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_6</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1859</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_6" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_7">
-<code class="sig-name descname">SCHEMAV_CVC_ELT_7</code><em class="property"> = 1860</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_7" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_7">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ELT_7</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1860</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_7" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_ENUMERATION_VALID</code><em class="property"> = 1840</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_ENUMERATION_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1840</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_FACET_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_FACET_VALID</code><em class="property"> = 1829</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_FACET_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_FACET_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_FACET_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1829</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_FACET_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_FRACTIONDIGITS_VALID</code><em class="property"> = 1838</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_FRACTIONDIGITS_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1838</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_IDC">
-<code class="sig-name descname">SCHEMAV_CVC_IDC</code><em class="property"> = 1877</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_IDC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_IDC">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_IDC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1877</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_IDC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_LENGTH_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_LENGTH_VALID</code><em class="property"> = 1830</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_LENGTH_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_LENGTH_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_LENGTH_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1830</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_LENGTH_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_MAXEXCLUSIVE_VALID</code><em class="property"> = 1836</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_MAXEXCLUSIVE_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1836</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_MAXINCLUSIVE_VALID</code><em class="property"> = 1834</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_MAXINCLUSIVE_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1834</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_MAXLENGTH_VALID</code><em class="property"> = 1832</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_MAXLENGTH_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1832</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_MINEXCLUSIVE_VALID</code><em class="property"> = 1835</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_MINEXCLUSIVE_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1835</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_MININCLUSIVE_VALID</code><em class="property"> = 1833</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_MININCLUSIVE_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1833</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_MINLENGTH_VALID</code><em class="property"> = 1831</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_MINLENGTH_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1831</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_PATTERN_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_PATTERN_VALID</code><em class="property"> = 1839</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_PATTERN_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_PATTERN_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_PATTERN_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1839</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_PATTERN_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID">
-<code class="sig-name descname">SCHEMAV_CVC_TOTALDIGITS_VALID</code><em class="property"> = 1837</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_TOTALDIGITS_VALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1837</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_1">
-<code class="sig-name descname">SCHEMAV_CVC_TYPE_1</code><em class="property"> = 1875</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_TYPE_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1875</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_2">
-<code class="sig-name descname">SCHEMAV_CVC_TYPE_2</code><em class="property"> = 1876</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_TYPE_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1876</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1">
-<code class="sig-name descname">SCHEMAV_CVC_TYPE_3_1_1</code><em class="property"> = 1827</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_TYPE_3_1_1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1827</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2">
-<code class="sig-name descname">SCHEMAV_CVC_TYPE_3_1_2</code><em class="property"> = 1828</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_TYPE_3_1_2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1828</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_CVC_WILDCARD">
-<code class="sig-name descname">SCHEMAV_CVC_WILDCARD</code><em class="property"> = 1878</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_WILDCARD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_CVC_WILDCARD">
+<span class="sig-name descname"><span class="pre">SCHEMAV_CVC_WILDCARD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1878</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_CVC_WILDCARD" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING">
-<code class="sig-name descname">SCHEMAV_DOCUMENT_ELEMENT_MISSING</code><em class="property"> = 1872</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING">
+<span class="sig-name descname"><span class="pre">SCHEMAV_DOCUMENT_ELEMENT_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1872</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_ELEMCONT">
-<code class="sig-name descname">SCHEMAV_ELEMCONT</code><em class="property"> = 1810</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ELEMCONT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_ELEMCONT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_ELEMCONT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1810</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ELEMCONT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_ELEMENT_CONTENT">
-<code class="sig-name descname">SCHEMAV_ELEMENT_CONTENT</code><em class="property"> = 1871</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ELEMENT_CONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_ELEMENT_CONTENT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_ELEMENT_CONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1871</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ELEMENT_CONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_EXTRACONTENT">
-<code class="sig-name descname">SCHEMAV_EXTRACONTENT</code><em class="property"> = 1813</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_EXTRACONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_EXTRACONTENT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_EXTRACONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1813</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_EXTRACONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_FACET">
-<code class="sig-name descname">SCHEMAV_FACET</code><em class="property"> = 1823</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_FACET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_FACET">
+<span class="sig-name descname"><span class="pre">SCHEMAV_FACET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1823</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_FACET" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_HAVEDEFAULT">
-<code class="sig-name descname">SCHEMAV_HAVEDEFAULT</code><em class="property"> = 1811</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_HAVEDEFAULT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_HAVEDEFAULT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_HAVEDEFAULT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1811</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_HAVEDEFAULT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_INTERNAL">
-<code class="sig-name descname">SCHEMAV_INTERNAL</code><em class="property"> = 1818</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_INTERNAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_INTERNAL">
+<span class="sig-name descname"><span class="pre">SCHEMAV_INTERNAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1818</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_INTERNAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_INVALIDATTR">
-<code class="sig-name descname">SCHEMAV_INVALIDATTR</code><em class="property"> = 1814</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_INVALIDATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_INVALIDATTR">
+<span class="sig-name descname"><span class="pre">SCHEMAV_INVALIDATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1814</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_INVALIDATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_INVALIDELEM">
-<code class="sig-name descname">SCHEMAV_INVALIDELEM</code><em class="property"> = 1815</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_INVALIDELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_INVALIDELEM">
+<span class="sig-name descname"><span class="pre">SCHEMAV_INVALIDELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1815</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_INVALIDELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_ISABSTRACT">
-<code class="sig-name descname">SCHEMAV_ISABSTRACT</code><em class="property"> = 1808</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ISABSTRACT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_ISABSTRACT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_ISABSTRACT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1808</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_ISABSTRACT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_MISC">
-<code class="sig-name descname">SCHEMAV_MISC</code><em class="property"> = 1879</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_MISC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_MISC">
+<span class="sig-name descname"><span class="pre">SCHEMAV_MISC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1879</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_MISC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_MISSING">
-<code class="sig-name descname">SCHEMAV_MISSING</code><em class="property"> = 1804</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_MISSING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_MISSING">
+<span class="sig-name descname"><span class="pre">SCHEMAV_MISSING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1804</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_MISSING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOROLLBACK">
-<code class="sig-name descname">SCHEMAV_NOROLLBACK</code><em class="property"> = 1807</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOROLLBACK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOROLLBACK">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOROLLBACK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1807</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOROLLBACK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOROOT">
-<code class="sig-name descname">SCHEMAV_NOROOT</code><em class="property"> = 1801</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOROOT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOROOT">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOROOT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1801</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOROOT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOTDETERMINIST">
-<code class="sig-name descname">SCHEMAV_NOTDETERMINIST</code><em class="property"> = 1816</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTDETERMINIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOTDETERMINIST">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOTDETERMINIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1816</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTDETERMINIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOTEMPTY">
-<code class="sig-name descname">SCHEMAV_NOTEMPTY</code><em class="property"> = 1809</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTEMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOTEMPTY">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOTEMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1809</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTEMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOTNILLABLE">
-<code class="sig-name descname">SCHEMAV_NOTNILLABLE</code><em class="property"> = 1812</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTNILLABLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOTNILLABLE">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOTNILLABLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1812</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTNILLABLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOTSIMPLE">
-<code class="sig-name descname">SCHEMAV_NOTSIMPLE</code><em class="property"> = 1819</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTSIMPLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOTSIMPLE">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOTSIMPLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1819</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTSIMPLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOTTOPLEVEL">
-<code class="sig-name descname">SCHEMAV_NOTTOPLEVEL</code><em class="property"> = 1803</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTTOPLEVEL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOTTOPLEVEL">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOTTOPLEVEL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1803</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTTOPLEVEL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_NOTYPE">
-<code class="sig-name descname">SCHEMAV_NOTYPE</code><em class="property"> = 1806</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_NOTYPE">
+<span class="sig-name descname"><span class="pre">SCHEMAV_NOTYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1806</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_NOTYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_UNDECLAREDELEM">
-<code class="sig-name descname">SCHEMAV_UNDECLAREDELEM</code><em class="property"> = 1802</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_UNDECLAREDELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_UNDECLAREDELEM">
+<span class="sig-name descname"><span class="pre">SCHEMAV_UNDECLAREDELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1802</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_UNDECLAREDELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_VALUE">
-<code class="sig-name descname">SCHEMAV_VALUE</code><em class="property"> = 1822</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_VALUE">
+<span class="sig-name descname"><span class="pre">SCHEMAV_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1822</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.SCHEMAV_WRONGELEM">
-<code class="sig-name descname">SCHEMAV_WRONGELEM</code><em class="property"> = 1805</em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_WRONGELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.SCHEMAV_WRONGELEM">
+<span class="sig-name descname"><span class="pre">SCHEMAV_WRONGELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1805</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.SCHEMAV_WRONGELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.TREE_INVALID_DEC">
-<code class="sig-name descname">TREE_INVALID_DEC</code><em class="property"> = 1301</em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_INVALID_DEC" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.TREE_INVALID_DEC">
+<span class="sig-name descname"><span class="pre">TREE_INVALID_DEC</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1301</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_INVALID_DEC" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.TREE_INVALID_HEX">
-<code class="sig-name descname">TREE_INVALID_HEX</code><em class="property"> = 1300</em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_INVALID_HEX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.TREE_INVALID_HEX">
+<span class="sig-name descname"><span class="pre">TREE_INVALID_HEX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1300</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_INVALID_HEX" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.TREE_NOT_UTF8">
-<code class="sig-name descname">TREE_NOT_UTF8</code><em class="property"> = 1303</em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_NOT_UTF8" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.TREE_NOT_UTF8">
+<span class="sig-name descname"><span class="pre">TREE_NOT_UTF8</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1303</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_NOT_UTF8" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.TREE_UNTERMINATED_ENTITY">
-<code class="sig-name descname">TREE_UNTERMINATED_ENTITY</code><em class="property"> = 1302</em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_UNTERMINATED_ENTITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.TREE_UNTERMINATED_ENTITY">
+<span class="sig-name descname"><span class="pre">TREE_UNTERMINATED_ENTITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1302</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.TREE_UNTERMINATED_ENTITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_CATALOG_PI">
-<code class="sig-name descname">WAR_CATALOG_PI</code><em class="property"> = 93</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_CATALOG_PI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_CATALOG_PI">
+<span class="sig-name descname"><span class="pre">WAR_CATALOG_PI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">93</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_CATALOG_PI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_ENTITY_REDEFINED">
-<code class="sig-name descname">WAR_ENTITY_REDEFINED</code><em class="property"> = 107</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_ENTITY_REDEFINED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_ENTITY_REDEFINED">
+<span class="sig-name descname"><span class="pre">WAR_ENTITY_REDEFINED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">107</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_ENTITY_REDEFINED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_LANG_VALUE">
-<code class="sig-name descname">WAR_LANG_VALUE</code><em class="property"> = 98</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_LANG_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_LANG_VALUE">
+<span class="sig-name descname"><span class="pre">WAR_LANG_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">98</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_LANG_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_NS_COLUMN">
-<code class="sig-name descname">WAR_NS_COLUMN</code><em class="property"> = 106</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_NS_COLUMN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_NS_COLUMN">
+<span class="sig-name descname"><span class="pre">WAR_NS_COLUMN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">106</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_NS_COLUMN" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_NS_URI">
-<code class="sig-name descname">WAR_NS_URI</code><em class="property"> = 99</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_NS_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_NS_URI">
+<span class="sig-name descname"><span class="pre">WAR_NS_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">99</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_NS_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_NS_URI_RELATIVE">
-<code class="sig-name descname">WAR_NS_URI_RELATIVE</code><em class="property"> = 100</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_NS_URI_RELATIVE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_NS_URI_RELATIVE">
+<span class="sig-name descname"><span class="pre">WAR_NS_URI_RELATIVE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">100</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_NS_URI_RELATIVE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_SPACE_VALUE">
-<code class="sig-name descname">WAR_SPACE_VALUE</code><em class="property"> = 102</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_SPACE_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_SPACE_VALUE">
+<span class="sig-name descname"><span class="pre">WAR_SPACE_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">102</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_SPACE_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_UNDECLARED_ENTITY">
-<code class="sig-name descname">WAR_UNDECLARED_ENTITY</code><em class="property"> = 27</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_UNDECLARED_ENTITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_UNDECLARED_ENTITY">
+<span class="sig-name descname"><span class="pre">WAR_UNDECLARED_ENTITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">27</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_UNDECLARED_ENTITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.WAR_UNKNOWN_VERSION">
-<code class="sig-name descname">WAR_UNKNOWN_VERSION</code><em class="property"> = 97</em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_UNKNOWN_VERSION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.WAR_UNKNOWN_VERSION">
+<span class="sig-name descname"><span class="pre">WAR_UNKNOWN_VERSION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">97</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.WAR_UNKNOWN_VERSION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_BUILD_FAILED">
-<code class="sig-name descname">XINCLUDE_BUILD_FAILED</code><em class="property"> = 1609</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_BUILD_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_BUILD_FAILED">
+<span class="sig-name descname"><span class="pre">XINCLUDE_BUILD_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1609</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_BUILD_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_DEPRECATED_NS">
-<code class="sig-name descname">XINCLUDE_DEPRECATED_NS</code><em class="property"> = 1617</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_DEPRECATED_NS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_DEPRECATED_NS">
+<span class="sig-name descname"><span class="pre">XINCLUDE_DEPRECATED_NS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1617</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_DEPRECATED_NS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH">
-<code class="sig-name descname">XINCLUDE_ENTITY_DEF_MISMATCH</code><em class="property"> = 1602</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH">
+<span class="sig-name descname"><span class="pre">XINCLUDE_ENTITY_DEF_MISMATCH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1602</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE">
-<code class="sig-name descname">XINCLUDE_FALLBACKS_IN_INCLUDE</code><em class="property"> = 1615</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE">
+<span class="sig-name descname"><span class="pre">XINCLUDE_FALLBACKS_IN_INCLUDE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1615</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE">
-<code class="sig-name descname">XINCLUDE_FALLBACK_NOT_IN_INCLUDE</code><em class="property"> = 1616</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE">
+<span class="sig-name descname"><span class="pre">XINCLUDE_FALLBACK_NOT_IN_INCLUDE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1616</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_FRAGMENT_ID">
-<code class="sig-name descname">XINCLUDE_FRAGMENT_ID</code><em class="property"> = 1618</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_FRAGMENT_ID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_FRAGMENT_ID">
+<span class="sig-name descname"><span class="pre">XINCLUDE_FRAGMENT_ID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1618</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_FRAGMENT_ID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_HREF_URI">
-<code class="sig-name descname">XINCLUDE_HREF_URI</code><em class="property"> = 1605</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_HREF_URI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_HREF_URI">
+<span class="sig-name descname"><span class="pre">XINCLUDE_HREF_URI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1605</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_HREF_URI" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE">
-<code class="sig-name descname">XINCLUDE_INCLUDE_IN_INCLUDE</code><em class="property"> = 1614</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE">
+<span class="sig-name descname"><span class="pre">XINCLUDE_INCLUDE_IN_INCLUDE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1614</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_INVALID_CHAR">
-<code class="sig-name descname">XINCLUDE_INVALID_CHAR</code><em class="property"> = 1608</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_INVALID_CHAR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_INVALID_CHAR">
+<span class="sig-name descname"><span class="pre">XINCLUDE_INVALID_CHAR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1608</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_INVALID_CHAR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_MULTIPLE_ROOT">
-<code class="sig-name descname">XINCLUDE_MULTIPLE_ROOT</code><em class="property"> = 1611</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_MULTIPLE_ROOT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_MULTIPLE_ROOT">
+<span class="sig-name descname"><span class="pre">XINCLUDE_MULTIPLE_ROOT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1611</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_MULTIPLE_ROOT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_NO_FALLBACK">
-<code class="sig-name descname">XINCLUDE_NO_FALLBACK</code><em class="property"> = 1604</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_NO_FALLBACK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_NO_FALLBACK">
+<span class="sig-name descname"><span class="pre">XINCLUDE_NO_FALLBACK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1604</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_NO_FALLBACK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_NO_HREF">
-<code class="sig-name descname">XINCLUDE_NO_HREF</code><em class="property"> = 1603</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_NO_HREF" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_NO_HREF">
+<span class="sig-name descname"><span class="pre">XINCLUDE_NO_HREF</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1603</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_NO_HREF" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_PARSE_VALUE">
-<code class="sig-name descname">XINCLUDE_PARSE_VALUE</code><em class="property"> = 1601</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_PARSE_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_PARSE_VALUE">
+<span class="sig-name descname"><span class="pre">XINCLUDE_PARSE_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1601</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_PARSE_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_RECURSION">
-<code class="sig-name descname">XINCLUDE_RECURSION</code><em class="property"> = 1600</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_RECURSION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_RECURSION">
+<span class="sig-name descname"><span class="pre">XINCLUDE_RECURSION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1600</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_RECURSION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_TEXT_DOCUMENT">
-<code class="sig-name descname">XINCLUDE_TEXT_DOCUMENT</code><em class="property"> = 1607</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_TEXT_DOCUMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_TEXT_DOCUMENT">
+<span class="sig-name descname"><span class="pre">XINCLUDE_TEXT_DOCUMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1607</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_TEXT_DOCUMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_TEXT_FRAGMENT">
-<code class="sig-name descname">XINCLUDE_TEXT_FRAGMENT</code><em class="property"> = 1606</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_TEXT_FRAGMENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_TEXT_FRAGMENT">
+<span class="sig-name descname"><span class="pre">XINCLUDE_TEXT_FRAGMENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1606</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_TEXT_FRAGMENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_UNKNOWN_ENCODING">
-<code class="sig-name descname">XINCLUDE_UNKNOWN_ENCODING</code><em class="property"> = 1610</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_UNKNOWN_ENCODING" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_UNKNOWN_ENCODING">
+<span class="sig-name descname"><span class="pre">XINCLUDE_UNKNOWN_ENCODING</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1610</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_UNKNOWN_ENCODING" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_XPTR_FAILED">
-<code class="sig-name descname">XINCLUDE_XPTR_FAILED</code><em class="property"> = 1612</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_XPTR_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_XPTR_FAILED">
+<span class="sig-name descname"><span class="pre">XINCLUDE_XPTR_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1612</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_XPTR_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XINCLUDE_XPTR_RESULT">
-<code class="sig-name descname">XINCLUDE_XPTR_RESULT</code><em class="property"> = 1613</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_XPTR_RESULT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XINCLUDE_XPTR_RESULT">
+<span class="sig-name descname"><span class="pre">XINCLUDE_XPTR_RESULT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1613</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XINCLUDE_XPTR_RESULT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_ENCODING_ERROR">
-<code class="sig-name descname">XPATH_ENCODING_ERROR</code><em class="property"> = 1220</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_ENCODING_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_ENCODING_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_ENCODING_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1220</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_ENCODING_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_EXPRESSION_OK">
-<code class="sig-name descname">XPATH_EXPRESSION_OK</code><em class="property"> = 1200</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_EXPRESSION_OK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_EXPRESSION_OK">
+<span class="sig-name descname"><span class="pre">XPATH_EXPRESSION_OK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1200</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_EXPRESSION_OK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_EXPR_ERROR">
-<code class="sig-name descname">XPATH_EXPR_ERROR</code><em class="property"> = 1207</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_EXPR_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_EXPR_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_EXPR_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1207</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_EXPR_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_ARITY">
-<code class="sig-name descname">XPATH_INVALID_ARITY</code><em class="property"> = 1212</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_ARITY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_ARITY">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_ARITY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1212</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_ARITY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_CHAR_ERROR">
-<code class="sig-name descname">XPATH_INVALID_CHAR_ERROR</code><em class="property"> = 1221</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_CHAR_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_CHAR_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_CHAR_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1221</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_CHAR_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_POSITION">
-<code class="sig-name descname">XPATH_INVALID_CTXT_POSITION</code><em class="property"> = 1214</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_POSITION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_POSITION">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_CTXT_POSITION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1214</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_POSITION" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_SIZE">
-<code class="sig-name descname">XPATH_INVALID_CTXT_SIZE</code><em class="property"> = 1213</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_SIZE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_SIZE">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_CTXT_SIZE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1213</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_SIZE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_OPERAND">
-<code class="sig-name descname">XPATH_INVALID_OPERAND</code><em class="property"> = 1210</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_OPERAND" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_OPERAND">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_OPERAND</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1210</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_OPERAND" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_PREDICATE_ERROR">
-<code class="sig-name descname">XPATH_INVALID_PREDICATE_ERROR</code><em class="property"> = 1206</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_PREDICATE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_PREDICATE_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_PREDICATE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1206</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_PREDICATE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_INVALID_TYPE">
-<code class="sig-name descname">XPATH_INVALID_TYPE</code><em class="property"> = 1211</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_INVALID_TYPE">
+<span class="sig-name descname"><span class="pre">XPATH_INVALID_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1211</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_INVALID_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_MEMORY_ERROR">
-<code class="sig-name descname">XPATH_MEMORY_ERROR</code><em class="property"> = 1215</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_MEMORY_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_MEMORY_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_MEMORY_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1215</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_MEMORY_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_NUMBER_ERROR">
-<code class="sig-name descname">XPATH_NUMBER_ERROR</code><em class="property"> = 1201</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_NUMBER_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_NUMBER_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_NUMBER_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1201</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_NUMBER_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_START_LITERAL_ERROR">
-<code class="sig-name descname">XPATH_START_LITERAL_ERROR</code><em class="property"> = 1203</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_START_LITERAL_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_START_LITERAL_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_START_LITERAL_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1203</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_START_LITERAL_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_UNCLOSED_ERROR">
-<code class="sig-name descname">XPATH_UNCLOSED_ERROR</code><em class="property"> = 1208</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNCLOSED_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_UNCLOSED_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_UNCLOSED_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1208</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNCLOSED_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_UNDEF_PREFIX_ERROR">
-<code class="sig-name descname">XPATH_UNDEF_PREFIX_ERROR</code><em class="property"> = 1219</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNDEF_PREFIX_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_UNDEF_PREFIX_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_UNDEF_PREFIX_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1219</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNDEF_PREFIX_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR">
-<code class="sig-name descname">XPATH_UNDEF_VARIABLE_ERROR</code><em class="property"> = 1205</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_UNDEF_VARIABLE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1205</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR">
-<code class="sig-name descname">XPATH_UNFINISHED_LITERAL_ERROR</code><em class="property"> = 1202</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_UNFINISHED_LITERAL_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1202</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR">
-<code class="sig-name descname">XPATH_UNKNOWN_FUNC_ERROR</code><em class="property"> = 1209</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_UNKNOWN_FUNC_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1209</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPATH_VARIABLE_REF_ERROR">
-<code class="sig-name descname">XPATH_VARIABLE_REF_ERROR</code><em class="property"> = 1204</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_VARIABLE_REF_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPATH_VARIABLE_REF_ERROR">
+<span class="sig-name descname"><span class="pre">XPATH_VARIABLE_REF_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1204</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPATH_VARIABLE_REF_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_CHILDSEQ_START">
-<code class="sig-name descname">XPTR_CHILDSEQ_START</code><em class="property"> = 1901</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_CHILDSEQ_START" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_CHILDSEQ_START">
+<span class="sig-name descname"><span class="pre">XPTR_CHILDSEQ_START</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1901</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_CHILDSEQ_START" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_EVAL_FAILED">
-<code class="sig-name descname">XPTR_EVAL_FAILED</code><em class="property"> = 1902</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_EVAL_FAILED" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_EVAL_FAILED">
+<span class="sig-name descname"><span class="pre">XPTR_EVAL_FAILED</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1902</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_EVAL_FAILED" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_EXTRA_OBJECTS">
-<code class="sig-name descname">XPTR_EXTRA_OBJECTS</code><em class="property"> = 1903</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_EXTRA_OBJECTS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_EXTRA_OBJECTS">
+<span class="sig-name descname"><span class="pre">XPTR_EXTRA_OBJECTS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1903</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_EXTRA_OBJECTS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_RESOURCE_ERROR">
-<code class="sig-name descname">XPTR_RESOURCE_ERROR</code><em class="property"> = 1217</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_RESOURCE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_RESOURCE_ERROR">
+<span class="sig-name descname"><span class="pre">XPTR_RESOURCE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1217</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_RESOURCE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_SUB_RESOURCE_ERROR">
-<code class="sig-name descname">XPTR_SUB_RESOURCE_ERROR</code><em class="property"> = 1218</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_SUB_RESOURCE_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_SUB_RESOURCE_ERROR">
+<span class="sig-name descname"><span class="pre">XPTR_SUB_RESOURCE_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1218</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_SUB_RESOURCE_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_SYNTAX_ERROR">
-<code class="sig-name descname">XPTR_SYNTAX_ERROR</code><em class="property"> = 1216</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_SYNTAX_ERROR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_SYNTAX_ERROR">
+<span class="sig-name descname"><span class="pre">XPTR_SYNTAX_ERROR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1216</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_SYNTAX_ERROR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes.XPTR_UNKNOWN_SCHEME">
-<code class="sig-name descname">XPTR_UNKNOWN_SCHEME</code><em class="property"> = 1900</em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_UNKNOWN_SCHEME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes.XPTR_UNKNOWN_SCHEME">
+<span class="sig-name descname"><span class="pre">XPTR_UNKNOWN_SCHEME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1900</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes.XPTR_UNKNOWN_SCHEME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.ErrorTypes._names">
-<code class="sig-name descname">_names</code><em class="property"> = {0: 'ERR_OK', 1: 'ERR_INTERNAL_ERROR', 2: 'ERR_NO_MEMORY', 3: 'ERR_DOCUMENT_START', 4: 'ERR_DOCUMENT_EMPTY', 5: 'ERR_DOCUMENT_END', 6: 'ERR_INVALID_HEX_CHARREF', 7: 'ERR_INVALID_DEC_CHARREF', 8: 'ERR_INVALID_CHARREF', 9: 'ERR_INVALID_CHAR', 10: 'ERR_CHARREF_AT_EOF', 11: 'ERR_CHARREF_IN_PROLOG', 12: 'ERR_CHARREF_IN_EPILOG', 13: 'ERR_CHARREF_IN_DTD', 14: 'ERR_ENTITYREF_AT_EOF', 15: 'ERR_ENTITYREF_IN_PROLOG', 16: 'ERR_ENTITYREF_IN_EPILOG', 17: 'ERR_ENTITYREF_IN_DTD', 18: 'ERR_PEREF_AT_EOF', 19: 'ERR_PEREF_IN_PROLOG', 20: 'ERR_PEREF_IN_EPILOG', 21: 'ERR_PEREF_IN_INT_SUBSET', 22: 'ERR_ENTITYREF_NO_NAME', 23: 'ERR_ENTITYREF_SEMICOL_MISSING', 24: 'ERR_PEREF_NO_NAME', 25: 'ERR_PEREF_SEMICOL_MISSING', 26: 'ERR_UNDECLARED_ENTITY', 27: 'WAR_UNDECLARED_ENTITY', 28: 'ERR_UNPARSED_ENTITY', 29: 'ERR_ENTITY_IS_EXTERNAL', 30: 'ERR_ENTITY_IS_PARAMETER', 31: 'ERR_UNKNOWN_ENCODING', 32: 'ERR_UNSUPPORTED_ENCODING', 33: 'ERR_STRING_NOT_STARTED', 34: 'ERR_STRING_NOT_CLOSED', 35: 'ERR_NS_DECL_ERROR', 36: 'ERR_ENTITY_NOT_STARTED', 37: 'ERR_ENTITY_NOT_FINISHED', 38: 'ERR_LT_IN_ATTRIBUTE', 39: 'ERR_ATTRIBUTE_NOT_STARTED', 40: 'ERR_ATTRIBUTE_NOT_FINISHED', 41: 'ERR_ATTRIBUTE_WITHOUT_VALUE', 42: 'ERR_ATTRIBUTE_REDEFINED', 43: 'ERR_LITERAL_NOT_STARTED', 44: 'ERR_LITERAL_NOT_FINISHED', 45: 'ERR_COMMENT_NOT_FINISHED', 46: 'ERR_PI_NOT_STARTED', 47: 'ERR_PI_NOT_FINISHED', 48: 'ERR_NOTATION_NOT_STARTED', 49: 'ERR_NOTATION_NOT_FINISHED', 50: 'ERR_ATTLIST_NOT_STARTED', 51: 'ERR_ATTLIST_NOT_FINISHED', 52: 'ERR_MIXED_NOT_STARTED', 53: 'ERR_MIXED_NOT_FINISHED', 54: 'ERR_ELEMCONTENT_NOT_STARTED', 55: 'ERR_ELEMCONTENT_NOT_FINISHED', 56: 'ERR_XMLDECL_NOT_STARTED', 57: 'ERR_XMLDECL_NOT_FINISHED', 58: 'ERR_CONDSEC_NOT_STARTED', 59: 'ERR_CONDSEC_NOT_FINISHED', 60: 'ERR_EXT_SUBSET_NOT_FINISHED', 61: 'ERR_DOCTYPE_NOT_FINISHED', 62: 'ERR_MISPLACED_CDATA_END', 63: 'ERR_CDATA_NOT_FINISHED', 64: 'ERR_RESERVED_XML_NAME', 65: 'ERR_SPACE_REQUIRED', 66: 'ERR_SEPARATOR_REQUIRED', 67: 'ERR_NMTOKEN_REQUIRED', 68: 'ERR_NAME_REQUIRED', 69: 'ERR_PCDATA_REQUIRED', 70: 'ERR_URI_REQUIRED', 71: 'ERR_PUBID_REQUIRED', 72: 'ERR_LT_REQUIRED', 73: 'ERR_GT_REQUIRED', 74: 'ERR_LTSLASH_REQUIRED', 75: 'ERR_EQUAL_REQUIRED', 76: 'ERR_TAG_NAME_MISMATCH', 77: 'ERR_TAG_NOT_FINISHED', 78: 'ERR_STANDALONE_VALUE', 79: 'ERR_ENCODING_NAME', 80: 'ERR_HYPHEN_IN_COMMENT', 81: 'ERR_INVALID_ENCODING', 82: 'ERR_EXT_ENTITY_STANDALONE', 83: 'ERR_CONDSEC_INVALID', 84: 'ERR_VALUE_REQUIRED', 85: 'ERR_NOT_WELL_BALANCED', 86: 'ERR_EXTRA_CONTENT', 87: 'ERR_ENTITY_CHAR_ERROR', 88: 'ERR_ENTITY_PE_INTERNAL', 89: 'ERR_ENTITY_LOOP', 90: 'ERR_ENTITY_BOUNDARY', 91: 'ERR_INVALID_URI', 92: 'ERR_URI_FRAGMENT', 93: 'WAR_CATALOG_PI', 94: 'ERR_NO_DTD', 95: 'ERR_CONDSEC_INVALID_KEYWORD', 96: 'ERR_VERSION_MISSING', 97: 'WAR_UNKNOWN_VERSION', 98: 'WAR_LANG_VALUE', 99: 'WAR_NS_URI', 100: 'WAR_NS_URI_RELATIVE', 101: 'ERR_MISSING_ENCODING', 102: 'WAR_SPACE_VALUE', 103: 'ERR_NOT_STANDALONE', 104: 'ERR_ENTITY_PROCESSING', 105: 'ERR_NOTATION_PROCESSING', 106: 'WAR_NS_COLUMN', 107: 'WAR_ENTITY_REDEFINED', 108: 'ERR_UNKNOWN_VERSION', 109: 'ERR_VERSION_MISMATCH', 110: 'ERR_NAME_TOO_LONG', 111: 'ERR_USER_STOP', 200: 'NS_ERR_XML_NAMESPACE', 201: 'NS_ERR_UNDEFINED_NAMESPACE', 202: 'NS_ERR_QNAME', 203: 'NS_ERR_ATTRIBUTE_REDEFINED', 204: 'NS_ERR_EMPTY', 205: 'NS_ERR_COLON', 500: 'DTD_ATTRIBUTE_DEFAULT', 501: 'DTD_ATTRIBUTE_REDEFINED', 502: 'DTD_ATTRIBUTE_VALUE', 503: 'DTD_CONTENT_ERROR', 504: 'DTD_CONTENT_MODEL', 505: 'DTD_CONTENT_NOT_DETERMINIST', 506: 'DTD_DIFFERENT_PREFIX', 507: 'DTD_ELEM_DEFAULT_NAMESPACE', 508: 'DTD_ELEM_NAMESPACE', 509: 'DTD_ELEM_REDEFINED', 510: 'DTD_EMPTY_NOTATION', 511: 'DTD_ENTITY_TYPE', 512: 'DTD_ID_FIXED', 513: 'DTD_ID_REDEFINED', 514: 'DTD_ID_SUBSET', 515: 'DTD_INVALID_CHILD', 516: 'DTD_INVALID_DEFAULT', 517: 'DTD_LOAD_ERROR', 518: 'DTD_MISSING_ATTRIBUTE', 519: 'DTD_MIXED_CORRUPT', 520: 'DTD_MULTIPLE_ID', 521: 'DTD_NO_DOC', 522: 'DTD_NO_DTD', 523: 'DTD_NO_ELEM_NAME', 524: 'DTD_NO_PREFIX', 525: 'DTD_NO_ROOT', 526: 'DTD_NOTATION_REDEFINED', 527: 'DTD_NOTATION_VALUE', 528: 'DTD_NOT_EMPTY', 529: 'DTD_NOT_PCDATA', 530: 'DTD_NOT_STANDALONE', 531: 'DTD_ROOT_NAME', 532: 'DTD_STANDALONE_WHITE_SPACE', 533: 'DTD_UNKNOWN_ATTRIBUTE', 534: 'DTD_UNKNOWN_ELEM', 535: 'DTD_UNKNOWN_ENTITY', 536: 'DTD_UNKNOWN_ID', 537: 'DTD_UNKNOWN_NOTATION', 538: 'DTD_STANDALONE_DEFAULTED', 539: 'DTD_XMLID_VALUE', 540: 'DTD_XMLID_TYPE', 541: 'DTD_DUP_TOKEN', 800: 'HTML_STRUCURE_ERROR', 801: 'HTML_UNKNOWN_TAG', 1000: 'RNGP_ANYNAME_ATTR_ANCESTOR', 1001: 'RNGP_ATTR_CONFLICT', 1002: 'RNGP_ATTRIBUTE_CHILDREN', 1003: 'RNGP_ATTRIBUTE_CONTENT', 1004: 'RNGP_ATTRIBUTE_EMPTY', 1005: 'RNGP_ATTRIBUTE_NOOP', 1006: 'RNGP_CHOICE_CONTENT', 1007: 'RNGP_CHOICE_EMPTY', 1008: 'RNGP_CREATE_FAILURE', 1009: 'RNGP_DATA_CONTENT', 1010: 'RNGP_DEF_CHOICE_AND_INTERLEAVE', 1011: 'RNGP_DEFINE_CREATE_FAILED', 1012: 'RNGP_DEFINE_EMPTY', 1013: 'RNGP_DEFINE_MISSING', 1014: 'RNGP_DEFINE_NAME_MISSING', 1015: 'RNGP_ELEM_CONTENT_EMPTY', 1016: 'RNGP_ELEM_CONTENT_ERROR', 1017: 'RNGP_ELEMENT_EMPTY', 1018: 'RNGP_ELEMENT_CONTENT', 1019: 'RNGP_ELEMENT_NAME', 1020: 'RNGP_ELEMENT_NO_CONTENT', 1021: 'RNGP_ELEM_TEXT_CONFLICT', 1022: 'RNGP_EMPTY', 1023: 'RNGP_EMPTY_CONSTRUCT', 1024: 'RNGP_EMPTY_CONTENT', 1025: 'RNGP_EMPTY_NOT_EMPTY', 1026: 'RNGP_ERROR_TYPE_LIB', 1027: 'RNGP_EXCEPT_EMPTY', 1028: 'RNGP_EXCEPT_MISSING', 1029: 'RNGP_EXCEPT_MULTIPLE', 1030: 'RNGP_EXCEPT_NO_CONTENT', 1031: 'RNGP_EXTERNALREF_EMTPY', 1032: 'RNGP_EXTERNAL_REF_FAILURE', 1033: 'RNGP_EXTERNALREF_RECURSE', 1034: 'RNGP_FORBIDDEN_ATTRIBUTE', 1035: 'RNGP_FOREIGN_ELEMENT', 1036: 'RNGP_GRAMMAR_CONTENT', 1037: 'RNGP_GRAMMAR_EMPTY', 1038: 'RNGP_GRAMMAR_MISSING', 1039: 'RNGP_GRAMMAR_NO_START', 1040: 'RNGP_GROUP_ATTR_CONFLICT', 1041: 'RNGP_HREF_ERROR', 1042: 'RNGP_INCLUDE_EMPTY', 1043: 'RNGP_INCLUDE_FAILURE', 1044: 'RNGP_INCLUDE_RECURSE', 1045: 'RNGP_INTERLEAVE_ADD', 1046: 'RNGP_INTERLEAVE_CREATE_FAILED', 1047: 'RNGP_INTERLEAVE_EMPTY', 1048: 'RNGP_INTERLEAVE_NO_CONTENT', 1049: 'RNGP_INVALID_DEFINE_NAME', 1050: 'RNGP_INVALID_URI', 1051: 'RNGP_INVALID_VALUE', 1052: 'RNGP_MISSING_HREF', 1053: 'RNGP_NAME_MISSING', 1054: 'RNGP_NEED_COMBINE', 1055: 'RNGP_NOTALLOWED_NOT_EMPTY', 1056: 'RNGP_NSNAME_ATTR_ANCESTOR', 1057: 'RNGP_NSNAME_NO_NS', 1058: 'RNGP_PARAM_FORBIDDEN', 1059: 'RNGP_PARAM_NAME_MISSING', 1060: 'RNGP_PARENTREF_CREATE_FAILED', 1061: 'RNGP_PARENTREF_NAME_INVALID', 1062: 'RNGP_PARENTREF_NO_NAME', 1063: 'RNGP_PARENTREF_NO_PARENT', 1064: 'RNGP_PARENTREF_NOT_EMPTY', 1065: 'RNGP_PARSE_ERROR', 1066: 'RNGP_PAT_ANYNAME_EXCEPT_ANYNAME', 1067: 'RNGP_PAT_ATTR_ATTR', 1068: 'RNGP_PAT_ATTR_ELEM', 1069: 'RNGP_PAT_DATA_EXCEPT_ATTR', 1070: 'RNGP_PAT_DATA_EXCEPT_ELEM', 1071: 'RNGP_PAT_DATA_EXCEPT_EMPTY', 1072: 'RNGP_PAT_DATA_EXCEPT_GROUP', 1073: 'RNGP_PAT_DATA_EXCEPT_INTERLEAVE', 1074: 'RNGP_PAT_DATA_EXCEPT_LIST', 1075: 'RNGP_PAT_DATA_EXCEPT_ONEMORE', 1076: 'RNGP_PAT_DATA_EXCEPT_REF', 1077: 'RNGP_PAT_DATA_EXCEPT_TEXT', 1078: 'RNGP_PAT_LIST_ATTR', 1079: 'RNGP_PAT_LIST_ELEM', 1080: 'RNGP_PAT_LIST_INTERLEAVE', 1081: 'RNGP_PAT_LIST_LIST', 1082: 'RNGP_PAT_LIST_REF', 1083: 'RNGP_PAT_LIST_TEXT', 1084: 'RNGP_PAT_NSNAME_EXCEPT_ANYNAME', 1085: 'RNGP_PAT_NSNAME_EXCEPT_NSNAME', 1086: 'RNGP_PAT_ONEMORE_GROUP_ATTR', 1087: 'RNGP_PAT_ONEMORE_INTERLEAVE_ATTR', 1088: 'RNGP_PAT_START_ATTR', 1089: 'RNGP_PAT_START_DATA', 1090: 'RNGP_PAT_START_EMPTY', 1091: 'RNGP_PAT_START_GROUP', 1092: 'RNGP_PAT_START_INTERLEAVE', 1093: 'RNGP_PAT_START_LIST', 1094: 'RNGP_PAT_START_ONEMORE', 1095: 'RNGP_PAT_START_TEXT', 1096: 'RNGP_PAT_START_VALUE', 1097: 'RNGP_PREFIX_UNDEFINED', 1098: 'RNGP_REF_CREATE_FAILED', 1099: 'RNGP_REF_CYCLE', 1100: 'RNGP_REF_NAME_INVALID', 1101: 'RNGP_REF_NO_DEF', 1102: 'RNGP_REF_NO_NAME', 1103: 'RNGP_REF_NOT_EMPTY', 1104: 'RNGP_START_CHOICE_AND_INTERLEAVE', 1105: 'RNGP_START_CONTENT', 1106: 'RNGP_START_EMPTY', 1107: 'RNGP_START_MISSING', 1108: 'RNGP_TEXT_EXPECTED', 1109: 'RNGP_TEXT_HAS_CHILD', 1110: 'RNGP_TYPE_MISSING', 1111: 'RNGP_TYPE_NOT_FOUND', 1112: 'RNGP_TYPE_VALUE', 1113: 'RNGP_UNKNOWN_ATTRIBUTE', 1114: 'RNGP_UNKNOWN_COMBINE', 1115: 'RNGP_UNKNOWN_CONSTRUCT', 1116: 'RNGP_UNKNOWN_TYPE_LIB', 1117: 'RNGP_URI_FRAGMENT', 1118: 'RNGP_URI_NOT_ABSOLUTE', 1119: 'RNGP_VALUE_EMPTY', 1120: 'RNGP_VALUE_NO_CONTENT', 1121: 'RNGP_XMLNS_NAME', 1122: 'RNGP_XML_NS', 1200: 'XPATH_EXPRESSION_OK', 1201: 'XPATH_NUMBER_ERROR', 1202: 'XPATH_UNFINISHED_LITERAL_ERROR', 1203: 'XPATH_START_LITERAL_ERROR', 1204: 'XPATH_VARIABLE_REF_ERROR', 1205: 'XPATH_UNDEF_VARIABLE_ERROR', 1206: 'XPATH_INVALID_PREDICATE_ERROR', 1207: 'XPATH_EXPR_ERROR', 1208: 'XPATH_UNCLOSED_ERROR', 1209: 'XPATH_UNKNOWN_FUNC_ERROR', 1210: 'XPATH_INVALID_OPERAND', 1211: 'XPATH_INVALID_TYPE', 1212: 'XPATH_INVALID_ARITY', 1213: 'XPATH_INVALID_CTXT_SIZE', 1214: 'XPATH_INVALID_CTXT_POSITION', 1215: 'XPATH_MEMORY_ERROR', 1216: 'XPTR_SYNTAX_ERROR', 1217: 'XPTR_RESOURCE_ERROR', 1218: 'XPTR_SUB_RESOURCE_ERROR', 1219: 'XPATH_UNDEF_PREFIX_ERROR', 1220: 'XPATH_ENCODING_ERROR', 1221: 'XPATH_INVALID_CHAR_ERROR', 1300: 'TREE_INVALID_HEX', 1301: 'TREE_INVALID_DEC', 1302: 'TREE_UNTERMINATED_ENTITY', 1303: 'TREE_NOT_UTF8', 1400: 'SAVE_NOT_UTF8', 1401: 'SAVE_CHAR_INVALID', 1402: 'SAVE_NO_DOCTYPE', 1403: 'SAVE_UNKNOWN_ENCODING', 1450: 'REGEXP_COMPILE_ERROR', 1500: 'IO_UNKNOWN', 1501: 'IO_EACCES', 1502: 'IO_EAGAIN', 1503: 'IO_EBADF', 1504: 'IO_EBADMSG', 1505: 'IO_EBUSY', 1506: 'IO_ECANCELED', 1507: 'IO_ECHILD', 1508: 'IO_EDEADLK', 1509: 'IO_EDOM', 1510: 'IO_EEXIST', 1511: 'IO_EFAULT', 1512: 'IO_EFBIG', 1513: 'IO_EINPROGRESS', 1514: 'IO_EINTR', 1515: 'IO_EINVAL', 1516: 'IO_EIO', 1517: 'IO_EISDIR', 1518: 'IO_EMFILE', 1519: 'IO_EMLINK', 1520: 'IO_EMSGSIZE', 1521: 'IO_ENAMETOOLONG', 1522: 'IO_ENFILE', 1523: 'IO_ENODEV', 1524: 'IO_ENOENT', 1525: 'IO_ENOEXEC', 1526: 'IO_ENOLCK', 1527: 'IO_ENOMEM', 1528: 'IO_ENOSPC', 1529: 'IO_ENOSYS', 1530: 'IO_ENOTDIR', 1531: 'IO_ENOTEMPTY', 1532: 'IO_ENOTSUP', 1533: 'IO_ENOTTY', 1534: 'IO_ENXIO', 1535: 'IO_EPERM', 1536: 'IO_EPIPE', 1537: 'IO_ERANGE', 1538: 'IO_EROFS', 1539: 'IO_ESPIPE', 1540: 'IO_ESRCH', 1541: 'IO_ETIMEDOUT', 1542: 'IO_EXDEV', 1543: 'IO_NETWORK_ATTEMPT', 1544: 'IO_ENCODER', 1545: 'IO_FLUSH', 1546: 'IO_WRITE', 1547: 'IO_NO_INPUT', 1548: 'IO_BUFFER_FULL', 1549: 'IO_LOAD_ERROR', 1550: 'IO_ENOTSOCK', 1551: 'IO_EISCONN', 1552: 'IO_ECONNREFUSED', 1553: 'IO_ENETUNREACH', 1554: 'IO_EADDRINUSE', 1555: 'IO_EALREADY', 1556: 'IO_EAFNOSUPPORT', 1600: 'XINCLUDE_RECURSION', 1601: 'XINCLUDE_PARSE_VALUE', 1602: 'XINCLUDE_ENTITY_DEF_MISMATCH', 1603: 'XINCLUDE_NO_HREF', 1604: 'XINCLUDE_NO_FALLBACK', 1605: 'XINCLUDE_HREF_URI', 1606: 'XINCLUDE_TEXT_FRAGMENT', 1607: 'XINCLUDE_TEXT_DOCUMENT', 1608: 'XINCLUDE_INVALID_CHAR', 1609: 'XINCLUDE_BUILD_FAILED', 1610: 'XINCLUDE_UNKNOWN_ENCODING', 1611: 'XINCLUDE_MULTIPLE_ROOT', 1612: 'XINCLUDE_XPTR_FAILED', 1613: 'XINCLUDE_XPTR_RESULT', 1614: 'XINCLUDE_INCLUDE_IN_INCLUDE', 1615: 'XINCLUDE_FALLBACKS_IN_INCLUDE', 1616: 'XINCLUDE_FALLBACK_NOT_IN_INCLUDE', 1617: 'XINCLUDE_DEPRECATED_NS', 1618: 'XINCLUDE_FRAGMENT_ID', 1650: 'CATALOG_MISSING_ATTR', 1651: 'CATALOG_ENTRY_BROKEN', 1652: 'CATALOG_PREFER_VALUE', 1653: 'CATALOG_NOT_CATALOG', 1654: 'CATALOG_RECURSION', 1700: 'SCHEMAP_PREFIX_UNDEFINED', 1701: 'SCHEMAP_ATTRFORMDEFAULT_VALUE', 1702: 'SCHEMAP_ATTRGRP_NONAME_NOREF', 1703: 'SCHEMAP_ATTR_NONAME_NOREF', 1704: 'SCHEMAP_COMPLEXTYPE_NONAME_NOREF', 1705: 'SCHEMAP_ELEMFORMDEFAULT_VALUE', 1706: 'SCHEMAP_ELEM_NONAME_NOREF', 1707: 'SCHEMAP_EXTENSION_NO_BASE', 1708: 'SCHEMAP_FACET_NO_VALUE', 1709: 'SCHEMAP_FAILED_BUILD_IMPORT', 1710: 'SCHEMAP_GROUP_NONAME_NOREF', 1711: 'SCHEMAP_IMPORT_NAMESPACE_NOT_URI', 1712: 'SCHEMAP_IMPORT_REDEFINE_NSNAME', 1713: 'SCHEMAP_IMPORT_SCHEMA_NOT_URI', 1714: 'SCHEMAP_INVALID_BOOLEAN', 1715: 'SCHEMAP_INVALID_ENUM', 1716: 'SCHEMAP_INVALID_FACET', 1717: 'SCHEMAP_INVALID_FACET_VALUE', 1718: 'SCHEMAP_INVALID_MAXOCCURS', 1719: 'SCHEMAP_INVALID_MINOCCURS', 1720: 'SCHEMAP_INVALID_REF_AND_SUBTYPE', 1721: 'SCHEMAP_INVALID_WHITE_SPACE', 1722: 'SCHEMAP_NOATTR_NOREF', 1723: 'SCHEMAP_NOTATION_NO_NAME', 1724: 'SCHEMAP_NOTYPE_NOREF', 1725: 'SCHEMAP_REF_AND_SUBTYPE', 1726: 'SCHEMAP_RESTRICTION_NONAME_NOREF', 1727: 'SCHEMAP_SIMPLETYPE_NONAME', 1728: 'SCHEMAP_TYPE_AND_SUBTYPE', 1729: 'SCHEMAP_UNKNOWN_ALL_CHILD', 1730: 'SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD', 1731: 'SCHEMAP_UNKNOWN_ATTR_CHILD', 1732: 'SCHEMAP_UNKNOWN_ATTRGRP_CHILD', 1733: 'SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP', 1734: 'SCHEMAP_UNKNOWN_BASE_TYPE', 1735: 'SCHEMAP_UNKNOWN_CHOICE_CHILD', 1736: 'SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD', 1737: 'SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD', 1738: 'SCHEMAP_UNKNOWN_ELEM_CHILD', 1739: 'SCHEMAP_UNKNOWN_EXTENSION_CHILD', 1740: 'SCHEMAP_UNKNOWN_FACET_CHILD', 1741: 'SCHEMAP_UNKNOWN_FACET_TYPE', 1742: 'SCHEMAP_UNKNOWN_GROUP_CHILD', 1743: 'SCHEMAP_UNKNOWN_IMPORT_CHILD', 1744: 'SCHEMAP_UNKNOWN_LIST_CHILD', 1745: 'SCHEMAP_UNKNOWN_NOTATION_CHILD', 1746: 'SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD', 1747: 'SCHEMAP_UNKNOWN_REF', 1748: 'SCHEMAP_UNKNOWN_RESTRICTION_CHILD', 1749: 'SCHEMAP_UNKNOWN_SCHEMAS_CHILD', 1750: 'SCHEMAP_UNKNOWN_SEQUENCE_CHILD', 1751: 'SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD', 1752: 'SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD', 1753: 'SCHEMAP_UNKNOWN_TYPE', 1754: 'SCHEMAP_UNKNOWN_UNION_CHILD', 1755: 'SCHEMAP_ELEM_DEFAULT_FIXED', 1756: 'SCHEMAP_REGEXP_INVALID', 1757: 'SCHEMAP_FAILED_LOAD', 1758: 'SCHEMAP_NOTHING_TO_PARSE', 1759: 'SCHEMAP_NOROOT', 1760: 'SCHEMAP_REDEFINED_GROUP', 1761: 'SCHEMAP_REDEFINED_TYPE', 1762: 'SCHEMAP_REDEFINED_ELEMENT', 1763: 'SCHEMAP_REDEFINED_ATTRGROUP', 1764: 'SCHEMAP_REDEFINED_ATTR', 1765: 'SCHEMAP_REDEFINED_NOTATION', 1766: 'SCHEMAP_FAILED_PARSE', 1767: 'SCHEMAP_UNKNOWN_PREFIX', 1768: 'SCHEMAP_DEF_AND_PREFIX', 1769: 'SCHEMAP_UNKNOWN_INCLUDE_CHILD', 1770: 'SCHEMAP_INCLUDE_SCHEMA_NOT_URI', 1771: 'SCHEMAP_INCLUDE_SCHEMA_NO_URI', 1772: 'SCHEMAP_NOT_SCHEMA', 1773: 'SCHEMAP_UNKNOWN_MEMBER_TYPE', 1774: 'SCHEMAP_INVALID_ATTR_USE', 1775: 'SCHEMAP_RECURSIVE', 1776: 'SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE', 1777: 'SCHEMAP_INVALID_ATTR_COMBINATION', 1778: 'SCHEMAP_INVALID_ATTR_INLINE_COMBINATION', 1779: 'SCHEMAP_MISSING_SIMPLETYPE_CHILD', 1780: 'SCHEMAP_INVALID_ATTR_NAME', 1781: 'SCHEMAP_REF_AND_CONTENT', 1782: 'SCHEMAP_CT_PROPS_CORRECT_1', 1783: 'SCHEMAP_CT_PROPS_CORRECT_2', 1784: 'SCHEMAP_CT_PROPS_CORRECT_3', 1785: 'SCHEMAP_CT_PROPS_CORRECT_4', 1786: 'SCHEMAP_CT_PROPS_CORRECT_5', 1787: 'SCHEMAP_DERIVATION_OK_RESTRICTION_1', 1788: 'SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1', 1789: 'SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2', 1790: 'SCHEMAP_DERIVATION_OK_RESTRICTION_2_2', 1791: 'SCHEMAP_DERIVATION_OK_RESTRICTION_3', 1792: 'SCHEMAP_WILDCARD_INVALID_NS_MEMBER', 1793: 'SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE', 1794: 'SCHEMAP_UNION_NOT_EXPRESSIBLE', 1795: 'SCHEMAP_SRC_IMPORT_3_1', 1796: 'SCHEMAP_SRC_IMPORT_3_2', 1797: 'SCHEMAP_DERIVATION_OK_RESTRICTION_4_1', 1798: 'SCHEMAP_DERIVATION_OK_RESTRICTION_4_2', 1799: 'SCHEMAP_DERIVATION_OK_RESTRICTION_4_3', 1800: 'SCHEMAP_COS_CT_EXTENDS_1_3', 1801: 'SCHEMAV_NOROOT', 1802: 'SCHEMAV_UNDECLAREDELEM', 1803: 'SCHEMAV_NOTTOPLEVEL', 1804: 'SCHEMAV_MISSING', 1805: 'SCHEMAV_WRONGELEM', 1806: 'SCHEMAV_NOTYPE', 1807: 'SCHEMAV_NOROLLBACK', 1808: 'SCHEMAV_ISABSTRACT', 1809: 'SCHEMAV_NOTEMPTY', 1810: 'SCHEMAV_ELEMCONT', 1811: 'SCHEMAV_HAVEDEFAULT', 1812: 'SCHEMAV_NOTNILLABLE', 1813: 'SCHEMAV_EXTRACONTENT', 1814: 'SCHEMAV_INVALIDATTR', 1815: 'SCHEMAV_INVALIDELEM', 1816: 'SCHEMAV_NOTDETERMINIST', 1817: 'SCHEMAV_CONSTRUCT', 1818: 'SCHEMAV_INTERNAL', 1819: 'SCHEMAV_NOTSIMPLE', 1820: 'SCHEMAV_ATTRUNKNOWN', 1821: 'SCHEMAV_ATTRINVALID', 1822: 'SCHEMAV_VALUE', 1823: 'SCHEMAV_FACET', 1824: 'SCHEMAV_CVC_DATATYPE_VALID_1_2_1', 1825: 'SCHEMAV_CVC_DATATYPE_VALID_1_2_2', 1826: 'SCHEMAV_CVC_DATATYPE_VALID_1_2_3', 1827: 'SCHEMAV_CVC_TYPE_3_1_1', 1828: 'SCHEMAV_CVC_TYPE_3_1_2', 1829: 'SCHEMAV_CVC_FACET_VALID', 1830: 'SCHEMAV_CVC_LENGTH_VALID', 1831: 'SCHEMAV_CVC_MINLENGTH_VALID', 1832: 'SCHEMAV_CVC_MAXLENGTH_VALID', 1833: 'SCHEMAV_CVC_MININCLUSIVE_VALID', 1834: 'SCHEMAV_CVC_MAXINCLUSIVE_VALID', 1835: 'SCHEMAV_CVC_MINEXCLUSIVE_VALID', 1836: 'SCHEMAV_CVC_MAXEXCLUSIVE_VALID', 1837: 'SCHEMAV_CVC_TOTALDIGITS_VALID', 1838: 'SCHEMAV_CVC_FRACTIONDIGITS_VALID', 1839: 'SCHEMAV_CVC_PATTERN_VALID', 1840: 'SCHEMAV_CVC_ENUMERATION_VALID', 1841: 'SCHEMAV_CVC_COMPLEX_TYPE_2_1', 1842: 'SCHEMAV_CVC_COMPLEX_TYPE_2_2', 1843: 'SCHEMAV_CVC_COMPLEX_TYPE_2_3', 1844: 'SCHEMAV_CVC_COMPLEX_TYPE_2_4', 1845: 'SCHEMAV_CVC_ELT_1', 1846: 'SCHEMAV_CVC_ELT_2', 1847: 'SCHEMAV_CVC_ELT_3_1', 1848: 'SCHEMAV_CVC_ELT_3_2_1', 1849: 'SCHEMAV_CVC_ELT_3_2_2', 1850: 'SCHEMAV_CVC_ELT_4_1', 1851: 'SCHEMAV_CVC_ELT_4_2', 1852: 'SCHEMAV_CVC_ELT_4_3', 1853: 'SCHEMAV_CVC_ELT_5_1_1', 1854: 'SCHEMAV_CVC_ELT_5_1_2', 1855: 'SCHEMAV_CVC_ELT_5_2_1', 1856: 'SCHEMAV_CVC_ELT_5_2_2_1', 1857: 'SCHEMAV_CVC_ELT_5_2_2_2_1', 1858: 'SCHEMAV_CVC_ELT_5_2_2_2_2', 1859: 'SCHEMAV_CVC_ELT_6', 1860: 'SCHEMAV_CVC_ELT_7', 1861: 'SCHEMAV_CVC_ATTRIBUTE_1', 1862: 'SCHEMAV_CVC_ATTRIBUTE_2', 1863: 'SCHEMAV_CVC_ATTRIBUTE_3', 1864: 'SCHEMAV_CVC_ATTRIBUTE_4', 1865: 'SCHEMAV_CVC_COMPLEX_TYPE_3_1', 1866: 'SCHEMAV_CVC_COMPLEX_TYPE_3_2_1', 1867: 'SCHEMAV_CVC_COMPLEX_TYPE_3_2_2', 1868: 'SCHEMAV_CVC_COMPLEX_TYPE_4', 1869: 'SCHEMAV_CVC_COMPLEX_TYPE_5_1', 1870: 'SCHEMAV_CVC_COMPLEX_TYPE_5_2', 1871: 'SCHEMAV_ELEMENT_CONTENT', 1872: 'SCHEMAV_DOCUMENT_ELEMENT_MISSING', 1873: 'SCHEMAV_CVC_COMPLEX_TYPE_1', 1874: 'SCHEMAV_CVC_AU', 1875: 'SCHEMAV_CVC_TYPE_1', 1876: 'SCHEMAV_CVC_TYPE_2', 1877: 'SCHEMAV_CVC_IDC', 1878: 'SCHEMAV_CVC_WILDCARD', 1879: 'SCHEMAV_MISC', 1900: 'XPTR_UNKNOWN_SCHEME', 1901: 'XPTR_CHILDSEQ_START', 1902: 'XPTR_EVAL_FAILED', 1903: 'XPTR_EXTRA_OBJECTS', 1950: 'C14N_CREATE_CTXT', 1951: 'C14N_REQUIRES_UTF8', 1952: 'C14N_CREATE_STACK', 1953: 'C14N_INVALID_NODE', 1954: 'C14N_UNKNOW_NODE', 1955: 'C14N_RELATIVE_NAMESPACE', 2000: 'FTP_PASV_ANSWER', 2001: 'FTP_EPSV_ANSWER', 2002: 'FTP_ACCNT', 2003: 'FTP_URL_SYNTAX', 2020: 'HTTP_URL_SYNTAX', 2021: 'HTTP_USE_IP', 2022: 'HTTP_UNKNOWN_HOST', 3000: 'SCHEMAP_SRC_SIMPLE_TYPE_1', 3001: 'SCHEMAP_SRC_SIMPLE_TYPE_2', 3002: 'SCHEMAP_SRC_SIMPLE_TYPE_3', 3003: 'SCHEMAP_SRC_SIMPLE_TYPE_4', 3004: 'SCHEMAP_SRC_RESOLVE', 3005: 'SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE', 3006: 'SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE', 3007: 'SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES', 3008: 'SCHEMAP_ST_PROPS_CORRECT_1', 3009: 'SCHEMAP_ST_PROPS_CORRECT_2', 3010: 'SCHEMAP_ST_PROPS_CORRECT_3', 3011: 'SCHEMAP_COS_ST_RESTRICTS_1_1', 3012: 'SCHEMAP_COS_ST_RESTRICTS_1_2', 3013: 'SCHEMAP_COS_ST_RESTRICTS_1_3_1', 3014: 'SCHEMAP_COS_ST_RESTRICTS_1_3_2', 3015: 'SCHEMAP_COS_ST_RESTRICTS_2_1', 3016: 'SCHEMAP_COS_ST_RESTRICTS_2_3_1_1', 3017: 'SCHEMAP_COS_ST_RESTRICTS_2_3_1_2', 3018: 'SCHEMAP_COS_ST_RESTRICTS_2_3_2_1', 3019: 'SCHEMAP_COS_ST_RESTRICTS_2_3_2_2', 3020: 'SCHEMAP_COS_ST_RESTRICTS_2_3_2_3', 3021: 'SCHEMAP_COS_ST_RESTRICTS_2_3_2_4', 3022: 'SCHEMAP_COS_ST_RESTRICTS_2_3_2_5', 3023: 'SCHEMAP_COS_ST_RESTRICTS_3_1', 3024: 'SCHEMAP_COS_ST_RESTRICTS_3_3_1', 3025: 'SCHEMAP_COS_ST_RESTRICTS_3_3_1_2', 3026: 'SCHEMAP_COS_ST_RESTRICTS_3_3_2_2', 3027: 'SCHEMAP_COS_ST_RESTRICTS_3_3_2_1', 3028: 'SCHEMAP_COS_ST_RESTRICTS_3_3_2_3', 3029: 'SCHEMAP_COS_ST_RESTRICTS_3_3_2_4', 3030: 'SCHEMAP_COS_ST_RESTRICTS_3_3_2_5', 3031: 'SCHEMAP_COS_ST_DERIVED_OK_2_1', 3032: 'SCHEMAP_COS_ST_DERIVED_OK_2_2', 3033: 'SCHEMAP_S4S_ELEM_NOT_ALLOWED', 3034: 'SCHEMAP_S4S_ELEM_MISSING', 3035: 'SCHEMAP_S4S_ATTR_NOT_ALLOWED', 3036: 'SCHEMAP_S4S_ATTR_MISSING', 3037: 'SCHEMAP_S4S_ATTR_INVALID_VALUE', 3038: 'SCHEMAP_SRC_ELEMENT_1', 3039: 'SCHEMAP_SRC_ELEMENT_2_1', 3040: 'SCHEMAP_SRC_ELEMENT_2_2', 3041: 'SCHEMAP_SRC_ELEMENT_3', 3042: 'SCHEMAP_P_PROPS_CORRECT_1', 3043: 'SCHEMAP_P_PROPS_CORRECT_2_1', 3044: 'SCHEMAP_P_PROPS_CORRECT_2_2', 3045: 'SCHEMAP_E_PROPS_CORRECT_2', 3046: 'SCHEMAP_E_PROPS_CORRECT_3', 3047: 'SCHEMAP_E_PROPS_CORRECT_4', 3048: 'SCHEMAP_E_PROPS_CORRECT_5', 3049: 'SCHEMAP_E_PROPS_CORRECT_6', 3050: 'SCHEMAP_SRC_INCLUDE', 3051: 'SCHEMAP_SRC_ATTRIBUTE_1', 3052: 'SCHEMAP_SRC_ATTRIBUTE_2', 3053: 'SCHEMAP_SRC_ATTRIBUTE_3_1', 3054: 'SCHEMAP_SRC_ATTRIBUTE_3_2', 3055: 'SCHEMAP_SRC_ATTRIBUTE_4', 3056: 'SCHEMAP_NO_XMLNS', 3057: 'SCHEMAP_NO_XSI', 3058: 'SCHEMAP_COS_VALID_DEFAULT_1', 3059: 'SCHEMAP_COS_VALID_DEFAULT_2_1', 3060: 'SCHEMAP_COS_VALID_DEFAULT_2_2_1', 3061: 'SCHEMAP_COS_VALID_DEFAULT_2_2_2', 3062: 'SCHEMAP_CVC_SIMPLE_TYPE', 3063: 'SCHEMAP_COS_CT_EXTENDS_1_1', 3064: 'SCHEMAP_SRC_IMPORT_1_1', 3065: 'SCHEMAP_SRC_IMPORT_1_2', 3066: 'SCHEMAP_SRC_IMPORT_2', 3067: 'SCHEMAP_SRC_IMPORT_2_1', 3068: 'SCHEMAP_SRC_IMPORT_2_2', 3069: 'SCHEMAP_INTERNAL', 3070: 'SCHEMAP_NOT_DETERMINISTIC', 3071: 'SCHEMAP_SRC_ATTRIBUTE_GROUP_1', 3072: 'SCHEMAP_SRC_ATTRIBUTE_GROUP_2', 3073: 'SCHEMAP_SRC_ATTRIBUTE_GROUP_3', 3074: 'SCHEMAP_MG_PROPS_CORRECT_1', 3075: 'SCHEMAP_MG_PROPS_CORRECT_2', 3076: 'SCHEMAP_SRC_CT_1', 3077: 'SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3', 3078: 'SCHEMAP_AU_PROPS_CORRECT_2', 3079: 'SCHEMAP_A_PROPS_CORRECT_2', 3080: 'SCHEMAP_C_PROPS_CORRECT', 3081: 'SCHEMAP_SRC_REDEFINE', 3082: 'SCHEMAP_SRC_IMPORT', 3083: 'SCHEMAP_WARN_SKIP_SCHEMA', 3084: 'SCHEMAP_WARN_UNLOCATED_SCHEMA', 3085: 'SCHEMAP_WARN_ATTR_REDECL_PROH', 3086: 'SCHEMAP_WARN_ATTR_POINTLESS_PROH', 3087: 'SCHEMAP_AG_PROPS_CORRECT', 3088: 'SCHEMAP_COS_CT_EXTENDS_1_2', 3089: 'SCHEMAP_AU_PROPS_CORRECT', 3090: 'SCHEMAP_A_PROPS_CORRECT_3', 3091: 'SCHEMAP_COS_ALL_LIMITED', 4000: 'SCHEMATRONV_ASSERT', 4001: 'SCHEMATRONV_REPORT', 4900: 'MODULE_OPEN', 4901: 'MODULE_CLOSE', 5000: 'CHECK_FOUND_ELEMENT', 5001: 'CHECK_FOUND_ATTRIBUTE', 5002: 'CHECK_FOUND_TEXT', 5003: 'CHECK_FOUND_CDATA', 5004: 'CHECK_FOUND_ENTITYREF', 5005: 'CHECK_FOUND_ENTITY', 5006: 'CHECK_FOUND_PI', 5007: 'CHECK_FOUND_COMMENT', 5008: 'CHECK_FOUND_DOCTYPE', 5009: 'CHECK_FOUND_FRAGMENT', 5010: 'CHECK_FOUND_NOTATION', 5011: 'CHECK_UNKNOWN_NODE', 5012: 'CHECK_ENTITY_TYPE', 5013: 'CHECK_NO_PARENT', 5014: 'CHECK_NO_DOC', 5015: 'CHECK_NO_NAME', 5016: 'CHECK_NO_ELEM', 5017: 'CHECK_WRONG_DOC', 5018: 'CHECK_NO_PREV', 5019: 'CHECK_WRONG_PREV', 5020: 'CHECK_NO_NEXT', 5021: 'CHECK_WRONG_NEXT', 5022: 'CHECK_NOT_DTD', 5023: 'CHECK_NOT_ATTR', 5024: 'CHECK_NOT_ATTR_DECL', 5025: 'CHECK_NOT_ELEM_DECL', 5026: 'CHECK_NOT_ENTITY_DECL', 5027: 'CHECK_NOT_NS_DECL', 5028: 'CHECK_NO_HREF', 5029: 'CHECK_WRONG_PARENT', 5030: 'CHECK_NS_SCOPE', 5031: 'CHECK_NS_ANCESTOR', 5032: 'CHECK_NOT_UTF8', 5033: 'CHECK_NO_DICT', 5034: 'CHECK_NOT_NCNAME', 5035: 'CHECK_OUTSIDE_DICT', 5036: 'CHECK_WRONG_NAME', 5037: 'CHECK_NAME_NOT_NULL', 6000: 'I18N_NO_NAME', 6001: 'I18N_NO_HANDLER', 6002: 'I18N_EXCESS_HANDLER', 6003: 'I18N_CONV_FAILED', 6004: 'I18N_NO_OUTPUT', 7000: 'BUF_OVERFLOW'}</em><a class="headerlink" href="#lxml.etree.ErrorTypes._names" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ErrorTypes._names">
+<span class="sig-name descname"><span class="pre">_names</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{0:</span> <span class="pre">'ERR_OK',</span> <span class="pre">1:</span> <span class="pre">'ERR_INTERNAL_ERROR',</span> <span class="pre">2:</span> <span class="pre">'ERR_NO_MEMORY',</span> <span class="pre">3:</span> <span class="pre">'ERR_DOCUMENT_START',</span> <span class="pre">4:</span> <span class="pre">'ERR_DOCUMENT_EMPTY',</span> <span class="pre">5:</span> <span class="pre">'ERR_DOCUMENT_END',</span> <span class="pre">6:</span> <span class="pre">'ERR_INVALID_HEX_CHARREF',</span> <span class="pre">7:</span> <span class="pre">'ERR_INVALID_DEC_CHARREF',</span> <span class="pre">8:</span> <span class="pre">'ERR_INVALID_CHARREF',</span> <span class="pre">9:</span> <span class="pre">'ERR_INVALID_CHAR',</span> <span class="pre">10:</span> <span class="pre">'ERR_CHARREF_AT_EOF',</span> <span class="pre">11:</span> <span class="pre">'ERR_CHARREF_IN_PROLOG',</span> <span class="pre">12:</span> <span class="pre">'ERR_CHARREF_IN_EPILOG',</span> <span class="pre">13:</span> <span class="pre">'ERR_CHARREF_IN_DTD',</span> <span class="pre">14:</span> <span class="pre">'ERR_ENTITYREF_AT_EOF',</span> <span class="pre">15:</span> <span class="pre">'ERR_ENTITYREF_IN_PROLOG',</span> <span class="pre">16:</span> <span class="pre">'ERR_ENTITYREF_IN_EPILOG',</span> <span class="pre">17:</span> <span class="pre">'ERR_ENTITYREF_IN_DTD',</span> <span class="pre">18:</span> <span class="pre">'ERR_PEREF_AT_EOF',</span> <span class="pre">19:</span> <span class="pre">'ERR_PEREF_IN_PROLOG',</span> <span class="pre">20:</span> <span class="pre">'ERR_PEREF_IN_EPILOG',</span> <span class="pre">21:</span> <span class="pre">'ERR_PEREF_IN_INT_SUBSET',</span> <span class="pre">22:</span> <span class="pre">'ERR_ENTITYREF_NO_NAME',</span> <span class="pre">23:</span> <span class="pre">'ERR_ENTITYREF_SEMICOL_MISSING',</span> <span class="pre">24:</span> <span class="pre">'ERR_PEREF_NO_NAME',</span> <span class="pre">25:</span> <span class="pre">'ERR_PEREF_SEMICOL_MISSING',</span> <span class="pre">26:</span> <span class="pre">'ERR_UNDECLARED_ENTITY',</span> <span class="pre">27:</span> <span class="pre">'WAR_UNDECLARED_ENTITY',</span> <span class="pre">28:</span> <span class="pre">'ERR_UNPARSED_ENTITY',</span> <span class="pre">29:</span> <span class="pre">'ERR_ENTITY_IS_EXTERNAL',</span> <span class="pre">30:</span> <span class="pre">'ERR_ENTITY_IS_PARAMETER',</span> <span class="pre">31:</span> <span class="pre">'ERR_UNKNOWN_ENCODING',</span> <span class="pre">32:</span> <span class="pre">'ERR_UNSUPPORTED_ENCODING',</span> <span class="pre">33:</span> <span class="pre">'ERR_STRING_NOT_STARTED',</span> <span class="pre">34:</span> <span class="pre">'ERR_STRING_NOT_CLOSED',</span> <span class="pre">35:</span> <span class="pre">'ERR_NS_DECL_ERROR',</span> <span class="pre">36:</span> <span class="pre">'ERR_ENTITY_NOT_STARTED',</span> <span class="pre">37:</span> <span class="pre">'ERR_ENTITY_NOT_FINISHED',</span> <span class="pre">38:</span> <span class="pre">'ERR_LT_IN_ATTRIBUTE',</span> <span class="pre">39:</span> <span class="pre">'ERR_ATTRIBUTE_NOT_STARTED',</span> <span class="pre">40:</span> <span class="pre">'ERR_ATTRIBUTE_NOT_FINISHED',</span> <span class="pre">41:</span> <span class="pre">'ERR_ATTRIBUTE_WITHOUT_VALUE',</span> <span class="pre">42:</span> <span class="pre">'ERR_ATTRIBUTE_REDEFINED',</span> <span class="pre">43:</span> <span class="pre">'ERR_LITERAL_NOT_STARTED',</span> <span class="pre">44:</span> <span class="pre">'ERR_LITERAL_NOT_FINISHED',</span> <span class="pre">45:</span> <span class="pre">'ERR_COMMENT_NOT_FINISHED',</span> <span class="pre">46:</span> <span class="pre">'ERR_PI_NOT_STARTED',</span> <span class="pre">47:</span> <span class="pre">'ERR_PI_NOT_FINISHED',</span> <span class="pre">48:</span> <span class="pre">'ERR_NOTATION_NOT_STARTED',</span> <span class="pre">49:</span> <span class="pre">'ERR_NOTATION_NOT_FINISHED',</span> <span class="pre">50:</span> <span class="pre">'ERR_ATTLIST_NOT_STARTED',</span> <span class="pre">51:</span> <span class="pre">'ERR_ATTLIST_NOT_FINISHED',</span> <span class="pre">52:</span> <span class="pre">'ERR_MIXED_NOT_STARTED',</span> <span class="pre">53:</span> <span class="pre">'ERR_MIXED_NOT_FINISHED',</span> <span class="pre">54:</span> <span class="pre">'ERR_ELEMCONTENT_NOT_STARTED',</span> <span class="pre">55:</span> <span class="pre">'ERR_ELEMCONTENT_NOT_FINISHED',</span> <span class="pre">56:</span> <span class="pre">'ERR_XMLDECL_NOT_STARTED',</span> <span class="pre">57:</span> <span class="pre">'ERR_XMLDECL_NOT_FINISHED',</span> <span class="pre">58:</span> <span class="pre">'ERR_CONDSEC_NOT_STARTED',</span> <span class="pre">59:</span> <span class="pre">'ERR_CONDSEC_NOT_FINISHED',</span> <span class="pre">60:</span> <span class="pre">'ERR_EXT_SUBSET_NOT_FINISHED',</span> <span class="pre">61:</span> <span class="pre">'ERR_DOCTYPE_NOT_FINISHED',</span> <span class="pre">62:</span> <span class="pre">'ERR_MISPLACED_CDATA_END',</span> <span class="pre">63:</span> <span class="pre">'ERR_CDATA_NOT_FINISHED',</span> <span class="pre">64:</span> <span class="pre">'ERR_RESERVED_XML_NAME',</span> <span class="pre">65:</span> <span class="pre">'ERR_SPACE_REQUIRED',</span> <span class="pre">66:</span> <span class="pre">'ERR_SEPARATOR_REQUIRED',</span> <span class="pre">67:</span> <span class="pre">'ERR_NMTOKEN_REQUIRED',</span> <span class="pre">68:</span> <span class="pre">'ERR_NAME_REQUIRED',</span> <span class="pre">69:</span> <span class="pre">'ERR_PCDATA_REQUIRED',</span> <span class="pre">70:</span> <span class="pre">'ERR_URI_REQUIRED',</span> <span class="pre">71:</span> <span class="pre">'ERR_PUBID_REQUIRED',</span> <span class="pre">72:</span> <span class="pre">'ERR_LT_REQUIRED',</span> <span class="pre">73:</span> <span class="pre">'ERR_GT_REQUIRED',</span> <span class="pre">74:</span> <span class="pre">'ERR_LTSLASH_REQUIRED',</span> <span class="pre">75:</span> <span class="pre">'ERR_EQUAL_REQUIRED',</span> <span class="pre">76:</span> <span class="pre">'ERR_TAG_NAME_MISMATCH',</span> <span class="pre">77:</span> <span class="pre">'ERR_TAG_NOT_FINISHED',</span> <span class="pre">78:</span> <span class="pre">'ERR_STANDALONE_VALUE',</span> <span class="pre">79:</span> <span class="pre">'ERR_ENCODING_NAME',</span> <span class="pre">80:</span> <span class="pre">'ERR_HYPHEN_IN_COMMENT',</span> <span class="pre">81:</span> <span class="pre">'ERR_INVALID_ENCODING',</span> <span class="pre">82:</span> <span class="pre">'ERR_EXT_ENTITY_STANDALONE',</span> <span class="pre">83:</span> <span class="pre">'ERR_CONDSEC_INVALID',</span> <span class="pre">84:</span> <span class="pre">'ERR_VALUE_REQUIRED',</span> <span class="pre">85:</span> <span class="pre">'ERR_NOT_WELL_BALANCED',</span> <span class="pre">86:</span> <span class="pre">'ERR_EXTRA_CONTENT',</span> <span class="pre">87:</span> <span class="pre">'ERR_ENTITY_CHAR_ERROR',</span> <span class="pre">88:</span> <span class="pre">'ERR_ENTITY_PE_INTERNAL',</span> <span class="pre">89:</span> <span class="pre">'ERR_ENTITY_LOOP',</span> <span class="pre">90:</span> <span class="pre">'ERR_ENTITY_BOUNDARY',</span> <span class="pre">91:</span> <span class="pre">'ERR_INVALID_URI',</span> <span class="pre">92:</span> <span class="pre">'ERR_URI_FRAGMENT',</span> <span class="pre">93:</span> <span class="pre">'WAR_CATALOG_PI',</span> <span class="pre">94:</span> <span class="pre">'ERR_NO_DTD',</span> <span class="pre">95:</span> <span class="pre">'ERR_CONDSEC_INVALID_KEYWORD',</span> <span class="pre">96:</span> <span class="pre">'ERR_VERSION_MISSING',</span> <span class="pre">97:</span> <span class="pre">'WAR_UNKNOWN_VERSION',</span> <span class="pre">98:</span> <span class="pre">'WAR_LANG_VALUE',</span> <span class="pre">99:</span> <span class="pre">'WAR_NS_URI',</span> <span class="pre">100:</span> <span class="pre">'WAR_NS_URI_RELATIVE',</span> <span class="pre">101:</span> <span class="pre">'ERR_MISSING_ENCODING',</span> <span class="pre">102:</span> <span class="pre">'WAR_SPACE_VALUE',</span> <span class="pre">103:</span> <span class="pre">'ERR_NOT_STANDALONE',</span> <span class="pre">104:</span> <span class="pre">'ERR_ENTITY_PROCESSING',</span> <span class="pre">105:</span> <span class="pre">'ERR_NOTATION_PROCESSING',</span> <span class="pre">106:</span> <span class="pre">'WAR_NS_COLUMN',</span> <span class="pre">107:</span> <span class="pre">'WAR_ENTITY_REDEFINED',</span> <span class="pre">108:</span> <span class="pre">'ERR_UNKNOWN_VERSION',</span> <span class="pre">109:</span> <span class="pre">'ERR_VERSION_MISMATCH',</span> <span class="pre">110:</span> <span class="pre">'ERR_NAME_TOO_LONG',</span> <span class="pre">111:</span> <span class="pre">'ERR_USER_STOP',</span> <span class="pre">200:</span> <span class="pre">'NS_ERR_XML_NAMESPACE',</span> <span class="pre">201:</span> <span class="pre">'NS_ERR_UNDEFINED_NAMESPACE',</span> <span class="pre">202:</span> <span class="pre">'NS_ERR_QNAME',</span> <span class="pre">203:</span> <span class="pre">'NS_ERR_ATTRIBUTE_REDEFINED',</span> <span class="pre">204:</span> <span class="pre">'NS_ERR_EMPTY',</span> <span class="pre">205:</span> <span class="pre">'NS_ERR_COLON',</span> <span class="pre">500:</span> <span class="pre">'DTD_ATTRIBUTE_DEFAULT',</span> <span class="pre">501:</span> <span class="pre">'DTD_ATTRIBUTE_REDEFINED',</span> <span class="pre">502:</span> <span class="pre">'DTD_ATTRIBUTE_VALUE',</span> <span class="pre">503:</span> <span class="pre">'DTD_CONTENT_ERROR',</span> <span class="pre">504:</span> <span class="pre">'DTD_CONTENT_MODEL',</span> <span class="pre">505:</span> <span class="pre">'DTD_CONTENT_NOT_DETERMINIST',</span> <span class="pre">506:</span> <span class="pre">'DTD_DIFFERENT_PREFIX',</span> <span class="pre">507:</span> <span class="pre">'DTD_ELEM_DEFAULT_NAMESPACE',</span> <span class="pre">508:</span> <span class="pre">'DTD_ELEM_NAMESPACE',</span> <span class="pre">509:</span> <span class="pre">'DTD_ELEM_REDEFINED',</span> <span class="pre">510:</span> <span class="pre">'DTD_EMPTY_NOTATION',</span> <span class="pre">511:</span> <span class="pre">'DTD_ENTITY_TYPE',</span> <span class="pre">512:</span> <span class="pre">'DTD_ID_FIXED',</span> <span class="pre">513:</span> <span class="pre">'DTD_ID_REDEFINED',</span> <span class="pre">514:</span> <span class="pre">'DTD_ID_SUBSET',</span> <span class="pre">515:</span> <span class="pre">'DTD_INVALID_CHILD',</span> <span class="pre">516:</span> <span class="pre">'DTD_INVALID_DEFAULT',</span> <span class="pre">517:</span> <span class="pre">'DTD_LOAD_ERROR',</span> <span class="pre">518:</span> <span class="pre">'DTD_MISSING_ATTRIBUTE',</span> <span class="pre">519:</span> <span class="pre">'DTD_MIXED_CORRUPT',</span> <span class="pre">520:</span> <span class="pre">'DTD_MULTIPLE_ID',</span> <span class="pre">521:</span> <span class="pre">'DTD_NO_DOC',</span> <span class="pre">522:</span> <span class="pre">'DTD_NO_DTD',</span> <span class="pre">523:</span> <span class="pre">'DTD_NO_ELEM_NAME',</span> <span class="pre">524:</span> <span class="pre">'DTD_NO_PREFIX',</span> <span class="pre">525:</span> <span class="pre">'DTD_NO_ROOT',</span> <span class="pre">526:</span> <span class="pre">'DTD_NOTATION_REDEFINED',</span> <span class="pre">527:</span> <span class="pre">'DTD_NOTATION_VALUE',</span> <span class="pre">528:</span> <span class="pre">'DTD_NOT_EMPTY',</span> <span class="pre">529:</span> <span class="pre">'DTD_NOT_PCDATA',</span> <span class="pre">530:</span> <span class="pre">'DTD_NOT_STANDALONE',</span> <span class="pre">531:</span> <span class="pre">'DTD_ROOT_NAME',</span> <span class="pre">532:</span> <span class="pre">'DTD_STANDALONE_WHITE_SPACE',</span> <span class="pre">533:</span> <span class="pre">'DTD_UNKNOWN_ATTRIBUTE',</span> <span class="pre">534:</span> <span class="pre">'DTD_UNKNOWN_ELEM',</span> <span class="pre">535:</span> <span class="pre">'DTD_UNKNOWN_ENTITY',</span> <span class="pre">536:</span> <span class="pre">'DTD_UNKNOWN_ID',</span> <span class="pre">537:</span> <span class="pre">'DTD_UNKNOWN_NOTATION',</span> <span class="pre">538:</span> <span class="pre">'DTD_STANDALONE_DEFAULTED',</span> <span class="pre">539:</span> <span class="pre">'DTD_XMLID_VALUE',</span> <span class="pre">540:</span> <span class="pre">'DTD_XMLID_TYPE',</span> <span class="pre">541:</span> <span class="pre">'DTD_DUP_TOKEN',</span> <span class="pre">800:</span> <span class="pre">'HTML_STRUCURE_ERROR',</span> <span class="pre">801:</span> <span class="pre">'HTML_UNKNOWN_TAG',</span> <span class="pre">1000:</span> <span class="pre">'RNGP_ANYNAME_ATTR_ANCESTOR',</span> <span class="pre">1001:</span> <span class="pre">'RNGP_ATTR_CONFLICT',</span> <span class="pre">1002:</span> <span class="pre">'RNGP_ATTRIBUTE_CHILDREN',</span> <span class="pre">1003:</span> <span class="pre">'RNGP_ATTRIBUTE_CONTENT',</span> <span class="pre">1004:</span> <span class="pre">'RNGP_ATTRIBUTE_EMPTY',</span> <span class="pre">1005:</span> <span class="pre">'RNGP_ATTRIBUTE_NOOP',</span> <span class="pre">1006:</span> <span class="pre">'RNGP_CHOICE_CONTENT',</span> <span class="pre">1007:</span> <span class="pre">'RNGP_CHOICE_EMPTY',</span> <span class="pre">1008:</span> <span class="pre">'RNGP_CREATE_FAILURE',</span> <span class="pre">1009:</span> <span class="pre">'RNGP_DATA_CONTENT',</span> <span class="pre">1010:</span> <span class="pre">'RNGP_DEF_CHOICE_AND_INTERLEAVE',</span> <span class="pre">1011:</span> <span class="pre">'RNGP_DEFINE_CREATE_FAILED',</span> <span class="pre">1012:</span> <span class="pre">'RNGP_DEFINE_EMPTY',</span> <span class="pre">1013:</span> <span class="pre">'RNGP_DEFINE_MISSING',</span> <span class="pre">1014:</span> <span class="pre">'RNGP_DEFINE_NAME_MISSING',</span> <span class="pre">1015:</span> <span class="pre">'RNGP_ELEM_CONTENT_EMPTY',</span> <span class="pre">1016:</span> <span class="pre">'RNGP_ELEM_CONTENT_ERROR',</span> <span class="pre">1017:</span> <span class="pre">'RNGP_ELEMENT_EMPTY',</span> <span class="pre">1018:</span> <span class="pre">'RNGP_ELEMENT_CONTENT',</span> <span class="pre">1019:</span> <span class="pre">'RNGP_ELEMENT_NAME',</span> <span class="pre">1020:</span> <span class="pre">'RNGP_ELEMENT_NO_CONTENT',</span> <span class="pre">1021:</span> <span class="pre">'RNGP_ELEM_TEXT_CONFLICT',</span> <span class="pre">1022:</span> <span class="pre">'RNGP_EMPTY',</span> <span class="pre">1023:</span> <span class="pre">'RNGP_EMPTY_CONSTRUCT',</span> <span class="pre">1024:</span> <span class="pre">'RNGP_EMPTY_CONTENT',</span> <span class="pre">1025:</span> <span class="pre">'RNGP_EMPTY_NOT_EMPTY',</span> <span class="pre">1026:</span> <span class="pre">'RNGP_ERROR_TYPE_LIB',</span> <span class="pre">1027:</span> <span class="pre">'RNGP_EXCEPT_EMPTY',</span> <span class="pre">1028:</span> <span class="pre">'RNGP_EXCEPT_MISSING',</span> <span class="pre">1029:</span> <span class="pre">'RNGP_EXCEPT_MULTIPLE',</span> <span class="pre">1030:</span> <span class="pre">'RNGP_EXCEPT_NO_CONTENT',</span> <span class="pre">1031:</span> <span class="pre">'RNGP_EXTERNALREF_EMTPY',</span> <span class="pre">1032:</span> <span class="pre">'RNGP_EXTERNAL_REF_FAILURE',</span> <span class="pre">1033:</span> <span class="pre">'RNGP_EXTERNALREF_RECURSE',</span> <span class="pre">1034:</span> <span class="pre">'RNGP_FORBIDDEN_ATTRIBUTE',</span> <span class="pre">1035:</span> <span class="pre">'RNGP_FOREIGN_ELEMENT',</span> <span class="pre">1036:</span> <span class="pre">'RNGP_GRAMMAR_CONTENT',</span> <span class="pre">1037:</span> <span class="pre">'RNGP_GRAMMAR_EMPTY',</span> <span class="pre">1038:</span> <span class="pre">'RNGP_GRAMMAR_MISSING',</span> <span class="pre">1039:</span> <span class="pre">'RNGP_GRAMMAR_NO_START',</span> <span class="pre">1040:</span> <span class="pre">'RNGP_GROUP_ATTR_CONFLICT',</span> <span class="pre">1041:</span> <span class="pre">'RNGP_HREF_ERROR',</span> <span class="pre">1042:</span> <span class="pre">'RNGP_INCLUDE_EMPTY',</span> <span class="pre">1043:</span> <span class="pre">'RNGP_INCLUDE_FAILURE',</span> <span class="pre">1044:</span> <span class="pre">'RNGP_INCLUDE_RECURSE',</span> <span class="pre">1045:</span> <span class="pre">'RNGP_INTERLEAVE_ADD',</span> <span class="pre">1046:</span> <span class="pre">'RNGP_INTERLEAVE_CREATE_FAILED',</span> <span class="pre">1047:</span> <span class="pre">'RNGP_INTERLEAVE_EMPTY',</span> <span class="pre">1048:</span> <span class="pre">'RNGP_INTERLEAVE_NO_CONTENT',</span> <span class="pre">1049:</span> <span class="pre">'RNGP_INVALID_DEFINE_NAME',</span> <span class="pre">1050:</span> <span class="pre">'RNGP_INVALID_URI',</span> <span class="pre">1051:</span> <span class="pre">'RNGP_INVALID_VALUE',</span> <span class="pre">1052:</span> <span class="pre">'RNGP_MISSING_HREF',</span> <span class="pre">1053:</span> <span class="pre">'RNGP_NAME_MISSING',</span> <span class="pre">1054:</span> <span class="pre">'RNGP_NEED_COMBINE',</span> <span class="pre">1055:</span> <span class="pre">'RNGP_NOTALLOWED_NOT_EMPTY',</span> <span class="pre">1056:</span> <span class="pre">'RNGP_NSNAME_ATTR_ANCESTOR',</span> <span class="pre">1057:</span> <span class="pre">'RNGP_NSNAME_NO_NS',</span> <span class="pre">1058:</span> <span class="pre">'RNGP_PARAM_FORBIDDEN',</span> <span class="pre">1059:</span> <span class="pre">'RNGP_PARAM_NAME_MISSING',</span> <span class="pre">1060:</span> <span class="pre">'RNGP_PARENTREF_CREATE_FAILED',</span> <span class="pre">1061:</span> <span class="pre">'RNGP_PARENTREF_NAME_INVALID',</span> <span class="pre">1062:</span> <span class="pre">'RNGP_PARENTREF_NO_NAME',</span> <span class="pre">1063:</span> <span class="pre">'RNGP_PARENTREF_NO_PARENT',</span> <span class="pre">1064:</span> <span class="pre">'RNGP_PARENTREF_NOT_EMPTY',</span> <span class="pre">1065:</span> <span class="pre">'RNGP_PARSE_ERROR',</span> <span class="pre">1066:</span> <span class="pre">'RNGP_PAT_ANYNAME_EXCEPT_ANYNAME',</span> <span class="pre">1067:</span> <span class="pre">'RNGP_PAT_ATTR_ATTR',</span> <span class="pre">1068:</span> <span class="pre">'RNGP_PAT_ATTR_ELEM',</span> <span class="pre">1069:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_ATTR',</span> <span class="pre">1070:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_ELEM',</span> <span class="pre">1071:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_EMPTY',</span> <span class="pre">1072:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_GROUP',</span> <span class="pre">1073:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_INTERLEAVE',</span> <span class="pre">1074:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_LIST',</span> <span class="pre">1075:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_ONEMORE',</span> <span class="pre">1076:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_REF',</span> <span class="pre">1077:</span> <span class="pre">'RNGP_PAT_DATA_EXCEPT_TEXT',</span> <span class="pre">1078:</span> <span class="pre">'RNGP_PAT_LIST_ATTR',</span> <span class="pre">1079:</span> <span class="pre">'RNGP_PAT_LIST_ELEM',</span> <span class="pre">1080:</span> <span class="pre">'RNGP_PAT_LIST_INTERLEAVE',</span> <span class="pre">1081:</span> <span class="pre">'RNGP_PAT_LIST_LIST',</span> <span class="pre">1082:</span> <span class="pre">'RNGP_PAT_LIST_REF',</span> <span class="pre">1083:</span> <span class="pre">'RNGP_PAT_LIST_TEXT',</span> <span class="pre">1084:</span> <span class="pre">'RNGP_PAT_NSNAME_EXCEPT_ANYNAME',</span> <span class="pre">1085:</span> <span class="pre">'RNGP_PAT_NSNAME_EXCEPT_NSNAME',</span> <span class="pre">1086:</span> <span class="pre">'RNGP_PAT_ONEMORE_GROUP_ATTR',</span> <span class="pre">1087:</span> <span class="pre">'RNGP_PAT_ONEMORE_INTERLEAVE_ATTR',</span> <span class="pre">1088:</span> <span class="pre">'RNGP_PAT_START_ATTR',</span> <span class="pre">1089:</span> <span class="pre">'RNGP_PAT_START_DATA',</span> <span class="pre">1090:</span> <span class="pre">'RNGP_PAT_START_EMPTY',</span> <span class="pre">1091:</span> <span class="pre">'RNGP_PAT_START_GROUP',</span> <span class="pre">1092:</span> <span class="pre">'RNGP_PAT_START_INTERLEAVE',</span> <span class="pre">1093:</span> <span class="pre">'RNGP_PAT_START_LIST',</span> <span class="pre">1094:</span> <span class="pre">'RNGP_PAT_START_ONEMORE',</span> <span class="pre">1095:</span> <span class="pre">'RNGP_PAT_START_TEXT',</span> <span class="pre">1096:</span> <span class="pre">'RNGP_PAT_START_VALUE',</span> <span class="pre">1097:</span> <span class="pre">'RNGP_PREFIX_UNDEFINED',</span> <span class="pre">1098:</span> <span class="pre">'RNGP_REF_CREATE_FAILED',</span> <span class="pre">1099:</span> <span class="pre">'RNGP_REF_CYCLE',</span> <span class="pre">1100:</span> <span class="pre">'RNGP_REF_NAME_INVALID',</span> <span class="pre">1101:</span> <span class="pre">'RNGP_REF_NO_DEF',</span> <span class="pre">1102:</span> <span class="pre">'RNGP_REF_NO_NAME',</span> <span class="pre">1103:</span> <span class="pre">'RNGP_REF_NOT_EMPTY',</span> <span class="pre">1104:</span> <span class="pre">'RNGP_START_CHOICE_AND_INTERLEAVE',</span> <span class="pre">1105:</span> <span class="pre">'RNGP_START_CONTENT',</span> <span class="pre">1106:</span> <span class="pre">'RNGP_START_EMPTY',</span> <span class="pre">1107:</span> <span class="pre">'RNGP_START_MISSING',</span> <span class="pre">1108:</span> <span class="pre">'RNGP_TEXT_EXPECTED',</span> <span class="pre">1109:</span> <span class="pre">'RNGP_TEXT_HAS_CHILD',</span> <span class="pre">1110:</span> <span class="pre">'RNGP_TYPE_MISSING',</span> <span class="pre">1111:</span> <span class="pre">'RNGP_TYPE_NOT_FOUND',</span> <span class="pre">1112:</span> <span class="pre">'RNGP_TYPE_VALUE',</span> <span class="pre">1113:</span> <span class="pre">'RNGP_UNKNOWN_ATTRIBUTE',</span> <span class="pre">1114:</span> <span class="pre">'RNGP_UNKNOWN_COMBINE',</span> <span class="pre">1115:</span> <span class="pre">'RNGP_UNKNOWN_CONSTRUCT',</span> <span class="pre">1116:</span> <span class="pre">'RNGP_UNKNOWN_TYPE_LIB',</span> <span class="pre">1117:</span> <span class="pre">'RNGP_URI_FRAGMENT',</span> <span class="pre">1118:</span> <span class="pre">'RNGP_URI_NOT_ABSOLUTE',</span> <span class="pre">1119:</span> <span class="pre">'RNGP_VALUE_EMPTY',</span> <span class="pre">1120:</span> <span class="pre">'RNGP_VALUE_NO_CONTENT',</span> <span class="pre">1121:</span> <span class="pre">'RNGP_XMLNS_NAME',</span> <span class="pre">1122:</span> <span class="pre">'RNGP_XML_NS',</span> <span class="pre">1200:</span> <span class="pre">'XPATH_EXPRESSION_OK',</span> <span class="pre">1201:</span> <span class="pre">'XPATH_NUMBER_ERROR',</span> <span class="pre">1202:</span> <span class="pre">'XPATH_UNFINISHED_LITERAL_ERROR',</span> <span class="pre">1203:</span> <span class="pre">'XPATH_START_LITERAL_ERROR',</span> <span class="pre">1204:</span> <span class="pre">'XPATH_VARIABLE_REF_ERROR',</span> <span class="pre">1205:</span> <span class="pre">'XPATH_UNDEF_VARIABLE_ERROR',</span> <span class="pre">1206:</span> <span class="pre">'XPATH_INVALID_PREDICATE_ERROR',</span> <span class="pre">1207:</span> <span class="pre">'XPATH_EXPR_ERROR',</span> <span class="pre">1208:</span> <span class="pre">'XPATH_UNCLOSED_ERROR',</span> <span class="pre">1209:</span> <span class="pre">'XPATH_UNKNOWN_FUNC_ERROR',</span> <span class="pre">1210:</span> <span class="pre">'XPATH_INVALID_OPERAND',</span> <span class="pre">1211:</span> <span class="pre">'XPATH_INVALID_TYPE',</span> <span class="pre">1212:</span> <span class="pre">'XPATH_INVALID_ARITY',</span> <span class="pre">1213:</span> <span class="pre">'XPATH_INVALID_CTXT_SIZE',</span> <span class="pre">1214:</span> <span class="pre">'XPATH_INVALID_CTXT_POSITION',</span> <span class="pre">1215:</span> <span class="pre">'XPATH_MEMORY_ERROR',</span> <span class="pre">1216:</span> <span class="pre">'XPTR_SYNTAX_ERROR',</span> <span class="pre">1217:</span> <span class="pre">'XPTR_RESOURCE_ERROR',</span> <span class="pre">1218:</span> <span class="pre">'XPTR_SUB_RESOURCE_ERROR',</span> <span class="pre">1219:</span> <span class="pre">'XPATH_UNDEF_PREFIX_ERROR',</span> <span class="pre">1220:</span> <span class="pre">'XPATH_ENCODING_ERROR',</span> <span class="pre">1221:</span> <span class="pre">'XPATH_INVALID_CHAR_ERROR',</span> <span class="pre">1300:</span> <span class="pre">'TREE_INVALID_HEX',</span> <span class="pre">1301:</span> <span class="pre">'TREE_INVALID_DEC',</span> <span class="pre">1302:</span> <span class="pre">'TREE_UNTERMINATED_ENTITY',</span> <span class="pre">1303:</span> <span class="pre">'TREE_NOT_UTF8',</span> <span class="pre">1400:</span> <span class="pre">'SAVE_NOT_UTF8',</span> <span class="pre">1401:</span> <span class="pre">'SAVE_CHAR_INVALID',</span> <span class="pre">1402:</span> <span class="pre">'SAVE_NO_DOCTYPE',</span> <span class="pre">1403:</span> <span class="pre">'SAVE_UNKNOWN_ENCODING',</span> <span class="pre">1450:</span> <span class="pre">'REGEXP_COMPILE_ERROR',</span> <span class="pre">1500:</span> <span class="pre">'IO_UNKNOWN',</span> <span class="pre">1501:</span> <span class="pre">'IO_EACCES',</span> <span class="pre">1502:</span> <span class="pre">'IO_EAGAIN',</span> <span class="pre">1503:</span> <span class="pre">'IO_EBADF',</span> <span class="pre">1504:</span> <span class="pre">'IO_EBADMSG',</span> <span class="pre">1505:</span> <span class="pre">'IO_EBUSY',</span> <span class="pre">1506:</span> <span class="pre">'IO_ECANCELED',</span> <span class="pre">1507:</span> <span class="pre">'IO_ECHILD',</span> <span class="pre">1508:</span> <span class="pre">'IO_EDEADLK',</span> <span class="pre">1509:</span> <span class="pre">'IO_EDOM',</span> <span class="pre">1510:</span> <span class="pre">'IO_EEXIST',</span> <span class="pre">1511:</span> <span class="pre">'IO_EFAULT',</span> <span class="pre">1512:</span> <span class="pre">'IO_EFBIG',</span> <span class="pre">1513:</span> <span class="pre">'IO_EINPROGRESS',</span> <span class="pre">1514:</span> <span class="pre">'IO_EINTR',</span> <span class="pre">1515:</span> <span class="pre">'IO_EINVAL',</span> <span class="pre">1516:</span> <span class="pre">'IO_EIO',</span> <span class="pre">1517:</span> <span class="pre">'IO_EISDIR',</span> <span class="pre">1518:</span> <span class="pre">'IO_EMFILE',</span> <span class="pre">1519:</span> <span class="pre">'IO_EMLINK',</span> <span class="pre">1520:</span> <span class="pre">'IO_EMSGSIZE',</span> <span class="pre">1521:</span> <span class="pre">'IO_ENAMETOOLONG',</span> <span class="pre">1522:</span> <span class="pre">'IO_ENFILE',</span> <span class="pre">1523:</span> <span class="pre">'IO_ENODEV',</span> <span class="pre">1524:</span> <span class="pre">'IO_ENOENT',</span> <span class="pre">1525:</span> <span class="pre">'IO_ENOEXEC',</span> <span class="pre">1526:</span> <span class="pre">'IO_ENOLCK',</span> <span class="pre">1527:</span> <span class="pre">'IO_ENOMEM',</span> <span class="pre">1528:</span> <span class="pre">'IO_ENOSPC',</span> <span class="pre">1529:</span> <span class="pre">'IO_ENOSYS',</span> <span class="pre">1530:</span> <span class="pre">'IO_ENOTDIR',</span> <span class="pre">1531:</span> <span class="pre">'IO_ENOTEMPTY',</span> <span class="pre">1532:</span> <span class="pre">'IO_ENOTSUP',</span> <span class="pre">1533:</span> <span class="pre">'IO_ENOTTY',</span> <span class="pre">1534:</span> <span class="pre">'IO_ENXIO',</span> <span class="pre">1535:</span> <span class="pre">'IO_EPERM',</span> <span class="pre">1536:</span> <span class="pre">'IO_EPIPE',</span> <span class="pre">1537:</span> <span class="pre">'IO_ERANGE',</span> <span class="pre">1538:</span> <span class="pre">'IO_EROFS',</span> <span class="pre">1539:</span> <span class="pre">'IO_ESPIPE',</span> <span class="pre">1540:</span> <span class="pre">'IO_ESRCH',</span> <span class="pre">1541:</span> <span class="pre">'IO_ETIMEDOUT',</span> <span class="pre">1542:</span> <span class="pre">'IO_EXDEV',</span> <span class="pre">1543:</span> <span class="pre">'IO_NETWORK_ATTEMPT',</span> <span class="pre">1544:</span> <span class="pre">'IO_ENCODER',</span> <span class="pre">1545:</span> <span class="pre">'IO_FLUSH',</span> <span class="pre">1546:</span> <span class="pre">'IO_WRITE',</span> <span class="pre">1547:</span> <span class="pre">'IO_NO_INPUT',</span> <span class="pre">1548:</span> <span class="pre">'IO_BUFFER_FULL',</span> <span class="pre">1549:</span> <span class="pre">'IO_LOAD_ERROR',</span> <span class="pre">1550:</span> <span class="pre">'IO_ENOTSOCK',</span> <span class="pre">1551:</span> <span class="pre">'IO_EISCONN',</span> <span class="pre">1552:</span> <span class="pre">'IO_ECONNREFUSED',</span> <span class="pre">1553:</span> <span class="pre">'IO_ENETUNREACH',</span> <span class="pre">1554:</span> <span class="pre">'IO_EADDRINUSE',</span> <span class="pre">1555:</span> <span class="pre">'IO_EALREADY',</span> <span class="pre">1556:</span> <span class="pre">'IO_EAFNOSUPPORT',</span> <span class="pre">1600:</span> <span class="pre">'XINCLUDE_RECURSION',</span> <span class="pre">1601:</span> <span class="pre">'XINCLUDE_PARSE_VALUE',</span> <span class="pre">1602:</span> <span class="pre">'XINCLUDE_ENTITY_DEF_MISMATCH',</span> <span class="pre">1603:</span> <span class="pre">'XINCLUDE_NO_HREF',</span> <span class="pre">1604:</span> <span class="pre">'XINCLUDE_NO_FALLBACK',</span> <span class="pre">1605:</span> <span class="pre">'XINCLUDE_HREF_URI',</span> <span class="pre">1606:</span> <span class="pre">'XINCLUDE_TEXT_FRAGMENT',</span> <span class="pre">1607:</span> <span class="pre">'XINCLUDE_TEXT_DOCUMENT',</span> <span class="pre">1608:</span> <span class="pre">'XINCLUDE_INVALID_CHAR',</span> <span class="pre">1609:</span> <span class="pre">'XINCLUDE_BUILD_FAILED',</span> <span class="pre">1610:</span> <span class="pre">'XINCLUDE_UNKNOWN_ENCODING',</span> <span class="pre">1611:</span> <span class="pre">'XINCLUDE_MULTIPLE_ROOT',</span> <span class="pre">1612:</span> <span class="pre">'XINCLUDE_XPTR_FAILED',</span> <span class="pre">1613:</span> <span class="pre">'XINCLUDE_XPTR_RESULT',</span> <span class="pre">1614:</span> <span class="pre">'XINCLUDE_INCLUDE_IN_INCLUDE',</span> <span class="pre">1615:</span> <span class="pre">'XINCLUDE_FALLBACKS_IN_INCLUDE',</span> <span class="pre">1616:</span> <span class="pre">'XINCLUDE_FALLBACK_NOT_IN_INCLUDE',</span> <span class="pre">1617:</span> <span class="pre">'XINCLUDE_DEPRECATED_NS',</span> <span class="pre">1618:</span> <span class="pre">'XINCLUDE_FRAGMENT_ID',</span> <span class="pre">1650:</span> <span class="pre">'CATALOG_MISSING_ATTR',</span> <span class="pre">1651:</span> <span class="pre">'CATALOG_ENTRY_BROKEN',</span> <span class="pre">1652:</span> <span class="pre">'CATALOG_PREFER_VALUE',</span> <span class="pre">1653:</span> <span class="pre">'CATALOG_NOT_CATALOG',</span> <span class="pre">1654:</span> <span class="pre">'CATALOG_RECURSION',</span> <span class="pre">1700:</span> <span class="pre">'SCHEMAP_PREFIX_UNDEFINED',</span> <span class="pre">1701:</span> <span class="pre">'SCHEMAP_ATTRFORMDEFAULT_VALUE',</span> <span class="pre">1702:</span> <span class="pre">'SCHEMAP_ATTRGRP_NONAME_NOREF',</span> <span class="pre">1703:</span> <span class="pre">'SCHEMAP_ATTR_NONAME_NOREF',</span> <span class="pre">1704:</span> <span class="pre">'SCHEMAP_COMPLEXTYPE_NONAME_NOREF',</span> <span class="pre">1705:</span> <span class="pre">'SCHEMAP_ELEMFORMDEFAULT_VALUE',</span> <span class="pre">1706:</span> <span class="pre">'SCHEMAP_ELEM_NONAME_NOREF',</span> <span class="pre">1707:</span> <span class="pre">'SCHEMAP_EXTENSION_NO_BASE',</span> <span class="pre">1708:</span> <span class="pre">'SCHEMAP_FACET_NO_VALUE',</span> <span class="pre">1709:</span> <span class="pre">'SCHEMAP_FAILED_BUILD_IMPORT',</span> <span class="pre">1710:</span> <span class="pre">'SCHEMAP_GROUP_NONAME_NOREF',</span> <span class="pre">1711:</span> <span class="pre">'SCHEMAP_IMPORT_NAMESPACE_NOT_URI',</span> <span class="pre">1712:</span> <span class="pre">'SCHEMAP_IMPORT_REDEFINE_NSNAME',</span> <span class="pre">1713:</span> <span class="pre">'SCHEMAP_IMPORT_SCHEMA_NOT_URI',</span> <span class="pre">1714:</span> <span class="pre">'SCHEMAP_INVALID_BOOLEAN',</span> <span class="pre">1715:</span> <span class="pre">'SCHEMAP_INVALID_ENUM',</span> <span class="pre">1716:</span> <span class="pre">'SCHEMAP_INVALID_FACET',</span> <span class="pre">1717:</span> <span class="pre">'SCHEMAP_INVALID_FACET_VALUE',</span> <span class="pre">1718:</span> <span class="pre">'SCHEMAP_INVALID_MAXOCCURS',</span> <span class="pre">1719:</span> <span class="pre">'SCHEMAP_INVALID_MINOCCURS',</span> <span class="pre">1720:</span> <span class="pre">'SCHEMAP_INVALID_REF_AND_SUBTYPE',</span> <span class="pre">1721:</span> <span class="pre">'SCHEMAP_INVALID_WHITE_SPACE',</span> <span class="pre">1722:</span> <span class="pre">'SCHEMAP_NOATTR_NOREF',</span> <span class="pre">1723:</span> <span class="pre">'SCHEMAP_NOTATION_NO_NAME',</span> <span class="pre">1724:</span> <span class="pre">'SCHEMAP_NOTYPE_NOREF',</span> <span class="pre">1725:</span> <span class="pre">'SCHEMAP_REF_AND_SUBTYPE',</span> <span class="pre">1726:</span> <span class="pre">'SCHEMAP_RESTRICTION_NONAME_NOREF',</span> <span class="pre">1727:</span> <span class="pre">'SCHEMAP_SIMPLETYPE_NONAME',</span> <span class="pre">1728:</span> <span class="pre">'SCHEMAP_TYPE_AND_SUBTYPE',</span> <span class="pre">1729:</span> <span class="pre">'SCHEMAP_UNKNOWN_ALL_CHILD',</span> <span class="pre">1730:</span> <span class="pre">'SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD',</span> <span class="pre">1731:</span> <span class="pre">'SCHEMAP_UNKNOWN_ATTR_CHILD',</span> <span class="pre">1732:</span> <span class="pre">'SCHEMAP_UNKNOWN_ATTRGRP_CHILD',</span> <span class="pre">1733:</span> <span class="pre">'SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP',</span> <span class="pre">1734:</span> <span class="pre">'SCHEMAP_UNKNOWN_BASE_TYPE',</span> <span class="pre">1735:</span> <span class="pre">'SCHEMAP_UNKNOWN_CHOICE_CHILD',</span> <span class="pre">1736:</span> <span class="pre">'SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD',</span> <span class="pre">1737:</span> <span class="pre">'SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD',</span> <span class="pre">1738:</span> <span class="pre">'SCHEMAP_UNKNOWN_ELEM_CHILD',</span> <span class="pre">1739:</span> <span class="pre">'SCHEMAP_UNKNOWN_EXTENSION_CHILD',</span> <span class="pre">1740:</span> <span class="pre">'SCHEMAP_UNKNOWN_FACET_CHILD',</span> <span class="pre">1741:</span> <span class="pre">'SCHEMAP_UNKNOWN_FACET_TYPE',</span> <span class="pre">1742:</span> <span class="pre">'SCHEMAP_UNKNOWN_GROUP_CHILD',</span> <span class="pre">1743:</span> <span class="pre">'SCHEMAP_UNKNOWN_IMPORT_CHILD',</span> <span class="pre">1744:</span> <span class="pre">'SCHEMAP_UNKNOWN_LIST_CHILD',</span> <span class="pre">1745:</span> <span class="pre">'SCHEMAP_UNKNOWN_NOTATION_CHILD',</span> <span class="pre">1746:</span> <span class="pre">'SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD',</span> <span class="pre">1747:</span> <span class="pre">'SCHEMAP_UNKNOWN_REF',</span> <span class="pre">1748:</span> <span class="pre">'SCHEMAP_UNKNOWN_RESTRICTION_CHILD',</span> <span class="pre">1749:</span> <span class="pre">'SCHEMAP_UNKNOWN_SCHEMAS_CHILD',</span> <span class="pre">1750:</span> <span class="pre">'SCHEMAP_UNKNOWN_SEQUENCE_CHILD',</span> <span class="pre">1751:</span> <span class="pre">'SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD',</span> <span class="pre">1752:</span> <span class="pre">'SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD',</span> <span class="pre">1753:</span> <span class="pre">'SCHEMAP_UNKNOWN_TYPE',</span> <span class="pre">1754:</span> <span class="pre">'SCHEMAP_UNKNOWN_UNION_CHILD',</span> <span class="pre">1755:</span> <span class="pre">'SCHEMAP_ELEM_DEFAULT_FIXED',</span> <span class="pre">1756:</span> <span class="pre">'SCHEMAP_REGEXP_INVALID',</span> <span class="pre">1757:</span> <span class="pre">'SCHEMAP_FAILED_LOAD',</span> <span class="pre">1758:</span> <span class="pre">'SCHEMAP_NOTHING_TO_PARSE',</span> <span class="pre">1759:</span> <span class="pre">'SCHEMAP_NOROOT',</span> <span class="pre">1760:</span> <span class="pre">'SCHEMAP_REDEFINED_GROUP',</span> <span class="pre">1761:</span> <span class="pre">'SCHEMAP_REDEFINED_TYPE',</span> <span class="pre">1762:</span> <span class="pre">'SCHEMAP_REDEFINED_ELEMENT',</span> <span class="pre">1763:</span> <span class="pre">'SCHEMAP_REDEFINED_ATTRGROUP',</span> <span class="pre">1764:</span> <span class="pre">'SCHEMAP_REDEFINED_ATTR',</span> <span class="pre">1765:</span> <span class="pre">'SCHEMAP_REDEFINED_NOTATION',</span> <span class="pre">1766:</span> <span class="pre">'SCHEMAP_FAILED_PARSE',</span> <span class="pre">1767:</span> <span class="pre">'SCHEMAP_UNKNOWN_PREFIX',</span> <span class="pre">1768:</span> <span class="pre">'SCHEMAP_DEF_AND_PREFIX',</span> <span class="pre">1769:</span> <span class="pre">'SCHEMAP_UNKNOWN_INCLUDE_CHILD',</span> <span class="pre">1770:</span> <span class="pre">'SCHEMAP_INCLUDE_SCHEMA_NOT_URI',</span> <span class="pre">1771:</span> <span class="pre">'SCHEMAP_INCLUDE_SCHEMA_NO_URI',</span> <span class="pre">1772:</span> <span class="pre">'SCHEMAP_NOT_SCHEMA',</span> <span class="pre">1773:</span> <span class="pre">'SCHEMAP_UNKNOWN_MEMBER_TYPE',</span> <span class="pre">1774:</span> <span class="pre">'SCHEMAP_INVALID_ATTR_USE',</span> <span class="pre">1775:</span> <span class="pre">'SCHEMAP_RECURSIVE',</span> <span class="pre">1776:</span> <span class="pre">'SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE',</span> <span class="pre">1777:</span> <span class="pre">'SCHEMAP_INVALID_ATTR_COMBINATION',</span> <span class="pre">1778:</span> <span class="pre">'SCHEMAP_INVALID_ATTR_INLINE_COMBINATION',</span> <span class="pre">1779:</span> <span class="pre">'SCHEMAP_MISSING_SIMPLETYPE_CHILD',</span> <span class="pre">1780:</span> <span class="pre">'SCHEMAP_INVALID_ATTR_NAME',</span> <span class="pre">1781:</span> <span class="pre">'SCHEMAP_REF_AND_CONTENT',</span> <span class="pre">1782:</span> <span class="pre">'SCHEMAP_CT_PROPS_CORRECT_1',</span> <span class="pre">1783:</span> <span class="pre">'SCHEMAP_CT_PROPS_CORRECT_2',</span> <span class="pre">1784:</span> <span class="pre">'SCHEMAP_CT_PROPS_CORRECT_3',</span> <span class="pre">1785:</span> <span class="pre">'SCHEMAP_CT_PROPS_CORRECT_4',</span> <span class="pre">1786:</span> <span class="pre">'SCHEMAP_CT_PROPS_CORRECT_5',</span> <span class="pre">1787:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_1',</span> <span class="pre">1788:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1',</span> <span class="pre">1789:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2',</span> <span class="pre">1790:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_2_2',</span> <span class="pre">1791:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_3',</span> <span class="pre">1792:</span> <span class="pre">'SCHEMAP_WILDCARD_INVALID_NS_MEMBER',</span> <span class="pre">1793:</span> <span class="pre">'SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE',</span> <span class="pre">1794:</span> <span class="pre">'SCHEMAP_UNION_NOT_EXPRESSIBLE',</span> <span class="pre">1795:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_3_1',</span> <span class="pre">1796:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_3_2',</span> <span class="pre">1797:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_4_1',</span> <span class="pre">1798:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_4_2',</span> <span class="pre">1799:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_4_3',</span> <span class="pre">1800:</span> <span class="pre">'SCHEMAP_COS_CT_EXTENDS_1_3',</span> <span class="pre">1801:</span> <span class="pre">'SCHEMAV_NOROOT',</span> <span class="pre">1802:</span> <span class="pre">'SCHEMAV_UNDECLAREDELEM',</span> <span class="pre">1803:</span> <span class="pre">'SCHEMAV_NOTTOPLEVEL',</span> <span class="pre">1804:</span> <span class="pre">'SCHEMAV_MISSING',</span> <span class="pre">1805:</span> <span class="pre">'SCHEMAV_WRONGELEM',</span> <span class="pre">1806:</span> <span class="pre">'SCHEMAV_NOTYPE',</span> <span class="pre">1807:</span> <span class="pre">'SCHEMAV_NOROLLBACK',</span> <span class="pre">1808:</span> <span class="pre">'SCHEMAV_ISABSTRACT',</span> <span class="pre">1809:</span> <span class="pre">'SCHEMAV_NOTEMPTY',</span> <span class="pre">1810:</span> <span class="pre">'SCHEMAV_ELEMCONT',</span> <span class="pre">1811:</span> <span class="pre">'SCHEMAV_HAVEDEFAULT',</span> <span class="pre">1812:</span> <span class="pre">'SCHEMAV_NOTNILLABLE',</span> <span class="pre">1813:</span> <span class="pre">'SCHEMAV_EXTRACONTENT',</span> <span class="pre">1814:</span> <span class="pre">'SCHEMAV_INVALIDATTR',</span> <span class="pre">1815:</span> <span class="pre">'SCHEMAV_INVALIDELEM',</span> <span class="pre">1816:</span> <span class="pre">'SCHEMAV_NOTDETERMINIST',</span> <span class="pre">1817:</span> <span class="pre">'SCHEMAV_CONSTRUCT',</span> <span class="pre">1818:</span> <span class="pre">'SCHEMAV_INTERNAL',</span> <span class="pre">1819:</span> <span class="pre">'SCHEMAV_NOTSIMPLE',</span> <span class="pre">1820:</span> <span class="pre">'SCHEMAV_ATTRUNKNOWN',</span> <span class="pre">1821:</span> <span class="pre">'SCHEMAV_ATTRINVALID',</span> <span class="pre">1822:</span> <span class="pre">'SCHEMAV_VALUE',</span> <span class="pre">1823:</span> <span class="pre">'SCHEMAV_FACET',</span> <span class="pre">1824:</span> <span class="pre">'SCHEMAV_CVC_DATATYPE_VALID_1_2_1',</span> <span class="pre">1825:</span> <span class="pre">'SCHEMAV_CVC_DATATYPE_VALID_1_2_2',</span> <span class="pre">1826:</span> <span class="pre">'SCHEMAV_CVC_DATATYPE_VALID_1_2_3',</span> <span class="pre">1827:</span> <span class="pre">'SCHEMAV_CVC_TYPE_3_1_1',</span> <span class="pre">1828:</span> <span class="pre">'SCHEMAV_CVC_TYPE_3_1_2',</span> <span class="pre">1829:</span> <span class="pre">'SCHEMAV_CVC_FACET_VALID',</span> <span class="pre">1830:</span> <span class="pre">'SCHEMAV_CVC_LENGTH_VALID',</span> <span class="pre">1831:</span> <span class="pre">'SCHEMAV_CVC_MINLENGTH_VALID',</span> <span class="pre">1832:</span> <span class="pre">'SCHEMAV_CVC_MAXLENGTH_VALID',</span> <span class="pre">1833:</span> <span class="pre">'SCHEMAV_CVC_MININCLUSIVE_VALID',</span> <span class="pre">1834:</span> <span class="pre">'SCHEMAV_CVC_MAXINCLUSIVE_VALID',</span> <span class="pre">1835:</span> <span class="pre">'SCHEMAV_CVC_MINEXCLUSIVE_VALID',</span> <span class="pre">1836:</span> <span class="pre">'SCHEMAV_CVC_MAXEXCLUSIVE_VALID',</span> <span class="pre">1837:</span> <span class="pre">'SCHEMAV_CVC_TOTALDIGITS_VALID',</span> <span class="pre">1838:</span> <span class="pre">'SCHEMAV_CVC_FRACTIONDIGITS_VALID',</span> <span class="pre">1839:</span> <span class="pre">'SCHEMAV_CVC_PATTERN_VALID',</span> <span class="pre">1840:</span> <span class="pre">'SCHEMAV_CVC_ENUMERATION_VALID',</span> <span class="pre">1841:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_2_1',</span> <span class="pre">1842:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_2_2',</span> <span class="pre">1843:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_2_3',</span> <span class="pre">1844:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_2_4',</span> <span class="pre">1845:</span> <span class="pre">'SCHEMAV_CVC_ELT_1',</span> <span class="pre">1846:</span> <span class="pre">'SCHEMAV_CVC_ELT_2',</span> <span class="pre">1847:</span> <span class="pre">'SCHEMAV_CVC_ELT_3_1',</span> <span class="pre">1848:</span> <span class="pre">'SCHEMAV_CVC_ELT_3_2_1',</span> <span class="pre">1849:</span> <span class="pre">'SCHEMAV_CVC_ELT_3_2_2',</span> <span class="pre">1850:</span> <span class="pre">'SCHEMAV_CVC_ELT_4_1',</span> <span class="pre">1851:</span> <span class="pre">'SCHEMAV_CVC_ELT_4_2',</span> <span class="pre">1852:</span> <span class="pre">'SCHEMAV_CVC_ELT_4_3',</span> <span class="pre">1853:</span> <span class="pre">'SCHEMAV_CVC_ELT_5_1_1',</span> <span class="pre">1854:</span> <span class="pre">'SCHEMAV_CVC_ELT_5_1_2',</span> <span class="pre">1855:</span> <span class="pre">'SCHEMAV_CVC_ELT_5_2_1',</span> <span class="pre">1856:</span> <span class="pre">'SCHEMAV_CVC_ELT_5_2_2_1',</span> <span class="pre">1857:</span> <span class="pre">'SCHEMAV_CVC_ELT_5_2_2_2_1',</span> <span class="pre">1858:</span> <span class="pre">'SCHEMAV_CVC_ELT_5_2_2_2_2',</span> <span class="pre">1859:</span> <span class="pre">'SCHEMAV_CVC_ELT_6',</span> <span class="pre">1860:</span> <span class="pre">'SCHEMAV_CVC_ELT_7',</span> <span class="pre">1861:</span> <span class="pre">'SCHEMAV_CVC_ATTRIBUTE_1',</span> <span class="pre">1862:</span> <span class="pre">'SCHEMAV_CVC_ATTRIBUTE_2',</span> <span class="pre">1863:</span> <span class="pre">'SCHEMAV_CVC_ATTRIBUTE_3',</span> <span class="pre">1864:</span> <span class="pre">'SCHEMAV_CVC_ATTRIBUTE_4',</span> <span class="pre">1865:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_3_1',</span> <span class="pre">1866:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_3_2_1',</span> <span class="pre">1867:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_3_2_2',</span> <span class="pre">1868:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_4',</span> <span class="pre">1869:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_5_1',</span> <span class="pre">1870:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_5_2',</span> <span class="pre">1871:</span> <span class="pre">'SCHEMAV_ELEMENT_CONTENT',</span> <span class="pre">1872:</span> <span class="pre">'SCHEMAV_DOCUMENT_ELEMENT_MISSING',</span> <span class="pre">1873:</span> <span class="pre">'SCHEMAV_CVC_COMPLEX_TYPE_1',</span> <span class="pre">1874:</span> <span class="pre">'SCHEMAV_CVC_AU',</span> <span class="pre">1875:</span> <span class="pre">'SCHEMAV_CVC_TYPE_1',</span> <span class="pre">1876:</span> <span class="pre">'SCHEMAV_CVC_TYPE_2',</span> <span class="pre">1877:</span> <span class="pre">'SCHEMAV_CVC_IDC',</span> <span class="pre">1878:</span> <span class="pre">'SCHEMAV_CVC_WILDCARD',</span> <span class="pre">1879:</span> <span class="pre">'SCHEMAV_MISC',</span> <span class="pre">1900:</span> <span class="pre">'XPTR_UNKNOWN_SCHEME',</span> <span class="pre">1901:</span> <span class="pre">'XPTR_CHILDSEQ_START',</span> <span class="pre">1902:</span> <span class="pre">'XPTR_EVAL_FAILED',</span> <span class="pre">1903:</span> <span class="pre">'XPTR_EXTRA_OBJECTS',</span> <span class="pre">1950:</span> <span class="pre">'C14N_CREATE_CTXT',</span> <span class="pre">1951:</span> <span class="pre">'C14N_REQUIRES_UTF8',</span> <span class="pre">1952:</span> <span class="pre">'C14N_CREATE_STACK',</span> <span class="pre">1953:</span> <span class="pre">'C14N_INVALID_NODE',</span> <span class="pre">1954:</span> <span class="pre">'C14N_UNKNOW_NODE',</span> <span class="pre">1955:</span> <span class="pre">'C14N_RELATIVE_NAMESPACE',</span> <span class="pre">2000:</span> <span class="pre">'FTP_PASV_ANSWER',</span> <span class="pre">2001:</span> <span class="pre">'FTP_EPSV_ANSWER',</span> <span class="pre">2002:</span> <span class="pre">'FTP_ACCNT',</span> <span class="pre">2003:</span> <span class="pre">'FTP_URL_SYNTAX',</span> <span class="pre">2020:</span> <span class="pre">'HTTP_URL_SYNTAX',</span> <span class="pre">2021:</span> <span class="pre">'HTTP_USE_IP',</span> <span class="pre">2022:</span> <span class="pre">'HTTP_UNKNOWN_HOST',</span> <span class="pre">3000:</span> <span class="pre">'SCHEMAP_SRC_SIMPLE_TYPE_1',</span> <span class="pre">3001:</span> <span class="pre">'SCHEMAP_SRC_SIMPLE_TYPE_2',</span> <span class="pre">3002:</span> <span class="pre">'SCHEMAP_SRC_SIMPLE_TYPE_3',</span> <span class="pre">3003:</span> <span class="pre">'SCHEMAP_SRC_SIMPLE_TYPE_4',</span> <span class="pre">3004:</span> <span class="pre">'SCHEMAP_SRC_RESOLVE',</span> <span class="pre">3005:</span> <span class="pre">'SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE',</span> <span class="pre">3006:</span> <span class="pre">'SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE',</span> <span class="pre">3007:</span> <span class="pre">'SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES',</span> <span class="pre">3008:</span> <span class="pre">'SCHEMAP_ST_PROPS_CORRECT_1',</span> <span class="pre">3009:</span> <span class="pre">'SCHEMAP_ST_PROPS_CORRECT_2',</span> <span class="pre">3010:</span> <span class="pre">'SCHEMAP_ST_PROPS_CORRECT_3',</span> <span class="pre">3011:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_1_1',</span> <span class="pre">3012:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_1_2',</span> <span class="pre">3013:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_1_3_1',</span> <span class="pre">3014:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_1_3_2',</span> <span class="pre">3015:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_1',</span> <span class="pre">3016:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_1_1',</span> <span class="pre">3017:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_1_2',</span> <span class="pre">3018:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_2_1',</span> <span class="pre">3019:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_2_2',</span> <span class="pre">3020:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_2_3',</span> <span class="pre">3021:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_2_4',</span> <span class="pre">3022:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_2_3_2_5',</span> <span class="pre">3023:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_1',</span> <span class="pre">3024:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_1',</span> <span class="pre">3025:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_1_2',</span> <span class="pre">3026:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_2_2',</span> <span class="pre">3027:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_2_1',</span> <span class="pre">3028:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_2_3',</span> <span class="pre">3029:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_2_4',</span> <span class="pre">3030:</span> <span class="pre">'SCHEMAP_COS_ST_RESTRICTS_3_3_2_5',</span> <span class="pre">3031:</span> <span class="pre">'SCHEMAP_COS_ST_DERIVED_OK_2_1',</span> <span class="pre">3032:</span> <span class="pre">'SCHEMAP_COS_ST_DERIVED_OK_2_2',</span> <span class="pre">3033:</span> <span class="pre">'SCHEMAP_S4S_ELEM_NOT_ALLOWED',</span> <span class="pre">3034:</span> <span class="pre">'SCHEMAP_S4S_ELEM_MISSING',</span> <span class="pre">3035:</span> <span class="pre">'SCHEMAP_S4S_ATTR_NOT_ALLOWED',</span> <span class="pre">3036:</span> <span class="pre">'SCHEMAP_S4S_ATTR_MISSING',</span> <span class="pre">3037:</span> <span class="pre">'SCHEMAP_S4S_ATTR_INVALID_VALUE',</span> <span class="pre">3038:</span> <span class="pre">'SCHEMAP_SRC_ELEMENT_1',</span> <span class="pre">3039:</span> <span class="pre">'SCHEMAP_SRC_ELEMENT_2_1',</span> <span class="pre">3040:</span> <span class="pre">'SCHEMAP_SRC_ELEMENT_2_2',</span> <span class="pre">3041:</span> <span class="pre">'SCHEMAP_SRC_ELEMENT_3',</span> <span class="pre">3042:</span> <span class="pre">'SCHEMAP_P_PROPS_CORRECT_1',</span> <span class="pre">3043:</span> <span class="pre">'SCHEMAP_P_PROPS_CORRECT_2_1',</span> <span class="pre">3044:</span> <span class="pre">'SCHEMAP_P_PROPS_CORRECT_2_2',</span> <span class="pre">3045:</span> <span class="pre">'SCHEMAP_E_PROPS_CORRECT_2',</span> <span class="pre">3046:</span> <span class="pre">'SCHEMAP_E_PROPS_CORRECT_3',</span> <span class="pre">3047:</span> <span class="pre">'SCHEMAP_E_PROPS_CORRECT_4',</span> <span class="pre">3048:</span> <span class="pre">'SCHEMAP_E_PROPS_CORRECT_5',</span> <span class="pre">3049:</span> <span class="pre">'SCHEMAP_E_PROPS_CORRECT_6',</span> <span class="pre">3050:</span> <span class="pre">'SCHEMAP_SRC_INCLUDE',</span> <span class="pre">3051:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_1',</span> <span class="pre">3052:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_2',</span> <span class="pre">3053:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_3_1',</span> <span class="pre">3054:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_3_2',</span> <span class="pre">3055:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_4',</span> <span class="pre">3056:</span> <span class="pre">'SCHEMAP_NO_XMLNS',</span> <span class="pre">3057:</span> <span class="pre">'SCHEMAP_NO_XSI',</span> <span class="pre">3058:</span> <span class="pre">'SCHEMAP_COS_VALID_DEFAULT_1',</span> <span class="pre">3059:</span> <span class="pre">'SCHEMAP_COS_VALID_DEFAULT_2_1',</span> <span class="pre">3060:</span> <span class="pre">'SCHEMAP_COS_VALID_DEFAULT_2_2_1',</span> <span class="pre">3061:</span> <span class="pre">'SCHEMAP_COS_VALID_DEFAULT_2_2_2',</span> <span class="pre">3062:</span> <span class="pre">'SCHEMAP_CVC_SIMPLE_TYPE',</span> <span class="pre">3063:</span> <span class="pre">'SCHEMAP_COS_CT_EXTENDS_1_1',</span> <span class="pre">3064:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_1_1',</span> <span class="pre">3065:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_1_2',</span> <span class="pre">3066:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_2',</span> <span class="pre">3067:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_2_1',</span> <span class="pre">3068:</span> <span class="pre">'SCHEMAP_SRC_IMPORT_2_2',</span> <span class="pre">3069:</span> <span class="pre">'SCHEMAP_INTERNAL',</span> <span class="pre">3070:</span> <span class="pre">'SCHEMAP_NOT_DETERMINISTIC',</span> <span class="pre">3071:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_GROUP_1',</span> <span class="pre">3072:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_GROUP_2',</span> <span class="pre">3073:</span> <span class="pre">'SCHEMAP_SRC_ATTRIBUTE_GROUP_3',</span> <span class="pre">3074:</span> <span class="pre">'SCHEMAP_MG_PROPS_CORRECT_1',</span> <span class="pre">3075:</span> <span class="pre">'SCHEMAP_MG_PROPS_CORRECT_2',</span> <span class="pre">3076:</span> <span class="pre">'SCHEMAP_SRC_CT_1',</span> <span class="pre">3077:</span> <span class="pre">'SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3',</span> <span class="pre">3078:</span> <span class="pre">'SCHEMAP_AU_PROPS_CORRECT_2',</span> <span class="pre">3079:</span> <span class="pre">'SCHEMAP_A_PROPS_CORRECT_2',</span> <span class="pre">3080:</span> <span class="pre">'SCHEMAP_C_PROPS_CORRECT',</span> <span class="pre">3081:</span> <span class="pre">'SCHEMAP_SRC_REDEFINE',</span> <span class="pre">3082:</span> <span class="pre">'SCHEMAP_SRC_IMPORT',</span> <span class="pre">3083:</span> <span class="pre">'SCHEMAP_WARN_SKIP_SCHEMA',</span> <span class="pre">3084:</span> <span class="pre">'SCHEMAP_WARN_UNLOCATED_SCHEMA',</span> <span class="pre">3085:</span> <span class="pre">'SCHEMAP_WARN_ATTR_REDECL_PROH',</span> <span class="pre">3086:</span> <span class="pre">'SCHEMAP_WARN_ATTR_POINTLESS_PROH',</span> <span class="pre">3087:</span> <span class="pre">'SCHEMAP_AG_PROPS_CORRECT',</span> <span class="pre">3088:</span> <span class="pre">'SCHEMAP_COS_CT_EXTENDS_1_2',</span> <span class="pre">3089:</span> <span class="pre">'SCHEMAP_AU_PROPS_CORRECT',</span> <span class="pre">3090:</span> <span class="pre">'SCHEMAP_A_PROPS_CORRECT_3',</span> <span class="pre">3091:</span> <span class="pre">'SCHEMAP_COS_ALL_LIMITED',</span> <span class="pre">4000:</span> <span class="pre">'SCHEMATRONV_ASSERT',</span> <span class="pre">4001:</span> <span class="pre">'SCHEMATRONV_REPORT',</span> <span class="pre">4900:</span> <span class="pre">'MODULE_OPEN',</span> <span class="pre">4901:</span> <span class="pre">'MODULE_CLOSE',</span> <span class="pre">5000:</span> <span class="pre">'CHECK_FOUND_ELEMENT',</span> <span class="pre">5001:</span> <span class="pre">'CHECK_FOUND_ATTRIBUTE',</span> <span class="pre">5002:</span> <span class="pre">'CHECK_FOUND_TEXT',</span> <span class="pre">5003:</span> <span class="pre">'CHECK_FOUND_CDATA',</span> <span class="pre">5004:</span> <span class="pre">'CHECK_FOUND_ENTITYREF',</span> <span class="pre">5005:</span> <span class="pre">'CHECK_FOUND_ENTITY',</span> <span class="pre">5006:</span> <span class="pre">'CHECK_FOUND_PI',</span> <span class="pre">5007:</span> <span class="pre">'CHECK_FOUND_COMMENT',</span> <span class="pre">5008:</span> <span class="pre">'CHECK_FOUND_DOCTYPE',</span> <span class="pre">5009:</span> <span class="pre">'CHECK_FOUND_FRAGMENT',</span> <span class="pre">5010:</span> <span class="pre">'CHECK_FOUND_NOTATION',</span> <span class="pre">5011:</span> <span class="pre">'CHECK_UNKNOWN_NODE',</span> <span class="pre">5012:</span> <span class="pre">'CHECK_ENTITY_TYPE',</span> <span class="pre">5013:</span> <span class="pre">'CHECK_NO_PARENT',</span> <span class="pre">5014:</span> <span class="pre">'CHECK_NO_DOC',</span> <span class="pre">5015:</span> <span class="pre">'CHECK_NO_NAME',</span> <span class="pre">5016:</span> <span class="pre">'CHECK_NO_ELEM',</span> <span class="pre">5017:</span> <span class="pre">'CHECK_WRONG_DOC',</span> <span class="pre">5018:</span> <span class="pre">'CHECK_NO_PREV',</span> <span class="pre">5019:</span> <span class="pre">'CHECK_WRONG_PREV',</span> <span class="pre">5020:</span> <span class="pre">'CHECK_NO_NEXT',</span> <span class="pre">5021:</span> <span class="pre">'CHECK_WRONG_NEXT',</span> <span class="pre">5022:</span> <span class="pre">'CHECK_NOT_DTD',</span> <span class="pre">5023:</span> <span class="pre">'CHECK_NOT_ATTR',</span> <span class="pre">5024:</span> <span class="pre">'CHECK_NOT_ATTR_DECL',</span> <span class="pre">5025:</span> <span class="pre">'CHECK_NOT_ELEM_DECL',</span> <span class="pre">5026:</span> <span class="pre">'CHECK_NOT_ENTITY_DECL',</span> <span class="pre">5027:</span> <span class="pre">'CHECK_NOT_NS_DECL',</span> <span class="pre">5028:</span> <span class="pre">'CHECK_NO_HREF',</span> <span class="pre">5029:</span> <span class="pre">'CHECK_WRONG_PARENT',</span> <span class="pre">5030:</span> <span class="pre">'CHECK_NS_SCOPE',</span> <span class="pre">5031:</span> <span class="pre">'CHECK_NS_ANCESTOR',</span> <span class="pre">5032:</span> <span class="pre">'CHECK_NOT_UTF8',</span> <span class="pre">5033:</span> <span class="pre">'CHECK_NO_DICT',</span> <span class="pre">5034:</span> <span class="pre">'CHECK_NOT_NCNAME',</span> <span class="pre">5035:</span> <span class="pre">'CHECK_OUTSIDE_DICT',</span> <span class="pre">5036:</span> <span class="pre">'CHECK_WRONG_NAME',</span> <span class="pre">5037:</span> <span class="pre">'CHECK_NAME_NOT_NULL',</span> <span class="pre">6000:</span> <span class="pre">'I18N_NO_NAME',</span> <span class="pre">6001:</span> <span class="pre">'I18N_NO_HANDLER',</span> <span class="pre">6002:</span> <span class="pre">'I18N_EXCESS_HANDLER',</span> <span class="pre">6003:</span> <span class="pre">'I18N_CONV_FAILED',</span> <span class="pre">6004:</span> <span class="pre">'I18N_NO_OUTPUT',</span> <span class="pre">7000:</span> <span class="pre">'BUF_OVERFLOW'}</span></em><a class="headerlink" href="#lxml.etree.ErrorTypes._names" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.FallbackElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">FallbackElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">fallback</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.FallbackElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.FallbackElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">FallbackElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.FallbackElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.ElementClassLookup" title="lxml.etree.ElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ElementClassLookup</span></code></a></p>
 <p>Superclass of Element class lookups with additional fallback.</p>
 <dl class="py method">
-<dt id="lxml.etree.FallbackElementClassLookup.set_fallback">
-<code class="sig-name descname">set_fallback</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">lookup</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.FallbackElementClassLookup.set_fallback" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.FallbackElementClassLookup.set_fallback">
+<span class="sig-name descname"><span class="pre">set_fallback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lookup</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.FallbackElementClassLookup.set_fallback" title="Permalink to this definition"></a></dt>
 <dd><p>Sets the fallback scheme for this lookup method.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.FallbackElementClassLookup.fallback">
-<code class="sig-name descname">fallback</code><a class="headerlink" href="#lxml.etree.FallbackElementClassLookup.fallback" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.FallbackElementClassLookup.fallback">
+<span class="sig-name descname"><span class="pre">fallback</span></span><a class="headerlink" href="#lxml.etree.FallbackElementClassLookup.fallback" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.HTMLParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">HTMLParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_comments</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_pis</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">strip_cdata</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">no_network</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">target</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">schema</span><span class="p">:</span> <span class="n"><a class="reference internal" href="#lxml.etree.XMLSchema" title="lxml.etree.XMLSchema">XMLSchema</a></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">recover</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">compact</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">collect_ids</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">huge_tree</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTMLParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.HTMLParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">HTMLParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_comments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_pis</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip_cdata</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">no_network</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">schema</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#lxml.etree.XMLSchema" title="lxml.etree.XMLSchema"><span class="pre">XMLSchema</span></a></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recover</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compact</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collect_ids</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">huge_tree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTMLParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._FeedParser" title="lxml.etree._FeedParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._FeedParser</span></code></a></p>
 <p>The HTML parser.</p>
 <p>This parser allows reading HTML into a normal XML tree.  By
@@ -4842,8 +4754,8 @@ reasons.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.HTMLPullParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">HTMLPullParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">events</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTMLPullParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.HTMLPullParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">HTMLPullParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">events</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTMLPullParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.HTMLParser" title="lxml.etree.HTMLParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.HTMLParser</span></code></a></p>
 <p>HTML parser that collects parse events in an iterator.</p>
 <p>The collected events are the same as for iterparse(), but the
@@ -4857,15 +4769,15 @@ argument: <code class="docutils literal notranslate"><span class="pre">'start'</
 <p>To support loading external dependencies relative to the input
 source, you can pass the <code class="docutils literal notranslate"><span class="pre">base_url</span></code>.</p>
 <dl class="py method">
-<dt id="lxml.etree.HTMLPullParser.read_events">
-<code class="sig-name descname">read_events</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTMLPullParser.read_events" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.HTMLPullParser.read_events">
+<span class="sig-name descname"><span class="pre">read_events</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTMLPullParser.read_events" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.PIBase">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">PIBase</code><a class="headerlink" href="#lxml.etree.PIBase" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PIBase">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">PIBase</span></span><a class="headerlink" href="#lxml.etree.PIBase" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ProcessingInstruction" title="lxml.etree._ProcessingInstruction"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ProcessingInstruction</span></code></a></p>
 <p>All custom Processing Instruction classes must inherit from this one.</p>
 <p>To create an XML ProcessingInstruction instance, use the <code class="docutils literal notranslate"><span class="pre">PI()</span></code>
@@ -4879,15 +4791,15 @@ called after object creation.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.ParserBasedElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ParserBasedElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">fallback</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParserBasedElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ParserBasedElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ParserBasedElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParserBasedElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.FallbackElementClassLookup" title="lxml.etree.FallbackElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.FallbackElementClassLookup</span></code></a></p>
 <p>Element class lookup based on the XML parser.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.PyErrorLog">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">PyErrorLog</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">logger_name</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">logger</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PyErrorLog">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">PyErrorLog</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">logger_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">logger</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._BaseErrorLog" title="lxml.etree._BaseErrorLog"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._BaseErrorLog</span></code></a></p>
 <p>A global error log that connects to the Python stdlib logging package.</p>
 <p>The constructor accepts an optional logger name or a readily
@@ -4904,14 +4816,14 @@ logging levels, you can modify the level_map dictionary from a subclass.</p>
 object and calls <code class="docutils literal notranslate"><span class="pre">self.log(log_entry,</span> <span class="pre">format_string,</span> <span class="pre">arg1,</span> <span class="pre">arg2,</span> <span class="pre">...)</span></code>
 with appropriate data.</p>
 <dl class="py method">
-<dt id="lxml.etree.PyErrorLog.copy">
-<code class="sig-name descname">copy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog.copy" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PyErrorLog.copy">
+<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog.copy" title="Permalink to this definition"></a></dt>
 <dd><p>Dummy method that returns an empty error log.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.PyErrorLog.log">
-<code class="sig-name descname">log</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">log_entry</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog.log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PyErrorLog.log">
+<span class="sig-name descname"><span class="pre">log</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">log_entry</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog.log" title="Permalink to this definition"></a></dt>
 <dd><p>Called by the .receive() method to log a _LogEntry instance to
 the Python logging system.  This handles the error level
 mapping.</p>
@@ -4922,8 +4834,8 @@ override the .receive() method instead of this one.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.PyErrorLog.receive">
-<code class="sig-name descname">receive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">log_entry</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog.receive" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PyErrorLog.receive">
+<span class="sig-name descname"><span class="pre">receive</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">log_entry</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PyErrorLog.receive" title="Permalink to this definition"></a></dt>
 <dd><p>Receive a _LogEntry instance from the logging system.  Calls
 the .log() method with appropriate parameters:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">log_entry</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">log_entry</span><span class="p">))</span>
@@ -4934,15 +4846,15 @@ format.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.PyErrorLog.level_map">
-<code class="sig-name descname">level_map</code><a class="headerlink" href="#lxml.etree.PyErrorLog.level_map" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PyErrorLog.level_map">
+<span class="sig-name descname"><span class="pre">level_map</span></span><a class="headerlink" href="#lxml.etree.PyErrorLog.level_map" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.PythonElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">PythonElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">fallback</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PythonElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PythonElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">PythonElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PythonElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.FallbackElementClassLookup" title="lxml.etree.FallbackElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.FallbackElementClassLookup</span></code></a></p>
 <p>Element class lookup based on a subclass method.</p>
 <p>This class lookup scheme allows access to the entire XML tree in
@@ -4980,16 +4892,16 @@ purely read-only and does not support all features of the normal
 iteration methods).</p>
 <p>See <a class="reference external" href="https://lxml.de/element_classes.html">https://lxml.de/element_classes.html</a></p>
 <dl class="py method">
-<dt id="lxml.etree.PythonElementClassLookup.lookup">
-<code class="sig-name descname">lookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PythonElementClassLookup.lookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PythonElementClassLookup.lookup">
+<span class="sig-name descname"><span class="pre">lookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PythonElementClassLookup.lookup" title="Permalink to this definition"></a></dt>
 <dd><p>Override this method to implement your own lookup scheme.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.QName">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">QName</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text_or_uri_or_element</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.QName" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.QName">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">QName</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text_or_uri_or_element</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.QName" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>QName wrapper for qualified XML names.</p>
 <p>Pass a tag name by itself or a namespace URI and a tag name to
@@ -5006,32 +4918,32 @@ on assignment and set a qualified text value.  This is helpful in XML
 languages like SOAP or XML-Schema that use prefixed tag names in
 their text content.</p>
 <dl class="py attribute">
-<dt id="lxml.etree.QName.localname">
-<code class="sig-name descname">localname</code><a class="headerlink" href="#lxml.etree.QName.localname" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.QName.localname">
+<span class="sig-name descname"><span class="pre">localname</span></span><a class="headerlink" href="#lxml.etree.QName.localname" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.QName.namespace">
-<code class="sig-name descname">namespace</code><a class="headerlink" href="#lxml.etree.QName.namespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.QName.namespace">
+<span class="sig-name descname"><span class="pre">namespace</span></span><a class="headerlink" href="#lxml.etree.QName.namespace" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.QName.text">
-<code class="sig-name descname">text</code><a class="headerlink" href="#lxml.etree.QName.text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.QName.text">
+<span class="sig-name descname"><span class="pre">text</span></span><a class="headerlink" href="#lxml.etree.QName.text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.RelaxNG">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">RelaxNG</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">file</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNG">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">RelaxNG</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNG" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Validator" title="lxml.etree._Validator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Validator</span></code></a></p>
 <p>Turn a document into a Relax NG validator.</p>
 <p>Either pass a schema as Element or ElementTree, or pass a file or
 filename through the <code class="docutils literal notranslate"><span class="pre">file</span></code> keyword argument.</p>
 <dl class="py method">
-<dt id="lxml.etree.RelaxNG.from_rnc_string">
-<em class="property">classmethod </em><code class="sig-name descname">from_rnc_string</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">src</span></em>, <em class="sig-param"><span class="n">base_url</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNG.from_rnc_string" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNG.from_rnc_string">
+<em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">from_rnc_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">src</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNG.from_rnc_string" title="Permalink to this definition"></a></dt>
 <dd><p>Parse a RelaxNG schema in compact syntax from a text string</p>
 <p>Requires the rnc2rng package to be installed.</p>
 <p>Passing the source URL or file path of the source as ‘base_url’
@@ -5041,231 +4953,231 @@ will enable resolving resource references relative to the source.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.RelaxNGErrorTypes">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">RelaxNGErrorTypes</code><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">RelaxNGErrorTypes</span></span><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Libxml2 RelaxNG error types</p>
 <dl class="py method">
-<dt id="lxml.etree.RelaxNGErrorTypes._getName">
-<code class="sig-name descname">_getName</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">/</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes._getName" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes._getName">
+<span class="sig-name descname"><span class="pre">_getName</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">/</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes._getName" title="Permalink to this definition"></a></dt>
 <dd><p>Return the value for key if key is in the dictionary, else default.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS">
-<code class="sig-name descname">RELAXNG_ERR_ATTREXTRANS</code><em class="property"> = 20</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ATTREXTRANS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">20</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME">
-<code class="sig-name descname">RELAXNG_ERR_ATTRNAME</code><em class="property"> = 14</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ATTRNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">14</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS">
-<code class="sig-name descname">RELAXNG_ERR_ATTRNONS</code><em class="property"> = 16</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ATTRNONS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">16</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID">
-<code class="sig-name descname">RELAXNG_ERR_ATTRVALID</code><em class="property"> = 24</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ATTRVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">24</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS">
-<code class="sig-name descname">RELAXNG_ERR_ATTRWRONGNS</code><em class="property"> = 18</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ATTRWRONGNS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">18</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID">
-<code class="sig-name descname">RELAXNG_ERR_CONTENTVALID</code><em class="property"> = 25</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_CONTENTVALID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">25</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM">
-<code class="sig-name descname">RELAXNG_ERR_DATAELEM</code><em class="property"> = 28</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_DATAELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">28</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE">
-<code class="sig-name descname">RELAXNG_ERR_DATATYPE</code><em class="property"> = 31</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_DATATYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">31</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DUPID">
-<code class="sig-name descname">RELAXNG_ERR_DUPID</code><em class="property"> = 4</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DUPID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DUPID">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_DUPID</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DUPID" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS">
-<code class="sig-name descname">RELAXNG_ERR_ELEMEXTRANS</code><em class="property"> = 19</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ELEMEXTRANS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">19</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME">
-<code class="sig-name descname">RELAXNG_ERR_ELEMNAME</code><em class="property"> = 13</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ELEMNAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">13</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS">
-<code class="sig-name descname">RELAXNG_ERR_ELEMNONS</code><em class="property"> = 15</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ELEMNONS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">15</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY">
-<code class="sig-name descname">RELAXNG_ERR_ELEMNOTEMPTY</code><em class="property"> = 21</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ELEMNOTEMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">21</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG">
-<code class="sig-name descname">RELAXNG_ERR_ELEMWRONG</code><em class="property"> = 38</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ELEMWRONG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">38</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS">
-<code class="sig-name descname">RELAXNG_ERR_ELEMWRONGNS</code><em class="property"> = 17</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_ELEMWRONGNS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">17</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT">
-<code class="sig-name descname">RELAXNG_ERR_EXTRACONTENT</code><em class="property"> = 26</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_EXTRACONTENT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">26</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA">
-<code class="sig-name descname">RELAXNG_ERR_EXTRADATA</code><em class="property"> = 35</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_EXTRADATA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">35</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA">
-<code class="sig-name descname">RELAXNG_ERR_INTEREXTRA</code><em class="property"> = 12</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_INTEREXTRA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">12</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL">
-<code class="sig-name descname">RELAXNG_ERR_INTERNAL</code><em class="property"> = 37</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_INTERNAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">37</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA">
-<code class="sig-name descname">RELAXNG_ERR_INTERNODATA</code><em class="property"> = 10</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_INTERNODATA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">10</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ">
-<code class="sig-name descname">RELAXNG_ERR_INTERSEQ</code><em class="property"> = 11</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_INTERSEQ</span></span><em class="property"> <span class="pre">=</span> <span class="pre">11</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR">
-<code class="sig-name descname">RELAXNG_ERR_INVALIDATTR</code><em class="property"> = 27</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_INVALIDATTR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">27</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA">
-<code class="sig-name descname">RELAXNG_ERR_LACKDATA</code><em class="property"> = 36</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_LACKDATA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">36</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LIST">
-<code class="sig-name descname">RELAXNG_ERR_LIST</code><em class="property"> = 33</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LIST" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LIST">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_LIST</span></span><em class="property"> <span class="pre">=</span> <span class="pre">33</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LIST" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM">
-<code class="sig-name descname">RELAXNG_ERR_LISTELEM</code><em class="property"> = 30</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_LISTELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">30</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY">
-<code class="sig-name descname">RELAXNG_ERR_LISTEMPTY</code><em class="property"> = 9</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_LISTEMPTY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">9</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA">
-<code class="sig-name descname">RELAXNG_ERR_LISTEXTRA</code><em class="property"> = 8</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_LISTEXTRA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">8</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_MEMORY">
-<code class="sig-name descname">RELAXNG_ERR_MEMORY</code><em class="property"> = 1</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_MEMORY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_MEMORY">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_MEMORY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_MEMORY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE">
-<code class="sig-name descname">RELAXNG_ERR_NODEFINE</code><em class="property"> = 7</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_NODEFINE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">7</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOELEM">
-<code class="sig-name descname">RELAXNG_ERR_NOELEM</code><em class="property"> = 22</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOELEM">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_NOELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">22</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR">
-<code class="sig-name descname">RELAXNG_ERR_NOGRAMMAR</code><em class="property"> = 34</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_NOGRAMMAR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">34</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE">
-<code class="sig-name descname">RELAXNG_ERR_NOSTATE</code><em class="property"> = 6</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_NOSTATE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">6</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM">
-<code class="sig-name descname">RELAXNG_ERR_NOTELEM</code><em class="property"> = 23</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_NOTELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">23</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG">
-<code class="sig-name descname">RELAXNG_ERR_TEXTWRONG</code><em class="property"> = 39</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_TEXTWRONG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">39</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPE">
-<code class="sig-name descname">RELAXNG_ERR_TYPE</code><em class="property"> = 2</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPE">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_TYPE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP">
-<code class="sig-name descname">RELAXNG_ERR_TYPECMP</code><em class="property"> = 5</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_TYPECMP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">5</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL">
-<code class="sig-name descname">RELAXNG_ERR_TYPEVAL</code><em class="property"> = 3</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_TYPEVAL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALELEM">
-<code class="sig-name descname">RELAXNG_ERR_VALELEM</code><em class="property"> = 29</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALELEM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALELEM">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_VALELEM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">29</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALELEM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALUE">
-<code class="sig-name descname">RELAXNG_ERR_VALUE</code><em class="property"> = 32</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALUE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALUE">
+<span class="sig-name descname"><span class="pre">RELAXNG_ERR_VALUE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">32</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALUE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes.RELAXNG_OK">
-<code class="sig-name descname">RELAXNG_OK</code><em class="property"> = 0</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_OK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes.RELAXNG_OK">
+<span class="sig-name descname"><span class="pre">RELAXNG_OK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">0</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes.RELAXNG_OK" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.RelaxNGErrorTypes._names">
-<code class="sig-name descname">_names</code><em class="property"> = {0: 'RELAXNG_OK', 1: 'RELAXNG_ERR_MEMORY', 2: 'RELAXNG_ERR_TYPE', 3: 'RELAXNG_ERR_TYPEVAL', 4: 'RELAXNG_ERR_DUPID', 5: 'RELAXNG_ERR_TYPECMP', 6: 'RELAXNG_ERR_NOSTATE', 7: 'RELAXNG_ERR_NODEFINE', 8: 'RELAXNG_ERR_LISTEXTRA', 9: 'RELAXNG_ERR_LISTEMPTY', 10: 'RELAXNG_ERR_INTERNODATA', 11: 'RELAXNG_ERR_INTERSEQ', 12: 'RELAXNG_ERR_INTEREXTRA', 13: 'RELAXNG_ERR_ELEMNAME', 14: 'RELAXNG_ERR_ATTRNAME', 15: 'RELAXNG_ERR_ELEMNONS', 16: 'RELAXNG_ERR_ATTRNONS', 17: 'RELAXNG_ERR_ELEMWRONGNS', 18: 'RELAXNG_ERR_ATTRWRONGNS', 19: 'RELAXNG_ERR_ELEMEXTRANS', 20: 'RELAXNG_ERR_ATTREXTRANS', 21: 'RELAXNG_ERR_ELEMNOTEMPTY', 22: 'RELAXNG_ERR_NOELEM', 23: 'RELAXNG_ERR_NOTELEM', 24: 'RELAXNG_ERR_ATTRVALID', 25: 'RELAXNG_ERR_CONTENTVALID', 26: 'RELAXNG_ERR_EXTRACONTENT', 27: 'RELAXNG_ERR_INVALIDATTR', 28: 'RELAXNG_ERR_DATAELEM', 29: 'RELAXNG_ERR_VALELEM', 30: 'RELAXNG_ERR_LISTELEM', 31: 'RELAXNG_ERR_DATATYPE', 32: 'RELAXNG_ERR_VALUE', 33: 'RELAXNG_ERR_LIST', 34: 'RELAXNG_ERR_NOGRAMMAR', 35: 'RELAXNG_ERR_EXTRADATA', 36: 'RELAXNG_ERR_LACKDATA', 37: 'RELAXNG_ERR_INTERNAL', 38: 'RELAXNG_ERR_ELEMWRONG', 39: 'RELAXNG_ERR_TEXTWRONG'}</em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes._names" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGErrorTypes._names">
+<span class="sig-name descname"><span class="pre">_names</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{0:</span> <span class="pre">'RELAXNG_OK',</span> <span class="pre">1:</span> <span class="pre">'RELAXNG_ERR_MEMORY',</span> <span class="pre">2:</span> <span class="pre">'RELAXNG_ERR_TYPE',</span> <span class="pre">3:</span> <span class="pre">'RELAXNG_ERR_TYPEVAL',</span> <span class="pre">4:</span> <span class="pre">'RELAXNG_ERR_DUPID',</span> <span class="pre">5:</span> <span class="pre">'RELAXNG_ERR_TYPECMP',</span> <span class="pre">6:</span> <span class="pre">'RELAXNG_ERR_NOSTATE',</span> <span class="pre">7:</span> <span class="pre">'RELAXNG_ERR_NODEFINE',</span> <span class="pre">8:</span> <span class="pre">'RELAXNG_ERR_LISTEXTRA',</span> <span class="pre">9:</span> <span class="pre">'RELAXNG_ERR_LISTEMPTY',</span> <span class="pre">10:</span> <span class="pre">'RELAXNG_ERR_INTERNODATA',</span> <span class="pre">11:</span> <span class="pre">'RELAXNG_ERR_INTERSEQ',</span> <span class="pre">12:</span> <span class="pre">'RELAXNG_ERR_INTEREXTRA',</span> <span class="pre">13:</span> <span class="pre">'RELAXNG_ERR_ELEMNAME',</span> <span class="pre">14:</span> <span class="pre">'RELAXNG_ERR_ATTRNAME',</span> <span class="pre">15:</span> <span class="pre">'RELAXNG_ERR_ELEMNONS',</span> <span class="pre">16:</span> <span class="pre">'RELAXNG_ERR_ATTRNONS',</span> <span class="pre">17:</span> <span class="pre">'RELAXNG_ERR_ELEMWRONGNS',</span> <span class="pre">18:</span> <span class="pre">'RELAXNG_ERR_ATTRWRONGNS',</span> <span class="pre">19:</span> <span class="pre">'RELAXNG_ERR_ELEMEXTRANS',</span> <span class="pre">20:</span> <span class="pre">'RELAXNG_ERR_ATTREXTRANS',</span> <span class="pre">21:</span> <span class="pre">'RELAXNG_ERR_ELEMNOTEMPTY',</span> <span class="pre">22:</span> <span class="pre">'RELAXNG_ERR_NOELEM',</span> <span class="pre">23:</span> <span class="pre">'RELAXNG_ERR_NOTELEM',</span> <span class="pre">24:</span> <span class="pre">'RELAXNG_ERR_ATTRVALID',</span> <span class="pre">25:</span> <span class="pre">'RELAXNG_ERR_CONTENTVALID',</span> <span class="pre">26:</span> <span class="pre">'RELAXNG_ERR_EXTRACONTENT',</span> <span class="pre">27:</span> <span class="pre">'RELAXNG_ERR_INVALIDATTR',</span> <span class="pre">28:</span> <span class="pre">'RELAXNG_ERR_DATAELEM',</span> <span class="pre">29:</span> <span class="pre">'RELAXNG_ERR_VALELEM',</span> <span class="pre">30:</span> <span class="pre">'RELAXNG_ERR_LISTELEM',</span> <span class="pre">31:</span> <span class="pre">'RELAXNG_ERR_DATATYPE',</span> <span class="pre">32:</span> <span class="pre">'RELAXNG_ERR_VALUE',</span> <span class="pre">33:</span> <span class="pre">'RELAXNG_ERR_LIST',</span> <span class="pre">34:</span> <span class="pre">'RELAXNG_ERR_NOGRAMMAR',</span> <span class="pre">35:</span> <span class="pre">'RELAXNG_ERR_EXTRADATA',</span> <span class="pre">36:</span> <span class="pre">'RELAXNG_ERR_LACKDATA',</span> <span class="pre">37:</span> <span class="pre">'RELAXNG_ERR_INTERNAL',</span> <span class="pre">38:</span> <span class="pre">'RELAXNG_ERR_ELEMWRONG',</span> <span class="pre">39:</span> <span class="pre">'RELAXNG_ERR_TEXTWRONG'}</span></em><a class="headerlink" href="#lxml.etree.RelaxNGErrorTypes._names" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.Resolver">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Resolver</code><a class="headerlink" href="#lxml.etree.Resolver" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Resolver">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Resolver</span></span><a class="headerlink" href="#lxml.etree.Resolver" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>This is the base class of all resolvers.</p>
 <dl class="py method">
-<dt id="lxml.etree.Resolver.resolve">
-<code class="sig-name descname">resolve</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">system_url</span></em>, <em class="sig-param"><span class="n">public_id</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Resolver.resolve">
+<span class="sig-name descname"><span class="pre">resolve</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">system_url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">public_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve" title="Permalink to this definition"></a></dt>
 <dd><p>Override this method to resolve an external source by
 <code class="docutils literal notranslate"><span class="pre">system_url</span></code> and <code class="docutils literal notranslate"><span class="pre">public_id</span></code>.  The third argument is an
 opaque context object.</p>
@@ -5273,15 +5185,15 @@ opaque context object.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.Resolver.resolve_empty">
-<code class="sig-name descname">resolve_empty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_empty" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Resolver.resolve_empty">
+<span class="sig-name descname"><span class="pre">resolve_empty</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_empty" title="Permalink to this definition"></a></dt>
 <dd><p>Return an empty input document.</p>
 <p>Pass context as parameter.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.Resolver.resolve_file">
-<code class="sig-name descname">resolve_file</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">f</span></em>, <em class="sig-param"><span class="n">context</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">close</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_file" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Resolver.resolve_file">
+<span class="sig-name descname"><span class="pre">resolve_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">f</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">close</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_file" title="Permalink to this definition"></a></dt>
 <dd><p>Return an open file-like object as input document.</p>
 <p>Pass open file and context as parameters.  You can pass the
 base URL or filename of the file through the <code class="docutils literal notranslate"><span class="pre">base_url</span></code>
@@ -5292,16 +5204,16 @@ especially in threaded environments.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.Resolver.resolve_filename">
-<code class="sig-name descname">resolve_filename</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">filename</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_filename" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Resolver.resolve_filename">
+<span class="sig-name descname"><span class="pre">resolve_filename</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filename</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_filename" title="Permalink to this definition"></a></dt>
 <dd><p>Return the name of a parsable file as input document.</p>
 <p>Pass filename and context as parameters.  You can also pass a
 URL with an HTTP, FTP or file target.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.Resolver.resolve_string">
-<code class="sig-name descname">resolve_string</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">context</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_string" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Resolver.resolve_string">
+<span class="sig-name descname"><span class="pre">resolve_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Resolver.resolve_string" title="Permalink to this definition"></a></dt>
 <dd><p>Return a parsable string as input document.</p>
 <p>Pass data string and context as parameters.  You can pass the
 source URL or filename through the <code class="docutils literal notranslate"><span class="pre">base_url</span></code> keyword
@@ -5311,8 +5223,8 @@ argument.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.Schematron">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Schematron</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">file</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Schematron" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Schematron">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Schematron</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Schematron" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Validator" title="lxml.etree._Validator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Validator</span></code></a></p>
 <p>A Schematron validator.</p>
 <p>Pass a root Element or an ElementTree to turn it into a validator.
@@ -5361,16 +5273,16 @@ errors in lxml.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.SiblingsIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">SiblingsIterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">node</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">preceding</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SiblingsIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.SiblingsIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">SiblingsIterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">preceding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SiblingsIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ElementMatchIterator" title="lxml.etree._ElementMatchIterator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ElementMatchIterator</span></code></a></p>
 <p>Iterates over the siblings of an element.</p>
 <p>You can pass the boolean keyword <code class="docutils literal notranslate"><span class="pre">preceding</span></code> to specify the direction.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.TreeBuilder">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">TreeBuilder</code><a class="headerlink" href="#lxml.etree.TreeBuilder" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">TreeBuilder</span></span><a class="headerlink" href="#lxml.etree.TreeBuilder" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._SaxParserTarget" title="lxml.etree._SaxParserTarget"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._SaxParserTarget</span></code></a></p>
 <dl class="simple">
 <dt>TreeBuilder(self, element_factory=None, parser=None,</dt><dd><p>comment_factory=None, pi_factory=None,
@@ -5384,64 +5296,64 @@ elements, comments and processing instructions.</p>
 the tree, but they can be ignored by passing the respective flags.</p>
 <p>The final tree is returned by the <code class="docutils literal notranslate"><span class="pre">close()</span></code> method.</p>
 <dl class="py method">
-<dt id="lxml.etree.TreeBuilder.close">
-<code class="sig-name descname">close</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.close" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.close" title="Permalink to this definition"></a></dt>
 <dd><p>Flushes the builder buffers, and returns the toplevel document
 element.  Raises XMLSyntaxError on inconsistencies.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.TreeBuilder.comment">
-<code class="sig-name descname">comment</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">comment</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.comment" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder.comment">
+<span class="sig-name descname"><span class="pre">comment</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">comment</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.comment" title="Permalink to this definition"></a></dt>
 <dd><p>Creates a comment using the factory, appends it (unless disabled)
 and returns it.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.TreeBuilder.data">
-<code class="sig-name descname">data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.data" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder.data">
+<span class="sig-name descname"><span class="pre">data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.data" title="Permalink to this definition"></a></dt>
 <dd><p>Adds text to the current element.  The value should be either an
 8-bit string containing ASCII text, or a Unicode string.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.TreeBuilder.end">
-<code class="sig-name descname">end</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.end" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder.end">
+<span class="sig-name descname"><span class="pre">end</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.end" title="Permalink to this definition"></a></dt>
 <dd><p>Closes the current element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.TreeBuilder.pi">
-<code class="sig-name descname">pi</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">target</span></em>, <em class="sig-param"><span class="n">data</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.pi" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder.pi">
+<span class="sig-name descname"><span class="pre">pi</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.pi" title="Permalink to this definition"></a></dt>
 <dd><p>Creates a processing instruction using the factory, appends it
 (unless disabled) and returns it.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.TreeBuilder.start">
-<code class="sig-name descname">start</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span></em>, <em class="sig-param"><span class="n">attrs</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.start" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.TreeBuilder.start">
+<span class="sig-name descname"><span class="pre">start</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.TreeBuilder.start" title="Permalink to this definition"></a></dt>
 <dd><p>Opens a new element.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XInclude">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XInclude</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XInclude" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XInclude">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XInclude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XInclude" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>XInclude processor.</p>
 <p>Create an instance and call it on an Element to run XInclude
 processing.</p>
 <dl class="py attribute">
-<dt id="lxml.etree.XInclude.error_log">
-<code class="sig-name descname">error_log</code><a class="headerlink" href="#lxml.etree.XInclude.error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XInclude.error_log">
+<span class="sig-name descname"><span class="pre">error_log</span></span><a class="headerlink" href="#lxml.etree.XInclude.error_log" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XMLParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attribute_defaults</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">dtd_validation</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">load_dtd</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">no_network</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">ns_clean</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">recover</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">schema</span><span class="p">:</span> <span class="n"><a class="reference internal" href="#lxml.etree.XMLSchema" title="lxml.etree.XMLSchema">XMLSchema</a></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">huge_tree</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">resolve_entities</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">remove_comments</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_pis</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">strip_cdata</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">collect_ids</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">target</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compact</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attribute_defaults</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dtd_validation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">load_dtd</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">no_network</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ns_clean</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recover</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">schema</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#lxml.etree.XMLSchema" title="lxml.etree.XMLSchema"><span class="pre">XMLSchema</span></a></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">huge_tree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">resolve_entities</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_comments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_pis</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip_cdata</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">collect_ids</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compact</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._FeedParser" title="lxml.etree._FeedParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._FeedParser</span></code></a></p>
 <p>The XML parser.</p>
 <p>Parsers can be supplied as additional argument to various parse
@@ -5487,8 +5399,8 @@ apply to the default parser.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XMLPullParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLPullParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">events</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLPullParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLPullParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLPullParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">events</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLPullParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XMLParser" title="lxml.etree.XMLParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XMLParser</span></code></a></p>
 <p>XML parser that collects parse events in an iterator.</p>
 <p>The collected events are the same as for iterparse(), but the
@@ -5502,15 +5414,15 @@ argument: <code class="docutils literal notranslate"><span class="pre">'start'</
 <p>To support loading external dependencies relative to the input
 source, you can pass the <code class="docutils literal notranslate"><span class="pre">base_url</span></code>.</p>
 <dl class="py method">
-<dt id="lxml.etree.XMLPullParser.read_events">
-<code class="sig-name descname">read_events</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLPullParser.read_events" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLPullParser.read_events">
+<span class="sig-name descname"><span class="pre">read_events</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLPullParser.read_events" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XMLSchema">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLSchema</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">file</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchema" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLSchema">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLSchema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchema" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._Validator" title="lxml.etree._Validator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Validator</span></code></a></p>
 <p>Turn a document into an XML Schema validator.</p>
 <p>Either pass a schema as Element or ElementTree, or pass a file or
@@ -5520,14 +5432,14 @@ schema insert default/fixed attributes into validated documents.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.XMLTreeBuilder">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLTreeBuilder</code><a class="headerlink" href="#lxml.etree.XMLTreeBuilder" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLTreeBuilder">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLTreeBuilder</span></span><a class="headerlink" href="#lxml.etree.XMLTreeBuilder" title="Permalink to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#lxml.etree.ETCompatXMLParser" title="lxml.etree.ETCompatXMLParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ETCompatXMLParser</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XPath">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">regexp</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPath">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">regexp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPath" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._XPathEvaluatorBase" title="lxml.etree._XPathEvaluatorBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._XPathEvaluatorBase</span></code></a></p>
 <p>A compiled XPath expression that can be called on Elements and ElementTrees.</p>
 <p>Besides the XPath expression, you can pass prefix-namespace
@@ -5538,16 +5450,16 @@ boolean keyword (defaults to True).  Smart strings will be
 returned for string results unless you pass
 <code class="docutils literal notranslate"><span class="pre">smart_strings=False</span></code>.</p>
 <dl class="py attribute">
-<dt id="lxml.etree.XPath.path">
-<code class="sig-name descname">path</code><a class="headerlink" href="#lxml.etree.XPath.path" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPath.path">
+<span class="sig-name descname"><span class="pre">path</span></span><a class="headerlink" href="#lxml.etree.XPath.path" title="Permalink to this definition"></a></dt>
 <dd><p>The literal XPath expression.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XPathDocumentEvaluator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathDocumentEvaluator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">regexp</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathDocumentEvaluator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathDocumentEvaluator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathDocumentEvaluator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">regexp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathDocumentEvaluator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.XPathElementEvaluator" title="lxml.etree.XPathElementEvaluator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XPathElementEvaluator</span></code></a></p>
 <p>Create an XPath evaluator for an ElementTree.</p>
 <p>Additional namespace declarations can be passed with the
@@ -5558,8 +5470,8 @@ you pass <code class="docutils literal notranslate"><span class="pre">smart_stri
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XPathElementEvaluator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathElementEvaluator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">regexp</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathElementEvaluator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathElementEvaluator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathElementEvaluator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">regexp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathElementEvaluator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._XPathEvaluatorBase" title="lxml.etree._XPathEvaluatorBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._XPathEvaluatorBase</span></code></a></p>
 <p>Create an XPath evaluator for an element.</p>
 <p>Absolute XPath expressions (starting with ‘/’) will be evaluated against
@@ -5570,22 +5482,22 @@ can be disabled with the ‘regexp’ boolean keyword (defaults to
 True).  Smart strings will be returned for string results unless
 you pass <code class="docutils literal notranslate"><span class="pre">smart_strings=False</span></code>.</p>
 <dl class="py method">
-<dt id="lxml.etree.XPathElementEvaluator.register_namespace">
-<code class="sig-name descname">register_namespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">prefix</span></em>, <em class="sig-param"><span class="n">uri</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathElementEvaluator.register_namespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathElementEvaluator.register_namespace">
+<span class="sig-name descname"><span class="pre">register_namespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prefix</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathElementEvaluator.register_namespace" title="Permalink to this definition"></a></dt>
 <dd><p>Register a namespace with the XPath context.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.XPathElementEvaluator.register_namespaces">
-<code class="sig-name descname">register_namespaces</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">namespaces</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathElementEvaluator.register_namespaces" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathElementEvaluator.register_namespaces">
+<span class="sig-name descname"><span class="pre">register_namespaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">namespaces</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathElementEvaluator.register_namespaces" title="Permalink to this definition"></a></dt>
 <dd><p>Register a prefix -&gt; uri dict.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XSLT">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLT</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">xslt_input</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">regexp</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">access_control</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLT">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLT</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xslt_input</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">regexp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">access_control</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Turn an XSL document into an XSLT object.</p>
 <p>Calling this object on a tree or Element will execute the XSLT:</p>
@@ -5609,8 +5521,8 @@ system (see <cite>XSLTAccessControl</cite>)</p></li>
 <p>Other keyword arguments of the call are passed to the stylesheet
 as parameters.</p>
 <dl class="py method">
-<dt id="lxml.etree.XSLT.apply">
-<code class="sig-name descname">apply</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_input</span></em>, <em class="sig-param"><span class="n">profile_run</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.apply" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLT.apply">
+<span class="sig-name descname"><span class="pre">apply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_input</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">profile_run</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.apply" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Deprecated</dt>
 <dd class="field-odd"><p>call the object, not this method.</p>
@@ -5619,8 +5531,8 @@ as parameters.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.XSLT.set_global_max_depth">
-<em class="property">static </em><code class="sig-name descname">set_global_max_depth</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">max_depth</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.set_global_max_depth" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLT.set_global_max_depth">
+<em class="property"><span class="pre">static</span> </em><span class="sig-name descname"><span class="pre">set_global_max_depth</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">max_depth</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.set_global_max_depth" title="Permalink to this definition"></a></dt>
 <dd><p>The maximum traversal depth that the stylesheet engine will allow.
 This does not only count the template recursion depth but also takes
 the number of variables/parameters into account.  The required setting
@@ -5634,8 +5546,8 @@ libxslt does not support it at a per-stylesheet level.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.XSLT.strparam">
-<em class="property">static </em><code class="sig-name descname">strparam</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">strval</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.strparam" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLT.strparam">
+<em class="property"><span class="pre">static</span> </em><span class="sig-name descname"><span class="pre">strparam</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">strval</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.strparam" title="Permalink to this definition"></a></dt>
 <dd><p>Mark an XSLT string parameter that requires quote escaping
 before passing it into the transformation.  Use it like this:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">some_strval</span> <span class="o">=</span> <span class="n">XSLT</span><span class="o">.</span><span class="n">strparam</span><span class="p">(</span>
@@ -5646,8 +5558,8 @@ before passing it into the transformation.  Use it like this:</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.XSLT.tostring">
-<code class="sig-name descname">tostring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">result_tree</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.tostring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLT.tostring">
+<span class="sig-name descname"><span class="pre">tostring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">result_tree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLT.tostring" title="Permalink to this definition"></a></dt>
 <dd><p>Save result doc to string based on stylesheet output method.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Deprecated</dt>
@@ -5657,16 +5569,16 @@ before passing it into the transformation.  Use it like this:</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.XSLT.error_log">
-<code class="sig-name descname">error_log</code><a class="headerlink" href="#lxml.etree.XSLT.error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLT.error_log">
+<span class="sig-name descname"><span class="pre">error_log</span></span><a class="headerlink" href="#lxml.etree.XSLT.error_log" title="Permalink to this definition"></a></dt>
 <dd><p>The log of errors and warnings of an XSLT execution.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XSLTAccessControl">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTAccessControl</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">read_file</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">write_file</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">create_dir</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">read_network</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">write_network</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTAccessControl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTAccessControl">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTAccessControl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">read_file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">write_file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">create_dir</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">read_network</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">write_network</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTAccessControl" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Access control for XSLT: reading/writing files, directories and
 network I/O.  Access to a type of resource is granted or denied by
@@ -5685,31 +5597,31 @@ to deny everything, and a <cite>DENY_WRITE</cite> member that denies all
 write access but allows read access.</p>
 <p>See <cite>XSLT</cite>.</p>
 <dl class="py attribute">
-<dt id="lxml.etree.XSLTAccessControl.DENY_ALL">
-<code class="sig-name descname">DENY_ALL</code><em class="property"> = XSLTAccessControl(create_dir=False, read_file=False, read_network=False, write_file=False, write_network=False)</em><a class="headerlink" href="#lxml.etree.XSLTAccessControl.DENY_ALL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTAccessControl.DENY_ALL">
+<span class="sig-name descname"><span class="pre">DENY_ALL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">XSLTAccessControl(create_dir=False,</span> <span class="pre">read_file=False,</span> <span class="pre">read_network=False,</span> <span class="pre">write_file=False,</span> <span class="pre">write_network=False)</span></em><a class="headerlink" href="#lxml.etree.XSLTAccessControl.DENY_ALL" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.XSLTAccessControl.DENY_WRITE">
-<code class="sig-name descname">DENY_WRITE</code><em class="property"> = XSLTAccessControl(create_dir=False, read_file=True, read_network=True, write_file=False, write_network=False)</em><a class="headerlink" href="#lxml.etree.XSLTAccessControl.DENY_WRITE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTAccessControl.DENY_WRITE">
+<span class="sig-name descname"><span class="pre">DENY_WRITE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">XSLTAccessControl(create_dir=False,</span> <span class="pre">read_file=True,</span> <span class="pre">read_network=True,</span> <span class="pre">write_file=False,</span> <span class="pre">write_network=False)</span></em><a class="headerlink" href="#lxml.etree.XSLTAccessControl.DENY_WRITE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.XSLTAccessControl.options">
-<code class="sig-name descname">options</code><a class="headerlink" href="#lxml.etree.XSLTAccessControl.options" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTAccessControl.options">
+<span class="sig-name descname"><span class="pre">options</span></span><a class="headerlink" href="#lxml.etree.XSLTAccessControl.options" title="Permalink to this definition"></a></dt>
 <dd><p>The access control configuration as a map of options.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.XSLTExtension">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XSLTExtension</code><a class="headerlink" href="#lxml.etree.XSLTExtension" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTExtension">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XSLTExtension</span></span><a class="headerlink" href="#lxml.etree.XSLTExtension" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Base class of an XSLT extension element.</p>
 <dl class="py method">
-<dt id="lxml.etree.XSLTExtension.apply_templates">
-<code class="sig-name descname">apply_templates</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">context</span></em>, <em class="sig-param"><span class="n">node</span></em>, <em class="sig-param"><span class="n">output_parent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">elements_only</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtension.apply_templates" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTExtension.apply_templates">
+<span class="sig-name descname"><span class="pre">apply_templates</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_parent</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elements_only</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtension.apply_templates" title="Permalink to this definition"></a></dt>
 <dd><p>Call this method to retrieve the result of applying templates
 to an element.</p>
 <p>The return value is a list of elements or text strings that
@@ -5728,8 +5640,8 @@ case.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.XSLTExtension.execute">
-<code class="sig-name descname">execute</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">context</span></em>, <em class="sig-param"><span class="n">self_node</span></em>, <em class="sig-param"><span class="n">input_node</span></em>, <em class="sig-param"><span class="n">output_parent</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtension.execute" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTExtension.execute">
+<span class="sig-name descname"><span class="pre">execute</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">self_node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_node</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_parent</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtension.execute" title="Permalink to this definition"></a></dt>
 <dd><p>Execute this extension element.</p>
 <p>Subclasses must override this method.  They may append
 elements to the <cite>output_parent</cite> element here, or set its text
@@ -5742,8 +5654,8 @@ was added to the output tree yet).</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.XSLTExtension.process_children">
-<code class="sig-name descname">process_children</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">context</span></em>, <em class="sig-param"><span class="n">output_parent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">elements_only</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtension.process_children" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XSLTExtension.process_children">
+<span class="sig-name descname"><span class="pre">process_children</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_parent</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elements_only</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtension.process_children" title="Permalink to this definition"></a></dt>
 <dd><p>Call this method to process the XSLT content of the extension
 element itself.</p>
 <p>The return value is a list of elements or text strings that
@@ -5764,102 +5676,102 @@ case.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._Attrib">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_Attrib</code><a class="headerlink" href="#lxml.etree._Attrib" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_Attrib</span></span><a class="headerlink" href="#lxml.etree._Attrib" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>A dict-like proxy for the <code class="docutils literal notranslate"><span class="pre">Element.attrib</span></code> property.</p>
 <dl class="py method">
-<dt id="lxml.etree._Attrib.clear">
-<code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.clear" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.clear">
+<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.clear" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.get">
-<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">default</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.get" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.get">
+<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.get" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.has_key">
-<code class="sig-name descname">has_key</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.has_key" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.has_key">
+<span class="sig-name descname"><span class="pre">has_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.has_key" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.items">
-<code class="sig-name descname">items</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.items" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.items">
+<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.items" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.iteritems">
-<code class="sig-name descname">iteritems</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.iteritems" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.iteritems">
+<span class="sig-name descname"><span class="pre">iteritems</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.iteritems" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.iterkeys">
-<code class="sig-name descname">iterkeys</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.iterkeys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.iterkeys">
+<span class="sig-name descname"><span class="pre">iterkeys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.iterkeys" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.itervalues">
-<code class="sig-name descname">itervalues</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.itervalues" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.itervalues">
+<span class="sig-name descname"><span class="pre">itervalues</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.itervalues" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.keys">
-<code class="sig-name descname">keys</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.keys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.keys">
+<span class="sig-name descname"><span class="pre">keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.keys" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.pop">
-<code class="sig-name descname">pop</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">default</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.pop" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.pop">
+<span class="sig-name descname"><span class="pre">pop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">default</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.pop" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.update">
-<code class="sig-name descname">update</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sequence_or_dict</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.update" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.update">
+<span class="sig-name descname"><span class="pre">update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sequence_or_dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.update" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Attrib.values">
-<code class="sig-name descname">values</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.values" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Attrib.values">
+<span class="sig-name descname"><span class="pre">values</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Attrib.values" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._BaseErrorLog">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_BaseErrorLog</code><a class="headerlink" href="#lxml.etree._BaseErrorLog" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._BaseErrorLog">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_BaseErrorLog</span></span><a class="headerlink" href="#lxml.etree._BaseErrorLog" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._BaseErrorLog.copy">
-<code class="sig-name descname">copy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._BaseErrorLog.copy" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._BaseErrorLog.copy">
+<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._BaseErrorLog.copy" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._BaseErrorLog.receive">
-<code class="sig-name descname">receive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">entry</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._BaseErrorLog.receive" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._BaseErrorLog.receive">
+<span class="sig-name descname"><span class="pre">receive</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">entry</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._BaseErrorLog.receive" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._BaseErrorLog.last_error">
-<code class="sig-name descname">last_error</code><a class="headerlink" href="#lxml.etree._BaseErrorLog.last_error" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._BaseErrorLog.last_error">
+<span class="sig-name descname"><span class="pre">last_error</span></span><a class="headerlink" href="#lxml.etree._BaseErrorLog.last_error" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._Comment">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_Comment</code><a class="headerlink" href="#lxml.etree._Comment" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Comment">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_Comment</span></span><a class="headerlink" href="#lxml.etree._Comment" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.__ContentOnlyElement</span></code></p>
 <dl class="py attribute">
-<dt id="lxml.etree._Comment.tag">
-<code class="sig-name descname">tag</code><a class="headerlink" href="#lxml.etree._Comment.tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Comment.tag">
+<span class="sig-name descname"><span class="pre">tag</span></span><a class="headerlink" href="#lxml.etree._Comment.tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._Document">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_Document</code><a class="headerlink" href="#lxml.etree._Document" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Document">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_Document</span></span><a class="headerlink" href="#lxml.etree._Document" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Internal base class to reference a libxml document.</p>
 <p>When instances of this class are garbage collected, the libxml
@@ -5867,34 +5779,34 @@ document is cleaned up.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._DomainErrorLog">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_DomainErrorLog</code><a class="headerlink" href="#lxml.etree._DomainErrorLog" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._DomainErrorLog">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_DomainErrorLog</span></span><a class="headerlink" href="#lxml.etree._DomainErrorLog" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ErrorLog" title="lxml.etree._ErrorLog"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ErrorLog</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.etree._DomainErrorLog.receive">
-<code class="sig-name descname">receive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">entry</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._DomainErrorLog.receive" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._DomainErrorLog.receive">
+<span class="sig-name descname"><span class="pre">receive</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">entry</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._DomainErrorLog.receive" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._Element">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_Element</code><a class="headerlink" href="#lxml.etree._Element" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_Element</span></span><a class="headerlink" href="#lxml.etree._Element" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Element class.</p>
 <p>References a document object and a libxml node.</p>
 <p>By pointing to a Document instance, a reference is kept to
 _Document as long as there is some pointer to a node in it.</p>
 <dl class="py method">
-<dt id="lxml.etree._Element._init">
-<code class="sig-name descname">_init</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element._init" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element._init">
+<span class="sig-name descname"><span class="pre">_init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element._init" title="Permalink to this definition"></a></dt>
 <dd><p>Called after object initialisation.  Custom subclasses may override
 this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.addnext">
-<code class="sig-name descname">addnext</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.addnext" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.addnext">
+<span class="sig-name descname"><span class="pre">addnext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.addnext" title="Permalink to this definition"></a></dt>
 <dd><p>Adds the element as a following sibling directly after this
 element.</p>
 <p>This is normally used to set a processing instruction or comment after
@@ -5903,8 +5815,8 @@ discarded when adding at the root level.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.addprevious">
-<code class="sig-name descname">addprevious</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.addprevious" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.addprevious">
+<span class="sig-name descname"><span class="pre">addprevious</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.addprevious" title="Permalink to this definition"></a></dt>
 <dd><p>Adds the element as a preceding sibling directly before this
 element.</p>
 <p>This is normally used to set a processing instruction or comment
@@ -5913,22 +5825,22 @@ automatically discarded when adding at the root level.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.append">
-<code class="sig-name descname">append</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.append" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.append">
+<span class="sig-name descname"><span class="pre">append</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.append" title="Permalink to this definition"></a></dt>
 <dd><p>Adds a subelement to the end of this element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.clear">
-<code class="sig-name descname">clear</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">keep_tail</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.clear" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.clear">
+<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">keep_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.clear" title="Permalink to this definition"></a></dt>
 <dd><p>Resets an element.  This function removes all subelements, clears
 all attributes and sets the text and tail properties to None.</p>
 <p>Pass <code class="docutils literal notranslate"><span class="pre">keep_tail=True</span></code> to leave the tail text untouched.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.cssselect">
-<code class="sig-name descname">cssselect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">expr</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">translator</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.cssselect" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.cssselect">
+<span class="sig-name descname"><span class="pre">cssselect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">expr</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.cssselect" title="Permalink to this definition"></a></dt>
 <dd><p>Run the CSS expression on this element and its children,
 returning a list of the results.</p>
 <p>Equivalent to lxml.cssselect.CSSSelect(expr)(self) – note
@@ -5937,14 +5849,14 @@ speedup.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.extend">
-<code class="sig-name descname">extend</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">elements</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.extend" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.extend">
+<span class="sig-name descname"><span class="pre">extend</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elements</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.extend" title="Permalink to this definition"></a></dt>
 <dd><p>Extends the current children by the elements in the iterable.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.find">
-<code class="sig-name descname">find</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.find" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.find">
+<span class="sig-name descname"><span class="pre">find</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.find" title="Permalink to this definition"></a></dt>
 <dd><p>Finds the first matching subelement, by tag name or path.</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
 prefix-to-namespace mapping that allows the usage of XPath
@@ -5952,8 +5864,8 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.findall">
-<code class="sig-name descname">findall</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.findall" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.findall">
+<span class="sig-name descname"><span class="pre">findall</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.findall" title="Permalink to this definition"></a></dt>
 <dd><p>Finds all matching subelements, by tag name or path.</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
 prefix-to-namespace mapping that allows the usage of XPath
@@ -5961,8 +5873,8 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.findtext">
-<code class="sig-name descname">findtext</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.findtext" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.findtext">
+<span class="sig-name descname"><span class="pre">findtext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.findtext" title="Permalink to this definition"></a></dt>
 <dd><p>Finds text for the first matching subelement, by tag name or path.</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
 prefix-to-namespace mapping that allows the usage of XPath
@@ -5970,14 +5882,14 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.get">
-<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.get" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.get">
+<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.get" title="Permalink to this definition"></a></dt>
 <dd><p>Gets an element attribute.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.getchildren">
-<code class="sig-name descname">getchildren</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getchildren" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.getchildren">
+<span class="sig-name descname"><span class="pre">getchildren</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getchildren" title="Permalink to this definition"></a></dt>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
@@ -5990,8 +5902,8 @@ ElementTree 1.3 and lxml 2.0.  New code should use
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.getiterator">
-<code class="sig-name descname">getiterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getiterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.getiterator">
+<span class="sig-name descname"><span class="pre">getiterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getiterator" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a sequence or iterator of all elements in the subtree in
 document order (depth first pre-order), starting with this
 element.</p>
@@ -6011,26 +5923,26 @@ with older versions of lxml or ElementTree.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.getnext">
-<code class="sig-name descname">getnext</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getnext" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.getnext">
+<span class="sig-name descname"><span class="pre">getnext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getnext" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the following sibling of this element or None.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.getparent">
-<code class="sig-name descname">getparent</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getparent" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.getparent">
+<span class="sig-name descname"><span class="pre">getparent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getparent" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the parent of this element or None for the root element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.getprevious">
-<code class="sig-name descname">getprevious</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getprevious" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.getprevious">
+<span class="sig-name descname"><span class="pre">getprevious</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getprevious" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the preceding sibling of this element or None.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.getroottree">
-<code class="sig-name descname">getroottree</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getroottree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.getroottree">
+<span class="sig-name descname"><span class="pre">getroottree</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.getroottree" title="Permalink to this definition"></a></dt>
 <dd><p>Return an ElementTree for the root node of the document that
 contains this element.</p>
 <p>This is the same as following element.getparent() up the tree until it
@@ -6039,28 +5951,28 @@ the last parent that was returned.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.index">
-<code class="sig-name descname">index</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">child</span></em>, <em class="sig-param"><span class="n">start</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">stop</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.index" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.index">
+<span class="sig-name descname"><span class="pre">index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">child</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stop</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.index" title="Permalink to this definition"></a></dt>
 <dd><p>Find the position of the child within the parent.</p>
 <p>This method is not part of the original ElementTree API.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.insert">
-<code class="sig-name descname">insert</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">index</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.insert" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.insert">
+<span class="sig-name descname"><span class="pre">insert</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">index</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.insert" title="Permalink to this definition"></a></dt>
 <dd><p>Inserts a subelement at the given position in this element</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.items">
-<code class="sig-name descname">items</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.items" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.items">
+<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.items" title="Permalink to this definition"></a></dt>
 <dd><p>Gets element attributes, as a sequence. The attributes are returned in
 an arbitrary order.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.iter">
-<code class="sig-name descname">iter</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iter" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.iter">
+<span class="sig-name descname"><span class="pre">iter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iter" title="Permalink to this definition"></a></dt>
 <dd><p>Iterate over all elements in the subtree in document order (depth
 first pre-order), starting with this element.</p>
 <p>Can be restricted to find only elements with specific tags:
@@ -6077,16 +5989,16 @@ in document order.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.iterancestors">
-<code class="sig-name descname">iterancestors</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterancestors" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.iterancestors">
+<span class="sig-name descname"><span class="pre">iterancestors</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterancestors" title="Permalink to this definition"></a></dt>
 <dd><p>Iterate over the ancestors of this element (from parent to parent).</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.iterchildren">
-<code class="sig-name descname">iterchildren</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em>, <em class="sig-param"><span class="n">reversed</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterchildren" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.iterchildren">
+<span class="sig-name descname"><span class="pre">iterchildren</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reversed</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterchildren" title="Permalink to this definition"></a></dt>
 <dd><p>Iterate over the children of this element.</p>
 <p>As opposed to using normal iteration on this element, the returned
 elements can be reversed with the ‘reversed’ keyword and restricted
@@ -6094,8 +6006,8 @@ to find only elements with specific tags, see <cite>iter</cite>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.iterdescendants">
-<code class="sig-name descname">iterdescendants</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterdescendants" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.iterdescendants">
+<span class="sig-name descname"><span class="pre">iterdescendants</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterdescendants" title="Permalink to this definition"></a></dt>
 <dd><p>Iterate over the descendants of this element in document order.</p>
 <p>As opposed to <code class="docutils literal notranslate"><span class="pre">el.iter()</span></code>, this iterator does not yield the element
 itself.  The returned elements can be restricted to find only elements
@@ -6103,8 +6015,8 @@ with specific tags, see <cite>iter</cite>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.iterfind">
-<code class="sig-name descname">iterfind</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterfind" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.iterfind">
+<span class="sig-name descname"><span class="pre">iterfind</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.iterfind" title="Permalink to this definition"></a></dt>
 <dd><p>Iterates over all matching subelements, by tag name or path.</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
 prefix-to-namespace mapping that allows the usage of XPath
@@ -6112,8 +6024,8 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.itersiblings">
-<code class="sig-name descname">itersiblings</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em>, <em class="sig-param"><span class="n">preceding</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.itersiblings" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.itersiblings">
+<span class="sig-name descname"><span class="pre">itersiblings</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">preceding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.itersiblings" title="Permalink to this definition"></a></dt>
 <dd><p>Iterate over the following or preceding siblings of this element.</p>
 <p>The direction is determined by the ‘preceding’ keyword which
 defaults to False, i.e. forward iteration over the following
@@ -6125,8 +6037,8 @@ see <cite>iter</cite>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.itertext">
-<code class="sig-name descname">itertext</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.itertext" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.itertext">
+<span class="sig-name descname"><span class="pre">itertext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.itertext" title="Permalink to this definition"></a></dt>
 <dd><p>Iterates over the text content of a subtree.</p>
 <p>You can pass tag names to restrict text content to specific elements,
 see <cite>iter</cite>.</p>
@@ -6135,61 +6047,61 @@ over tail text.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.keys">
-<code class="sig-name descname">keys</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.keys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.keys">
+<span class="sig-name descname"><span class="pre">keys</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.keys" title="Permalink to this definition"></a></dt>
 <dd><p>Gets a list of attribute names.  The names are returned in an
 arbitrary order (just like for an ordinary Python dictionary).</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.makeelement">
-<code class="sig-name descname">makeelement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_tag</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_extra</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.makeelement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.makeelement">
+<span class="sig-name descname"><span class="pre">makeelement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_extra</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.makeelement" title="Permalink to this definition"></a></dt>
 <dd><p>Creates a new element associated with the same document.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.remove">
-<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.remove" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.remove">
+<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.remove" title="Permalink to this definition"></a></dt>
 <dd><p>Removes a matching subelement. Unlike the find methods, this
 method compares elements based on identity, not on tag value
 or contents.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.replace">
-<code class="sig-name descname">replace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">old_element</span></em>, <em class="sig-param"><span class="n">new_element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.replace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.replace">
+<span class="sig-name descname"><span class="pre">replace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">old_element</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new_element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.replace" title="Permalink to this definition"></a></dt>
 <dd><p>Replaces a subelement with the element passed as second argument.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.set">
-<code class="sig-name descname">set</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.set" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.set">
+<span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.set" title="Permalink to this definition"></a></dt>
 <dd><p>Sets an element attribute.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.values">
-<code class="sig-name descname">values</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.values" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.values">
+<span class="sig-name descname"><span class="pre">values</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.values" title="Permalink to this definition"></a></dt>
 <dd><p>Gets element attribute values as a sequence of strings.  The
 attributes are returned in an arbitrary order.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Element.xpath">
-<code class="sig-name descname">xpath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_variables</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.xpath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.xpath">
+<span class="sig-name descname"><span class="pre">xpath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_variables</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Element.xpath" title="Permalink to this definition"></a></dt>
 <dd><p>Evaluate an xpath expression using the element as context node.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.attrib">
-<code class="sig-name descname">attrib</code><a class="headerlink" href="#lxml.etree._Element.attrib" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.attrib">
+<span class="sig-name descname"><span class="pre">attrib</span></span><a class="headerlink" href="#lxml.etree._Element.attrib" title="Permalink to this definition"></a></dt>
 <dd><p>Element attribute dictionary. Where possible, use get(), set(),
 keys(), values() and items() to access element attributes.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.base">
-<code class="sig-name descname">base</code><a class="headerlink" href="#lxml.etree._Element.base" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.base">
+<span class="sig-name descname"><span class="pre">base</span></span><a class="headerlink" href="#lxml.etree._Element.base" title="Permalink to this definition"></a></dt>
 <dd><p>The base URI of the Element (xml:base or HTML base URL).
 None if the base URI is unknown.</p>
 <p>Note that the value depends on the URL of the document that
@@ -6200,8 +6112,8 @@ Element, regardless of the document type (XML or HTML).</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.nsmap">
-<code class="sig-name descname">nsmap</code><a class="headerlink" href="#lxml.etree._Element.nsmap" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.nsmap">
+<span class="sig-name descname"><span class="pre">nsmap</span></span><a class="headerlink" href="#lxml.etree._Element.nsmap" title="Permalink to this definition"></a></dt>
 <dd><p>Namespace prefix-&gt;URI mapping known in the context of this
 Element.  This includes all namespace declarations of the
 parents.</p>
@@ -6209,34 +6121,34 @@ parents.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.prefix">
-<code class="sig-name descname">prefix</code><a class="headerlink" href="#lxml.etree._Element.prefix" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.prefix">
+<span class="sig-name descname"><span class="pre">prefix</span></span><a class="headerlink" href="#lxml.etree._Element.prefix" title="Permalink to this definition"></a></dt>
 <dd><p>Namespace prefix or None.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.sourceline">
-<code class="sig-name descname">sourceline</code><a class="headerlink" href="#lxml.etree._Element.sourceline" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.sourceline">
+<span class="sig-name descname"><span class="pre">sourceline</span></span><a class="headerlink" href="#lxml.etree._Element.sourceline" title="Permalink to this definition"></a></dt>
 <dd><p>Original line number as found by the parser or None if unknown.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.tag">
-<code class="sig-name descname">tag</code><a class="headerlink" href="#lxml.etree._Element.tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.tag">
+<span class="sig-name descname"><span class="pre">tag</span></span><a class="headerlink" href="#lxml.etree._Element.tag" title="Permalink to this definition"></a></dt>
 <dd><p>Element tag</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.tail">
-<code class="sig-name descname">tail</code><a class="headerlink" href="#lxml.etree._Element.tail" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.tail">
+<span class="sig-name descname"><span class="pre">tail</span></span><a class="headerlink" href="#lxml.etree._Element.tail" title="Permalink to this definition"></a></dt>
 <dd><p>Text after this element’s end tag, but before the next sibling
 element’s start tag. This is either a string or the value None, if
 there was no text.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Element.text">
-<code class="sig-name descname">text</code><a class="headerlink" href="#lxml.etree._Element.text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Element.text">
+<span class="sig-name descname"><span class="pre">text</span></span><a class="headerlink" href="#lxml.etree._Element.text" title="Permalink to this definition"></a></dt>
 <dd><p>Text before the first subelement. This is either a string or
 the value None, if there was no text.</p>
 </dd></dl>
@@ -6244,49 +6156,49 @@ the value None, if there was no text.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ElementIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ElementIterator</code><a class="headerlink" href="#lxml.etree._ElementIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ElementIterator</span></span><a class="headerlink" href="#lxml.etree._ElementIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ElementTagMatcher" title="lxml.etree._ElementTagMatcher"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ElementTagMatcher</span></code></a></p>
 <p>Dead but public. :)</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ElementMatchIterator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ElementMatchIterator</code><a class="headerlink" href="#lxml.etree._ElementMatchIterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementMatchIterator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ElementMatchIterator</span></span><a class="headerlink" href="#lxml.etree._ElementMatchIterator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ElementStringResult">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ElementStringResult</code><a class="headerlink" href="#lxml.etree._ElementStringResult" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementStringResult">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ElementStringResult</span></span><a class="headerlink" href="#lxml.etree._ElementStringResult" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._ElementStringResult.getparent">
-<code class="sig-name descname">getparent</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementStringResult.getparent" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementStringResult.getparent">
+<span class="sig-name descname"><span class="pre">getparent</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementStringResult.getparent" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ElementTagMatcher">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ElementTagMatcher</code><a class="headerlink" href="#lxml.etree._ElementTagMatcher" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTagMatcher">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ElementTagMatcher</span></span><a class="headerlink" href="#lxml.etree._ElementTagMatcher" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Dead but public. :)</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ElementTree">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ElementTree</code><a class="headerlink" href="#lxml.etree._ElementTree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ElementTree</span></span><a class="headerlink" href="#lxml.etree._ElementTree" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._ElementTree._setroot">
-<code class="sig-name descname">_setroot</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">root</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree._setroot" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree._setroot">
+<span class="sig-name descname"><span class="pre">_setroot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">root</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree._setroot" title="Permalink to this definition"></a></dt>
 <dd><p>Relocate the ElementTree to a new root node.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.find">
-<code class="sig-name descname">find</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.find" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.find">
+<span class="sig-name descname"><span class="pre">find</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.find" title="Permalink to this definition"></a></dt>
 <dd><p>Finds the first toplevel element with given tag.  Same as
 <code class="docutils literal notranslate"><span class="pre">tree.getroot().find(path)</span></code>.</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
@@ -6295,8 +6207,8 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.findall">
-<code class="sig-name descname">findall</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.findall" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.findall">
+<span class="sig-name descname"><span class="pre">findall</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.findall" title="Permalink to this definition"></a></dt>
 <dd><p>Finds all elements matching the ElementPath expression.  Same as
 getroot().findall(path).</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
@@ -6305,8 +6217,8 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.findtext">
-<code class="sig-name descname">findtext</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.findtext" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.findtext">
+<span class="sig-name descname"><span class="pre">findtext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.findtext" title="Permalink to this definition"></a></dt>
 <dd><p>Finds the text for the first element matching the ElementPath
 expression.  Same as getroot().findtext(path)</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
@@ -6315,8 +6227,8 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.getelementpath">
-<code class="sig-name descname">getelementpath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getelementpath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.getelementpath">
+<span class="sig-name descname"><span class="pre">getelementpath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getelementpath" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a structural, absolute ElementPath expression to find the
 element.  This path can be used in the .find() method to look up
 the element, provided that the elements along the path and their
@@ -6327,8 +6239,8 @@ declarations.  It is always self-contained.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.getiterator">
-<code class="sig-name descname">getiterator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getiterator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.getiterator">
+<span class="sig-name descname"><span class="pre">getiterator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getiterator" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a sequence or iterator of all elements in document order
 (depth first pre-order), starting with the root element.</p>
 <p>Can be restricted to find only elements with specific tags,
@@ -6347,8 +6259,8 @@ with older versions of lxml or ElementTree.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.getpath">
-<code class="sig-name descname">getpath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getpath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.getpath">
+<span class="sig-name descname"><span class="pre">getpath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getpath" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a structural, absolute XPath expression to find the element.</p>
 <p>For namespaced elements, the expression uses prefixes from the
 document, which therefore need to be provided in order to make any
@@ -6358,14 +6270,14 @@ self-contained ElementPath expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.getroot">
-<code class="sig-name descname">getroot</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getroot" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.getroot">
+<span class="sig-name descname"><span class="pre">getroot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.getroot" title="Permalink to this definition"></a></dt>
 <dd><p>Gets the root element for this tree.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.iter">
-<code class="sig-name descname">iter</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.iter" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.iter">
+<span class="sig-name descname"><span class="pre">iter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tags</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.iter" title="Permalink to this definition"></a></dt>
 <dd><p>Creates an iterator for the root element.  The iterator loops over
 all elements in this tree, in document order.  Note that siblings
 of the root element (comments or processing instructions) are not
@@ -6375,8 +6287,8 @@ see <cite>_Element.iter</cite>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.iterfind">
-<code class="sig-name descname">iterfind</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.iterfind" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.iterfind">
+<span class="sig-name descname"><span class="pre">iterfind</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.iterfind" title="Permalink to this definition"></a></dt>
 <dd><p>Iterates over all elements matching the ElementPath expression.
 Same as getroot().iterfind(path).</p>
 <p>The optional <code class="docutils literal notranslate"><span class="pre">namespaces</span></code> argument accepts a
@@ -6385,14 +6297,14 @@ prefixes in the path expression.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.parse">
-<code class="sig-name descname">parse</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">source</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.parse" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.parse">
+<span class="sig-name descname"><span class="pre">parse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.parse" title="Permalink to this definition"></a></dt>
 <dd><p>Updates self with the content of source and returns its root.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.relaxng">
-<code class="sig-name descname">relaxng</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">relaxng</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.relaxng" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.relaxng">
+<span class="sig-name descname"><span class="pre">relaxng</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">relaxng</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.relaxng" title="Permalink to this definition"></a></dt>
 <dd><p>Validate this document using other document.</p>
 <p>The relaxng argument is a tree that should contain a Relax NG schema.</p>
 <p>Returns True or False, depending on whether validation
@@ -6403,8 +6315,8 @@ class directly.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.write">
-<code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">file</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">encoding</span></em>, <em class="sig-param"><span class="n">method</span></em>, <em class="sig-param"><span class="n">pretty_print</span></em>, <em class="sig-param"><span class="n">xml_declaration</span></em>, <em class="sig-param"><span class="n">with_tail</span></em>, <em class="sig-param"><span class="n">standalone</span></em>, <em class="sig-param"><span class="n">doctype</span></em>, <em class="sig-param"><span class="n">compression</span></em>, <em class="sig-param"><span class="n">exclusive</span></em>, <em class="sig-param"><span class="n">inclusive_ns_prefixes</span></em>, <em class="sig-param"><span class="n">with_comments</span></em>, <em class="sig-param"><span class="n">strip_text</span></em>, <em class="sig-param"><span class="n">docstring</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.write" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.write">
+<span class="sig-name descname"><span class="pre">write</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pretty_print</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xml_declaration</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">standalone</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doctype</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compression</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exclusive</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inclusive_ns_prefixes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_comments</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip_text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">docstring</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.write" title="Permalink to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>write(self, file, encoding=None, method=”xml”,</dt><dd><p>pretty_print=False, xml_declaration=None, with_tail=True,
 standalone=None, doctype=None, compression=0,
@@ -6442,8 +6354,8 @@ of the namespace node’s parent element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.write_c14n">
-<code class="sig-name descname">write_c14n</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">file</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">exclusive</span></em>, <em class="sig-param"><span class="n">with_comments</span></em>, <em class="sig-param"><span class="n">compression</span></em>, <em class="sig-param"><span class="n">inclusive_ns_prefixes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.write_c14n" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.write_c14n">
+<span class="sig-name descname"><span class="pre">write_c14n</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exclusive</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_comments</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compression</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inclusive_ns_prefixes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.write_c14n" title="Permalink to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>write_c14n(self, file, exclusive=False, with_comments=True,</dt><dd><p>compression=0, inclusive_ns_prefixes=None)</p>
 </dd>
@@ -6463,8 +6375,8 @@ future release.  Use <code class="docutils literal notranslate"><span class="pre
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.xinclude">
-<code class="sig-name descname">xinclude</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xinclude" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.xinclude">
+<span class="sig-name descname"><span class="pre">xinclude</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xinclude" title="Permalink to this definition"></a></dt>
 <dd><p>Process the XInclude nodes in this document and include the
 referenced XML fragments.</p>
 <p>There is support for loading files through the file system, HTTP and
@@ -6474,8 +6386,8 @@ due to restrictions of libxml2 &lt;= 2.6.29.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.xmlschema">
-<code class="sig-name descname">xmlschema</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">xmlschema</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xmlschema" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.xmlschema">
+<span class="sig-name descname"><span class="pre">xmlschema</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xmlschema</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xmlschema" title="Permalink to this definition"></a></dt>
 <dd><p>Validate this document using other document.</p>
 <p>The xmlschema argument is a tree that should contain an XML Schema.</p>
 <p>Returns True or False, depending on whether validation
@@ -6486,8 +6398,8 @@ class directly.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.xpath">
-<code class="sig-name descname">xpath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_path</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_variables</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xpath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.xpath">
+<span class="sig-name descname"><span class="pre">xpath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_variables</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xpath" title="Permalink to this definition"></a></dt>
 <dd><p>XPath evaluate in context of document.</p>
 <p><code class="docutils literal notranslate"><span class="pre">namespaces</span></code> is an optional dictionary with prefix to namespace URI
 mappings, used by XPath.  <code class="docutils literal notranslate"><span class="pre">extensions</span></code> defines additional extension
@@ -6501,8 +6413,8 @@ XPathEvaluator directly.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ElementTree.xslt">
-<code class="sig-name descname">xslt</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_xslt</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">access_control</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_kw</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xslt" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.xslt">
+<span class="sig-name descname"><span class="pre">xslt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_xslt</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">access_control</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_kw</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementTree.xslt" title="Permalink to this definition"></a></dt>
 <dd><p>Transform this document using other document.</p>
 <p>xslt is a tree that should be XSLT
 keyword parameters are XSLT transformation parameters.</p>
@@ -6513,100 +6425,100 @@ class directly.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ElementTree.docinfo">
-<code class="sig-name descname">docinfo</code><a class="headerlink" href="#lxml.etree._ElementTree.docinfo" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.docinfo">
+<span class="sig-name descname"><span class="pre">docinfo</span></span><a class="headerlink" href="#lxml.etree._ElementTree.docinfo" title="Permalink to this definition"></a></dt>
 <dd><p>Information about the document provided by parser and DTD.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ElementTree.parser">
-<code class="sig-name descname">parser</code><a class="headerlink" href="#lxml.etree._ElementTree.parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementTree.parser">
+<span class="sig-name descname"><span class="pre">parser</span></span><a class="headerlink" href="#lxml.etree._ElementTree.parser" title="Permalink to this definition"></a></dt>
 <dd><p>The parser that was used to parse the document in this ElementTree.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ElementUnicodeResult">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ElementUnicodeResult</code><a class="headerlink" href="#lxml.etree._ElementUnicodeResult" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ElementUnicodeResult</span></span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._ElementUnicodeResult.getparent">
-<code class="sig-name descname">getparent</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.getparent" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.getparent">
+<span class="sig-name descname"><span class="pre">getparent</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.getparent" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ElementUnicodeResult.attrname">
-<code class="sig-name descname">attrname</code><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.attrname" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.attrname">
+<span class="sig-name descname"><span class="pre">attrname</span></span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.attrname" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ElementUnicodeResult.is_attribute">
-<code class="sig-name descname">is_attribute</code><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.is_attribute" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.is_attribute">
+<span class="sig-name descname"><span class="pre">is_attribute</span></span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.is_attribute" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ElementUnicodeResult.is_tail">
-<code class="sig-name descname">is_tail</code><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.is_tail" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.is_tail">
+<span class="sig-name descname"><span class="pre">is_tail</span></span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.is_tail" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ElementUnicodeResult.is_text">
-<code class="sig-name descname">is_text</code><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.is_text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.is_text">
+<span class="sig-name descname"><span class="pre">is_text</span></span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.is_text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._Entity">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_Entity</code><a class="headerlink" href="#lxml.etree._Entity" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Entity">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_Entity</span></span><a class="headerlink" href="#lxml.etree._Entity" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.__ContentOnlyElement</span></code></p>
 <dl class="py attribute">
-<dt id="lxml.etree._Entity.name">
-<code class="sig-name descname">name</code><a class="headerlink" href="#lxml.etree._Entity.name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Entity.name">
+<span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#lxml.etree._Entity.name" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Entity.tag">
-<code class="sig-name descname">tag</code><a class="headerlink" href="#lxml.etree._Entity.tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Entity.tag">
+<span class="sig-name descname"><span class="pre">tag</span></span><a class="headerlink" href="#lxml.etree._Entity.tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Entity.text">
-<code class="sig-name descname">text</code><a class="headerlink" href="#lxml.etree._Entity.text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Entity.text">
+<span class="sig-name descname"><span class="pre">text</span></span><a class="headerlink" href="#lxml.etree._Entity.text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ErrorLog">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ErrorLog</code><a class="headerlink" href="#lxml.etree._ErrorLog" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ErrorLog">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ErrorLog</span></span><a class="headerlink" href="#lxml.etree._ErrorLog" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ListErrorLog" title="lxml.etree._ListErrorLog"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ListErrorLog</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.etree._ErrorLog.clear">
-<code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ErrorLog.clear" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ErrorLog.clear">
+<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ErrorLog.clear" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ErrorLog.copy">
-<code class="sig-name descname">copy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ErrorLog.copy" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ErrorLog.copy">
+<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ErrorLog.copy" title="Permalink to this definition"></a></dt>
 <dd><p>Creates a shallow copy of this error log and the list of entries.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ErrorLog.receive">
-<code class="sig-name descname">receive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">entry</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ErrorLog.receive" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ErrorLog.receive">
+<span class="sig-name descname"><span class="pre">receive</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">entry</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ErrorLog.receive" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._FeedParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_FeedParser</code><a class="headerlink" href="#lxml.etree._FeedParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._FeedParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_FeedParser</span></span><a class="headerlink" href="#lxml.etree._FeedParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._BaseParser</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._FeedParser.close">
-<code class="sig-name descname">close</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._FeedParser.close" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._FeedParser.close">
+<span class="sig-name descname"><span class="pre">close</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._FeedParser.close" title="Permalink to this definition"></a></dt>
 <dd><p>Terminates feeding data to this parser.  This tells the parser to
 process any remaining data in the feed buffer, and then returns the
 root Element of the tree that was parsed.</p>
@@ -6616,8 +6528,8 @@ parser interface, all other usage is undefined.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._FeedParser.feed">
-<code class="sig-name descname">feed</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._FeedParser.feed" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._FeedParser.feed">
+<span class="sig-name descname"><span class="pre">feed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._FeedParser.feed" title="Permalink to this definition"></a></dt>
 <dd><p>Feeds data to the parser.  The argument should be an 8-bit string
 buffer containing encoded data, although Unicode is supported as long
 as both string types are not mixed.</p>
@@ -6633,8 +6545,8 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._FeedParser.feed_error_log">
-<code class="sig-name descname">feed_error_log</code><a class="headerlink" href="#lxml.etree._FeedParser.feed_error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._FeedParser.feed_error_log">
+<span class="sig-name descname"><span class="pre">feed_error_log</span></span><a class="headerlink" href="#lxml.etree._FeedParser.feed_error_log" title="Permalink to this definition"></a></dt>
 <dd><p>The error log of the last (or current) run of the feed parser.</p>
 <p>Note that this is local to the feed parser and thus is
 different from what the <code class="docutils literal notranslate"><span class="pre">error_log</span></code> property returns.</p>
@@ -6643,8 +6555,8 @@ different from what the <code class="docutils literal notranslate"><span class="
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._IDDict">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_IDDict</code><a class="headerlink" href="#lxml.etree._IDDict" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_IDDict</span></span><a class="headerlink" href="#lxml.etree._IDDict" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>IDDict(self, etree)
 A dictionary-like proxy class that mapps ID attributes to elements.</p>
@@ -6652,105 +6564,105 @@ A dictionary-like proxy class that mapps ID attributes to elements.</p>
 document, otherwise the behaviour is undefined.  Elements and XML trees
 that were created or modified ‘by hand’ are not supported.</p>
 <dl class="py method">
-<dt id="lxml.etree._IDDict.copy">
-<code class="sig-name descname">copy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.copy" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.copy">
+<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.copy" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.get">
-<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">id_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.get" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.get">
+<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.get" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.has_key">
-<code class="sig-name descname">has_key</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">id_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.has_key" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.has_key">
+<span class="sig-name descname"><span class="pre">has_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.has_key" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.items">
-<code class="sig-name descname">items</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.items" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.items">
+<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.items" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.iteritems">
-<code class="sig-name descname">iteritems</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.iteritems" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.iteritems">
+<span class="sig-name descname"><span class="pre">iteritems</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.iteritems" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.iterkeys">
-<code class="sig-name descname">iterkeys</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.iterkeys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.iterkeys">
+<span class="sig-name descname"><span class="pre">iterkeys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.iterkeys" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.itervalues">
-<code class="sig-name descname">itervalues</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.itervalues" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.itervalues">
+<span class="sig-name descname"><span class="pre">itervalues</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.itervalues" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.keys">
-<code class="sig-name descname">keys</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.keys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.keys">
+<span class="sig-name descname"><span class="pre">keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.keys" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._IDDict.values">
-<code class="sig-name descname">values</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.values" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._IDDict.values">
+<span class="sig-name descname"><span class="pre">values</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._IDDict.values" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ListErrorLog">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ListErrorLog</code><a class="headerlink" href="#lxml.etree._ListErrorLog" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ListErrorLog</span></span><a class="headerlink" href="#lxml.etree._ListErrorLog" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._BaseErrorLog" title="lxml.etree._BaseErrorLog"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._BaseErrorLog</span></code></a></p>
 <p>Immutable base version of a list based error log.</p>
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.copy">
-<code class="sig-name descname">copy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.copy" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.copy">
+<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.copy" title="Permalink to this definition"></a></dt>
 <dd><p>Creates a shallow copy of this error log.  Reuses the list of
 entries.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_domains">
-<code class="sig-name descname">filter_domains</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">domains</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_domains" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_domains">
+<span class="sig-name descname"><span class="pre">filter_domains</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domains</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_domains" title="Permalink to this definition"></a></dt>
 <dd><p>Filter the errors by the given domains and return a new error log
 containing the matches.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_from_errors">
-<code class="sig-name descname">filter_from_errors</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_errors" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_from_errors">
+<span class="sig-name descname"><span class="pre">filter_from_errors</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_errors" title="Permalink to this definition"></a></dt>
 <dd><p>Convenience method to get all error messages or worse.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_from_fatals">
-<code class="sig-name descname">filter_from_fatals</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_fatals" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_from_fatals">
+<span class="sig-name descname"><span class="pre">filter_from_fatals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_fatals" title="Permalink to this definition"></a></dt>
 <dd><p>Convenience method to get all fatal error messages.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_from_level">
-<code class="sig-name descname">filter_from_level</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">level</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_level" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_from_level">
+<span class="sig-name descname"><span class="pre">filter_from_level</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_level" title="Permalink to this definition"></a></dt>
 <dd><p>Return a log with all messages of the requested level of worse.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_from_warnings">
-<code class="sig-name descname">filter_from_warnings</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_warnings" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_from_warnings">
+<span class="sig-name descname"><span class="pre">filter_from_warnings</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_from_warnings" title="Permalink to this definition"></a></dt>
 <dd><p>Convenience method to get all warnings or worse.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_levels">
-<code class="sig-name descname">filter_levels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">levels</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_levels" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_levels">
+<span class="sig-name descname"><span class="pre">filter_levels</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">levels</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_levels" title="Permalink to this definition"></a></dt>
 <dd><p>Filter the errors by the given error levels and return a new
 error log containing the matches.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._ListErrorLog.filter_types">
-<code class="sig-name descname">filter_types</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">types</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_types" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ListErrorLog.filter_types">
+<span class="sig-name descname"><span class="pre">filter_types</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">types</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ListErrorLog.filter_types" title="Permalink to this definition"></a></dt>
 <dd><p>Filter the errors by the given types and return a new error
 log containing the matches.</p>
 </dd></dl>
@@ -6758,8 +6670,8 @@ log containing the matches.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._LogEntry">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_LogEntry</code><a class="headerlink" href="#lxml.etree._LogEntry" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_LogEntry</span></span><a class="headerlink" href="#lxml.etree._LogEntry" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>A log message entry from an error log.</p>
 <p>Attributes:</p>
@@ -6774,75 +6686,75 @@ log containing the matches.</p>
 <li><p>path: the location in which the error was found (if available)</p></li>
 </ul>
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.column">
-<code class="sig-name descname">column</code><a class="headerlink" href="#lxml.etree._LogEntry.column" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.column">
+<span class="sig-name descname"><span class="pre">column</span></span><a class="headerlink" href="#lxml.etree._LogEntry.column" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.domain">
-<code class="sig-name descname">domain</code><a class="headerlink" href="#lxml.etree._LogEntry.domain" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.domain">
+<span class="sig-name descname"><span class="pre">domain</span></span><a class="headerlink" href="#lxml.etree._LogEntry.domain" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.domain_name">
-<code class="sig-name descname">domain_name</code><a class="headerlink" href="#lxml.etree._LogEntry.domain_name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.domain_name">
+<span class="sig-name descname"><span class="pre">domain_name</span></span><a class="headerlink" href="#lxml.etree._LogEntry.domain_name" title="Permalink to this definition"></a></dt>
 <dd><p>The name of the error domain.  See lxml.etree.ErrorDomains</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.filename">
-<code class="sig-name descname">filename</code><a class="headerlink" href="#lxml.etree._LogEntry.filename" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.filename">
+<span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.etree._LogEntry.filename" title="Permalink to this definition"></a></dt>
 <dd><p>The file path where the report originated, if any.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.level">
-<code class="sig-name descname">level</code><a class="headerlink" href="#lxml.etree._LogEntry.level" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.level">
+<span class="sig-name descname"><span class="pre">level</span></span><a class="headerlink" href="#lxml.etree._LogEntry.level" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.level_name">
-<code class="sig-name descname">level_name</code><a class="headerlink" href="#lxml.etree._LogEntry.level_name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.level_name">
+<span class="sig-name descname"><span class="pre">level_name</span></span><a class="headerlink" href="#lxml.etree._LogEntry.level_name" title="Permalink to this definition"></a></dt>
 <dd><p>The name of the error level.  See lxml.etree.ErrorLevels</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.line">
-<code class="sig-name descname">line</code><a class="headerlink" href="#lxml.etree._LogEntry.line" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.line">
+<span class="sig-name descname"><span class="pre">line</span></span><a class="headerlink" href="#lxml.etree._LogEntry.line" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.message">
-<code class="sig-name descname">message</code><a class="headerlink" href="#lxml.etree._LogEntry.message" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.message">
+<span class="sig-name descname"><span class="pre">message</span></span><a class="headerlink" href="#lxml.etree._LogEntry.message" title="Permalink to this definition"></a></dt>
 <dd><p>The log message string.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.path">
-<code class="sig-name descname">path</code><a class="headerlink" href="#lxml.etree._LogEntry.path" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.path">
+<span class="sig-name descname"><span class="pre">path</span></span><a class="headerlink" href="#lxml.etree._LogEntry.path" title="Permalink to this definition"></a></dt>
 <dd><p>The XPath for the node where the error was detected.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.type">
-<code class="sig-name descname">type</code><a class="headerlink" href="#lxml.etree._LogEntry.type" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.type">
+<span class="sig-name descname"><span class="pre">type</span></span><a class="headerlink" href="#lxml.etree._LogEntry.type" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._LogEntry.type_name">
-<code class="sig-name descname">type_name</code><a class="headerlink" href="#lxml.etree._LogEntry.type_name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._LogEntry.type_name">
+<span class="sig-name descname"><span class="pre">type_name</span></span><a class="headerlink" href="#lxml.etree._LogEntry.type_name" title="Permalink to this definition"></a></dt>
 <dd><p>The name of the error type.  See lxml.etree.ErrorTypes</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._ProcessingInstruction">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_ProcessingInstruction</code><a class="headerlink" href="#lxml.etree._ProcessingInstruction" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ProcessingInstruction">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_ProcessingInstruction</span></span><a class="headerlink" href="#lxml.etree._ProcessingInstruction" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.__ContentOnlyElement</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._ProcessingInstruction.get">
-<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ProcessingInstruction.get" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ProcessingInstruction.get">
+<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ProcessingInstruction.get" title="Permalink to this definition"></a></dt>
 <dd><p>Try to parse pseudo-attributes from the text content of the
 processing instruction, search for one with the given key as
 name and return its associated value.</p>
@@ -6853,8 +6765,8 @@ It is not guaranteed to work for all possible text content.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ProcessingInstruction.attrib">
-<code class="sig-name descname">attrib</code><a class="headerlink" href="#lxml.etree._ProcessingInstruction.attrib" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ProcessingInstruction.attrib">
+<span class="sig-name descname"><span class="pre">attrib</span></span><a class="headerlink" href="#lxml.etree._ProcessingInstruction.attrib" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a dict containing all pseudo-attributes that can be
 parsed from the text content of this processing instruction.
 Note that modifying the dict currently has no effect on the
@@ -6862,83 +6774,83 @@ XML node, although this is not guaranteed to stay this way.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ProcessingInstruction.tag">
-<code class="sig-name descname">tag</code><a class="headerlink" href="#lxml.etree._ProcessingInstruction.tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ProcessingInstruction.tag">
+<span class="sig-name descname"><span class="pre">tag</span></span><a class="headerlink" href="#lxml.etree._ProcessingInstruction.tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._ProcessingInstruction.target">
-<code class="sig-name descname">target</code><a class="headerlink" href="#lxml.etree._ProcessingInstruction.target" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._ProcessingInstruction.target">
+<span class="sig-name descname"><span class="pre">target</span></span><a class="headerlink" href="#lxml.etree._ProcessingInstruction.target" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._RotatingErrorLog">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_RotatingErrorLog</code><a class="headerlink" href="#lxml.etree._RotatingErrorLog" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._RotatingErrorLog">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_RotatingErrorLog</span></span><a class="headerlink" href="#lxml.etree._RotatingErrorLog" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ErrorLog" title="lxml.etree._ErrorLog"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ErrorLog</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.etree._RotatingErrorLog.receive">
-<code class="sig-name descname">receive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">entry</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._RotatingErrorLog.receive" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._RotatingErrorLog.receive">
+<span class="sig-name descname"><span class="pre">receive</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">entry</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._RotatingErrorLog.receive" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._SaxParserTarget">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_SaxParserTarget</code><a class="headerlink" href="#lxml.etree._SaxParserTarget" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._SaxParserTarget">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_SaxParserTarget</span></span><a class="headerlink" href="#lxml.etree._SaxParserTarget" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._Validator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_Validator</code><a class="headerlink" href="#lxml.etree._Validator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_Validator</span></span><a class="headerlink" href="#lxml.etree._Validator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Base class for XML validators.</p>
 <dl class="py method">
-<dt id="lxml.etree._Validator._append_log_message">
-<code class="sig-name descname">_append_log_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">domain</span></em>, <em class="sig-param"><span class="n">type</span></em>, <em class="sig-param"><span class="n">level</span></em>, <em class="sig-param"><span class="n">line</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">filename</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator._append_log_message" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator._append_log_message">
+<span class="sig-name descname"><span class="pre">_append_log_message</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domain</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">line</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator._append_log_message" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Validator._clear_error_log">
-<code class="sig-name descname">_clear_error_log</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator._clear_error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator._clear_error_log">
+<span class="sig-name descname"><span class="pre">_clear_error_log</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator._clear_error_log" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Validator.assertValid">
-<code class="sig-name descname">assertValid</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator.assertValid" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator.assertValid">
+<span class="sig-name descname"><span class="pre">assertValid</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator.assertValid" title="Permalink to this definition"></a></dt>
 <dd><p>Raises <cite>DocumentInvalid</cite> if the document does not comply with the schema.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Validator.assert_">
-<code class="sig-name descname">assert_</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator.assert_" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator.assert_">
+<span class="sig-name descname"><span class="pre">assert_</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator.assert_" title="Permalink to this definition"></a></dt>
 <dd><p>Raises <cite>AssertionError</cite> if the document does not comply with the schema.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._Validator.validate">
-<code class="sig-name descname">validate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">etree</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator.validate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator.validate">
+<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">etree</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._Validator.validate" title="Permalink to this definition"></a></dt>
 <dd><p>Validate the document using this schema.</p>
 <p>Returns true if document is valid, false if not.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._Validator.error_log">
-<code class="sig-name descname">error_log</code><a class="headerlink" href="#lxml.etree._Validator.error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._Validator.error_log">
+<span class="sig-name descname"><span class="pre">error_log</span></span><a class="headerlink" href="#lxml.etree._Validator.error_log" title="Permalink to this definition"></a></dt>
 <dd><p>The log of validation errors and warnings.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._XPathEvaluatorBase">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_XPathEvaluatorBase</code><a class="headerlink" href="#lxml.etree._XPathEvaluatorBase" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XPathEvaluatorBase">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_XPathEvaluatorBase</span></span><a class="headerlink" href="#lxml.etree._XPathEvaluatorBase" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <dl class="py method">
-<dt id="lxml.etree._XPathEvaluatorBase.evaluate">
-<code class="sig-name descname">evaluate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_eval_arg</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_variables</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XPathEvaluatorBase.evaluate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XPathEvaluatorBase.evaluate">
+<span class="sig-name descname"><span class="pre">evaluate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_eval_arg</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_variables</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XPathEvaluatorBase.evaluate" title="Permalink to this definition"></a></dt>
 <dd><p>Evaluate an XPath expression.</p>
 <p>Instead of calling this method, you can also call the evaluator object
 itself.</p>
@@ -6952,19 +6864,19 @@ are currently not supported for variables.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._XPathEvaluatorBase.error_log">
-<code class="sig-name descname">error_log</code><a class="headerlink" href="#lxml.etree._XPathEvaluatorBase.error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XPathEvaluatorBase.error_log">
+<span class="sig-name descname"><span class="pre">error_log</span></span><a class="headerlink" href="#lxml.etree._XPathEvaluatorBase.error_log" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._XSLTProcessingInstruction">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_XSLTProcessingInstruction</code><a class="headerlink" href="#lxml.etree._XSLTProcessingInstruction" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XSLTProcessingInstruction">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_XSLTProcessingInstruction</span></span><a class="headerlink" href="#lxml.etree._XSLTProcessingInstruction" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.PIBase" title="lxml.etree.PIBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.PIBase</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.etree._XSLTProcessingInstruction.parseXSL">
-<code class="sig-name descname">parseXSL</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XSLTProcessingInstruction.parseXSL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XSLTProcessingInstruction.parseXSL">
+<span class="sig-name descname"><span class="pre">parseXSL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XSLTProcessingInstruction.parseXSL" title="Permalink to this definition"></a></dt>
 <dd><p>Try to parse the stylesheet referenced by this PI and return
 an ElementTree for it.  If the stylesheet is embedded in the
 same document (referenced via xml:id), find and return an
@@ -6974,8 +6886,8 @@ parser used to read from external stylesheet URLs.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree._XSLTProcessingInstruction.set">
-<code class="sig-name descname">set</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XSLTProcessingInstruction.set" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XSLTProcessingInstruction.set">
+<span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XSLTProcessingInstruction.set" title="Permalink to this definition"></a></dt>
 <dd><p>Supports setting the ‘href’ pseudo-attribute in the text of
 the processing instruction.</p>
 </dd></dl>
@@ -6983,39 +6895,39 @@ the processing instruction.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree._XSLTResultTree">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">_XSLTResultTree</code><a class="headerlink" href="#lxml.etree._XSLTResultTree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XSLTResultTree">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">_XSLTResultTree</span></span><a class="headerlink" href="#lxml.etree._XSLTResultTree" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree._ElementTree" title="lxml.etree._ElementTree"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._ElementTree</span></code></a></p>
 <p>The result of an XSLT evaluation.</p>
 <p>Use <code class="docutils literal notranslate"><span class="pre">str()</span></code> or <code class="docutils literal notranslate"><span class="pre">bytes()</span></code> (or <code class="docutils literal notranslate"><span class="pre">unicode()</span></code> in Python 2.x) to serialise to a string,
 and the <code class="docutils literal notranslate"><span class="pre">.write_output()</span></code> method to write serialise to a file.</p>
 <dl class="py method">
-<dt id="lxml.etree._XSLTResultTree.write_output">
-<code class="sig-name descname">write_output</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">file</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XSLTResultTree.write_output" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XSLTResultTree.write_output">
+<span class="sig-name descname"><span class="pre">write_output</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compression</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._XSLTResultTree.write_output" title="Permalink to this definition"></a></dt>
 <dd><p>Serialise the XSLT output to a file or file-like object.</p>
 <p>As opposed to the generic <code class="docutils literal notranslate"><span class="pre">.write()</span></code> method, <code class="docutils literal notranslate"><span class="pre">.write_output()</span></code> serialises
 the result as defined by the <code class="docutils literal notranslate"><span class="pre">&lt;xsl:output&gt;</span></code> tag.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree._XSLTResultTree.xslt_profile">
-<code class="sig-name descname">xslt_profile</code><a class="headerlink" href="#lxml.etree._XSLTResultTree.xslt_profile" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree._XSLTResultTree.xslt_profile">
+<span class="sig-name descname"><span class="pre">xslt_profile</span></span><a class="headerlink" href="#lxml.etree._XSLTResultTree.xslt_profile" title="Permalink to this definition"></a></dt>
 <dd><p>Return an ElementTree with profiling data for the stylesheet run.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.htmlfile">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">htmlfile</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">output_file</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">close</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">buffered</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.htmlfile" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.htmlfile">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">htmlfile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compression</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">close</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">buffered</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.htmlfile" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.etree.xmlfile" title="lxml.etree.xmlfile"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.xmlfile</span></code></a></p>
 <p>A simple mechanism for incremental HTML serialisation.  Works the same as
 xmlfile.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.iterparse">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">iterparse</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">source</span></em>, <em class="sig-param"><span class="n">events</span><span class="o">=</span><span class="default_value">'end'</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attribute_defaults</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">dtd_validation</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">load_dtd</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">no_network</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_comments</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_pis</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">html</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">recover</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">huge_tree</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">schema</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterparse" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">iterparse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">events</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('end',)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attribute_defaults</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dtd_validation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">load_dtd</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">no_network</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_comments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">remove_pis</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">html</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recover</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">huge_tree</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">schema</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterparse" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Incremental parser.</p>
 <p>Parses XML into a tree and generates tuples (event, element) in a
@@ -7068,46 +6980,46 @@ attribute default values are requested.</p>
 </dd>
 </dl>
 <dl class="py method">
-<dt id="lxml.etree.iterparse.makeelement">
-<code class="sig-name descname">makeelement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">_tag</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_extra</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterparse.makeelement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse.makeelement">
+<span class="sig-name descname"><span class="pre">makeelement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_extra</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterparse.makeelement" title="Permalink to this definition"></a></dt>
 <dd><p>Creates a new element associated with this parser.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.etree.iterparse.set_element_class_lookup">
-<code class="sig-name descname">set_element_class_lookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">lookup</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterparse.set_element_class_lookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse.set_element_class_lookup">
+<span class="sig-name descname"><span class="pre">set_element_class_lookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lookup</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterparse.set_element_class_lookup" title="Permalink to this definition"></a></dt>
 <dd><p>Set a lookup scheme for element classes generated from this parser.</p>
 <p>Reset it by passing None or nothing.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.iterparse.error_log">
-<code class="sig-name descname">error_log</code><a class="headerlink" href="#lxml.etree.iterparse.error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse.error_log">
+<span class="sig-name descname"><span class="pre">error_log</span></span><a class="headerlink" href="#lxml.etree.iterparse.error_log" title="Permalink to this definition"></a></dt>
 <dd><p>The error log of the last (or current) parser run.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.iterparse.resolvers">
-<code class="sig-name descname">resolvers</code><a class="headerlink" href="#lxml.etree.iterparse.resolvers" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse.resolvers">
+<span class="sig-name descname"><span class="pre">resolvers</span></span><a class="headerlink" href="#lxml.etree.iterparse.resolvers" title="Permalink to this definition"></a></dt>
 <dd><p>The custom resolver registry of the last (or current) parser run.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.iterparse.root">
-<code class="sig-name descname">root</code><a class="headerlink" href="#lxml.etree.iterparse.root" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse.root">
+<span class="sig-name descname"><span class="pre">root</span></span><a class="headerlink" href="#lxml.etree.iterparse.root" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.etree.iterparse.version">
-<code class="sig-name descname">version</code><a class="headerlink" href="#lxml.etree.iterparse.version" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterparse.version">
+<span class="sig-name descname"><span class="pre">version</span></span><a class="headerlink" href="#lxml.etree.iterparse.version" title="Permalink to this definition"></a></dt>
 <dd><p>The version of the underlying XML parser.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.iterwalk">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">iterwalk</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="n">events</span><span class="o">=</span><span class="default_value">'end'</span></em>, <em class="sig-param"><span class="n">tag</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterwalk" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterwalk">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">iterwalk</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">events</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('end',)</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterwalk" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>A tree walker that generates events from an existing tree as if it
 was parsing XML data with <code class="docutils literal notranslate"><span class="pre">iterparse()</span></code>.</p>
@@ -7117,8 +7029,8 @@ sequence of tags.</p>
 descendants of the current element can be excluded from iteration
 by calling the <code class="docutils literal notranslate"><span class="pre">skip_subtree()</span></code> method.</p>
 <dl class="py method">
-<dt id="lxml.etree.iterwalk.skip_subtree">
-<code class="sig-name descname">skip_subtree</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterwalk.skip_subtree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iterwalk.skip_subtree">
+<span class="sig-name descname"><span class="pre">skip_subtree</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iterwalk.skip_subtree" title="Permalink to this definition"></a></dt>
 <dd><p>Prevent descending into the current subtree.
 Instead, the next returned event will be the ‘end’ event of the current element
 (if included), ignoring any children or descendants.</p>
@@ -7128,8 +7040,8 @@ Instead, the next returned event will be the ‘end’ event of the current elem
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.etree.xmlfile">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">xmlfile</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">output_file</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">close</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">buffered</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.xmlfile" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.xmlfile">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">xmlfile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">compression</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">close</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">buffered</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.xmlfile" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>A simple mechanism for incremental XML serialisation.</p>
 <p>Usage example:</p>
@@ -7164,15 +7076,15 @@ explicitly flush any pending output when buffering is enabled.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.Comment">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Comment</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Comment" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Comment">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Comment</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Comment" title="Permalink to this definition"></a></dt>
 <dd><p>Comment element factory. This factory function creates a special element that will
 be serialized as an XML comment.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.Element">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Element</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">_tag</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_extra</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Element" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Element">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Element</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_extra</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Element" title="Permalink to this definition"></a></dt>
 <dd><p>Element factory.  This function returns an object implementing the
 Element interface.</p>
 <p>Also look at the <cite>_Element.makeelement()</cite> and
@@ -7181,14 +7093,14 @@ create an Element within a specific document or parser context.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.ElementTree">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ElementTree</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">file</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementTree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ElementTree">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ElementTree</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ElementTree" title="Permalink to this definition"></a></dt>
 <dd><p>ElementTree wrapper class.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.Entity">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Entity</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Entity" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Entity">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Entity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Entity" title="Permalink to this definition"></a></dt>
 <dd><p>Entity factory.  This factory function creates a special element
 that will be serialized as an XML entity reference or character
 reference.  Note, however, that entities will not be automatically
@@ -7197,8 +7109,8 @@ requires a DTD to define the entities.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.Extension">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">Extension</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">module</span></em>, <em class="sig-param"><span class="n">function_mapping</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">ns</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Extension" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.Extension">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">Extension</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">module</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">function_mapping</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ns</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Extension" title="Permalink to this definition"></a></dt>
 <dd><p>Build a dictionary of extension functions from the functions
 defined in a module or the methods of an object.</p>
 <p>As second argument, you can pass an additional mapping of
@@ -7209,8 +7121,8 @@ functions.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.FunctionNamespace">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">FunctionNamespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ns_uri</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.FunctionNamespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.FunctionNamespace">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">FunctionNamespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ns_uri</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.FunctionNamespace" title="Permalink to this definition"></a></dt>
 <dd><p>Retrieve the function namespace object associated with the given
 URI.</p>
 <p>Creates a new one if it does not yet exist. A function namespace
@@ -7232,8 +7144,8 @@ can only be used to register extension functions.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.HTML">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">HTML</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTML" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.HTML">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">HTML</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.HTML" title="Permalink to this definition"></a></dt>
 <dd><p>Parses an HTML document from a string constant.  Returns the root
 node (or the result returned by a parser target).  This function
 can be used to embed “HTML literals” in Python code.</p>
@@ -7245,30 +7157,30 @@ the document to support relative Paths when looking up external entities
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.PI">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">PI</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">target</span></em>, <em class="sig-param"><span class="n">text</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.PI">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">PI</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.PI" title="Permalink to this definition"></a></dt>
 <dd><p>ProcessingInstruction(target, text=None)</p>
 <p>ProcessingInstruction element factory. This factory function creates a
 special element that will be serialized as an XML processing instruction.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.ProcessingInstruction">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">ProcessingInstruction</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">target</span></em>, <em class="sig-param"><span class="n">text</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ProcessingInstruction" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.ProcessingInstruction">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">ProcessingInstruction</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ProcessingInstruction" title="Permalink to this definition"></a></dt>
 <dd><p>ProcessingInstruction element factory. This factory function creates a
 special element that will be serialized as an XML processing instruction.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.SubElement">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">SubElement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">_parent</span></em>, <em class="sig-param"><span class="n">_tag</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_extra</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SubElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.SubElement">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">SubElement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_parent</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_extra</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SubElement" title="Permalink to this definition"></a></dt>
 <dd><p>Subelement factory.  This function creates an element instance, and
 appends it to an existing element.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.XML">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XML</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XML" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XML">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XML</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XML" title="Permalink to this definition"></a></dt>
 <dd><p>Parses an XML document or fragment from a string constant.
 Returns the root node (or the result returned by a parser target).
 This function can be used to embed “XML literals” in Python code,
@@ -7286,8 +7198,8 @@ the document to support relative Paths when looking up external entities
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.XMLDTDID">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLDTDID</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLDTDID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLDTDID">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLDTDID</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLDTDID" title="Permalink to this definition"></a></dt>
 <dd><p>Parse the text and return a tuple (root node, ID dictionary).  The root
 node is the same as returned by the XML() function.  The dictionary
 contains string-element pairs.  The dictionary keys are the values of ID
@@ -7298,8 +7210,8 @@ The results are undefined.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.XMLID">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XMLID</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLID" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XMLID">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XMLID</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLID" title="Permalink to this definition"></a></dt>
 <dd><p>Parse the text and return a tuple (root node, ID dictionary).  The root
 node is the same as returned by the XML() function.  The dictionary
 contains string-element pairs.  The dictionary keys are the values of ‘id’
@@ -7308,8 +7220,8 @@ values.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.XPathEvaluator">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">XPathEvaluator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">etree_or_element</span></em>, <em class="sig-param"><span class="n">namespaces</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">extensions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">regexp</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">smart_strings</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathEvaluator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.XPathEvaluator">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">XPathEvaluator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">etree_or_element</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extensions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">regexp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smart_strings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathEvaluator" title="Permalink to this definition"></a></dt>
 <dd><p>Creates an XPath evaluator for an ElementTree or an Element.</p>
 <p>The resulting object can be called with an XPath expression as argument
 and XPath variables provided as keyword arguments.</p>
@@ -7321,8 +7233,8 @@ you pass <code class="docutils literal notranslate"><span class="pre">smart_stri
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.adopt_external_document">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">adopt_external_document</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">capsule</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.adopt_external_document" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.adopt_external_document">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">adopt_external_document</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">capsule</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.adopt_external_document" title="Permalink to this definition"></a></dt>
 <dd><p>Unpack a libxml2 document pointer from a PyCapsule and wrap it in an
 lxml ElementTree object.</p>
 <p>This allows external libraries to build XML/HTML trees using libxml2
@@ -7348,8 +7260,8 @@ should not be attempted after transferring the ownership.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.canonicalize">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">canonicalize</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">xml_data</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">out</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">from_file</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">options</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.canonicalize" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.canonicalize">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">canonicalize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">xml_data</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">from_file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">options</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.canonicalize" title="Permalink to this definition"></a></dt>
 <dd><p>Convert XML to its C14N 2.0 serialised form.</p>
 <p>If <em>out</em> is provided, it must be a file or file-like object that receives
 the serialised canonical XML output (text, not bytes) through its <code class="docutils literal notranslate"><span class="pre">.write()</span></code>
@@ -7361,8 +7273,8 @@ If <em>out</em> is not provided, this function returns the output as text string
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.cleanup_namespaces">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">cleanup_namespaces</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tree_or_element</span></em>, <em class="sig-param"><span class="n">top_nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_ns_prefixes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.cleanup_namespaces" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.cleanup_namespaces">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">cleanup_namespaces</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tree_or_element</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">top_nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">keep_ns_prefixes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.cleanup_namespaces" title="Permalink to this definition"></a></dt>
 <dd><p>Remove all namespace declarations from a subtree that are not used
 by any of the elements or attributes in that tree.</p>
 <p>If a ‘top_nsmap’ is provided, it must be a mapping from prefixes
@@ -7374,8 +7286,8 @@ These prefixes will not be removed as part of the cleanup.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.clear_error_log">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">clear_error_log</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.clear_error_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.clear_error_log">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">clear_error_log</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.clear_error_log" title="Permalink to this definition"></a></dt>
 <dd><p>Clear the global error log.  Note that this log is already bound to a
 fixed size.</p>
 <p>Note: since lxml 2.2, the global error log is local to a thread
@@ -7384,15 +7296,15 @@ current thread.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.dump">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">dump</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">elem</span></em>, <em class="sig-param"><span class="n">pretty_print</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.dump" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.dump">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">dump</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">elem</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pretty_print</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.dump" title="Permalink to this definition"></a></dt>
 <dd><p>Writes an element tree or element structure to sys.stdout. This function
 should be used for debugging only.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.fromstring">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.fromstring" title="Permalink to this definition"></a></dt>
 <dd><p>Parses an XML document or fragment from a string.  Returns the
 root node (or the result returned by a parser target).</p>
 <p>To override the default parser with a different parser you can pass it to
@@ -7403,8 +7315,8 @@ the document to support relative Paths when looking up external entities
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.fromstringlist">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">fromstringlist</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">strings</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.fromstringlist" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.fromstringlist">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">fromstringlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">strings</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.fromstringlist" title="Permalink to this definition"></a></dt>
 <dd><p>Parses an XML document from a sequence of strings.  Returns the
 root node (or the result returned by a parser target).</p>
 <p>To override the default parser with a different parser you can pass it to
@@ -7412,13 +7324,13 @@ the <code class="docutils literal notranslate"><span class="pre">parser</span></
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.get_default_parser">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">get_default_parser</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.get_default_parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.get_default_parser">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">get_default_parser</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.get_default_parser" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.indent">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">indent</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tree</span></em>, <em class="sig-param"><span class="n">space</span><span class="o">=</span><span class="default_value">'  '</span></em>, <em class="sig-param"><span class="n">level</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.indent" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.indent">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">indent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">space</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'</span>&#160; <span class="pre">'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.indent" title="Permalink to this definition"></a></dt>
 <dd><p>Indent an XML document by inserting newlines and indentation space
 after elements.</p>
 <p><em>tree</em> is the ElementTree or Element to modify.  The (root) element
@@ -7432,14 +7344,14 @@ nested inside of a document.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.iselement">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">iselement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iselement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.iselement">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">iselement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.iselement" title="Permalink to this definition"></a></dt>
 <dd><p>Checks if an object appears to be a valid element object.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.parse">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">parse</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">source</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.parse" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.parse">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">parse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">source</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.parse" title="Permalink to this definition"></a></dt>
 <dd><p>Return an ElementTree object loaded with source elements.  If no parser
 is provided as second argument, the default parser is used.</p>
 <p>The <code class="docutils literal notranslate"><span class="pre">source</span></code> can be any of the following:</p>
@@ -7460,8 +7372,8 @@ up external entities (DTD, XInclude, …) with relative paths.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.parseid">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">parseid</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">source</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.parseid" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.parseid">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">parseid</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">source</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.parseid" title="Permalink to this definition"></a></dt>
 <dd><p>Parses the source into a tuple containing an ElementTree object and an
 ID dictionary.  If no parser is provided as second argument, the default
 parser is used.</p>
@@ -7470,8 +7382,8 @@ The results are undefined.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.register_namespace">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">register_namespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">prefix</span></em>, <em class="sig-param"><span class="n">uri</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.register_namespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.register_namespace">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">register_namespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prefix</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.register_namespace" title="Permalink to this definition"></a></dt>
 <dd><p>Registers a namespace prefix that newly created Elements in that
 namespace will use.  The registry is global, and any existing
 mapping for either the given prefix or the namespace URI will be
@@ -7479,8 +7391,8 @@ removed.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.set_default_parser">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">set_default_parser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.set_default_parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.set_default_parser">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">set_default_parser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.set_default_parser" title="Permalink to this definition"></a></dt>
 <dd><p>Set a default parser for the current thread.  This parser is used
 globally whenever no parser is supplied to the various parse functions of
 the lxml API.  If this function is called without a parser (or if it is
@@ -7491,14 +7403,14 @@ parser for each thread explicitly or use a parser pool.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.set_element_class_lookup">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">set_element_class_lookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">lookup</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.set_element_class_lookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.set_element_class_lookup">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">set_element_class_lookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">lookup</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.set_element_class_lookup" title="Permalink to this definition"></a></dt>
 <dd><p>Set the global default element class lookup method.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.strip_attributes">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">strip_attributes</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tree_or_element</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">attribute_names</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.strip_attributes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.strip_attributes">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">strip_attributes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tree_or_element</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">attribute_names</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.strip_attributes" title="Permalink to this definition"></a></dt>
 <dd><p>Delete all attributes with the provided attribute names from an
 Element (or ElementTree) and its descendants.</p>
 <p>Attribute names can contain wildcards as in <cite>_Element.iter</cite>.</p>
@@ -7512,8 +7424,8 @@ Element (or ElementTree) and its descendants.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.strip_elements">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">strip_elements</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tree_or_element</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tag_names</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.strip_elements" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.strip_elements">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">strip_elements</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tree_or_element</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tag_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.strip_elements" title="Permalink to this definition"></a></dt>
 <dd><p>Delete all elements with the provided tag names from a tree or
 subtree.  This will remove the elements and their entire subtree,
 including all their attributes, text content and descendants.  It
@@ -7536,8 +7448,8 @@ its tag name directly before even calling this function.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.strip_tags">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">strip_tags</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tree_or_element</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">tag_names</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.strip_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.strip_tags">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">strip_tags</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tree_or_element</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">tag_names</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.strip_tags" title="Permalink to this definition"></a></dt>
 <dd><p>Delete all elements with the provided tag names from a tree or
 subtree.  This will remove the elements and their attributes, but
 <em>not</em> their text/tail content or descendants.  Instead, it will
@@ -7559,8 +7471,8 @@ its descendants.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.tostring">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">tostring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">method</span><span class="o">=</span><span class="default_value">'xml'</span></em>, <em class="sig-param"><span class="n">xml_declaration</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pretty_print</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">standalone</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">doctype</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">exclusive</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">inclusive_ns_prefixes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">with_comments</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">strip_text</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.tostring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.tostring">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">tostring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'xml'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xml_declaration</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pretty_print</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">standalone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doctype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exclusive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inclusive_ns_prefixes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_comments</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strip_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.tostring" title="Permalink to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>tostring(element_or_tree, encoding=None, method=”xml”,</dt><dd><p>xml_declaration=None, pretty_print=False, with_tail=True,
 standalone=None, doctype=None,
@@ -7603,8 +7515,8 @@ on the tail text of children, which will always be serialised.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.tostringlist">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">tostringlist</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.tostringlist" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.tostringlist">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">tostringlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.tostringlist" title="Permalink to this definition"></a></dt>
 <dd><p>Serialize an element to an encoded string representation of its XML
 tree, stored in a list of partial strings.</p>
 <p>This is purely for ElementTree 1.3 compatibility.  The result is a
@@ -7612,8 +7524,8 @@ single string wrapped in a list.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.tounicode">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">tounicode</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">method</span><span class="o">=</span><span class="default_value">'xml'</span></em>, <em class="sig-param"><span class="n">pretty_print</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">doctype</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.tounicode" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.tounicode">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">tounicode</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'xml'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pretty_print</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doctype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.tounicode" title="Permalink to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>tounicode(element_or_tree, method=”xml”, pretty_print=False,</dt><dd><p>with_tail=True, doctype=None)</p>
 </dd>
@@ -7637,8 +7549,8 @@ on the tail text of children, which will always be serialised.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.etree.use_global_python_log">
-<code class="sig-prename descclassname">lxml.etree.</code><code class="sig-name descname">use_global_python_log</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">log</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.use_global_python_log" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.etree.use_global_python_log">
+<span class="sig-prename descclassname"><span class="pre">lxml.etree.</span></span><span class="sig-name descname"><span class="pre">use_global_python_log</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">log</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.use_global_python_log" title="Permalink to this definition"></a></dt>
 <dd><p>Replace the global error log by an etree.PyErrorLog that uses the
 standard Python logging package.</p>
 <p>Note that this disables access to the global error log from exceptions.
@@ -7648,62 +7560,37 @@ Since lxml 2.2, the global error log is local to a thread and this
 function will only set the global error log of the current thread.</p>
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.objectify.html" class="btn btn-neutral float-right" title="lxml.objectify module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.doctestcompare.html" class="btn btn-neutral float-left" title="lxml.doctestcompare module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.doctestcompare.html" class="btn btn-neutral float-left" title="lxml.doctestcompare module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.objectify.html" class="btn btn-neutral float-right" title="lxml.objectify module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 0cabb8857570525d5e2b2de9435d1d53c9eca5de..f9144defa468ed4a5071c43b71ac24b11bd88d93 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml package &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml package &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html package" href="lxml.html.html" />
     <link rel="prev" title="lxml API Reference" href="index.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="current reference internal" href="#">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
       <li>lxml package</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-package">
-<h1>lxml package<a class="headerlink" href="#lxml-package" title="Permalink to this headline"></a></h1>
-<div class="section" id="subpackages">
-<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline"></a></h2>
+             
+  <section id="lxml-package">
+<h1>lxml package<a class="headerlink" href="#lxml-package" title="Permalink to this headline"></a></h1>
+<section id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline"></a></h2>
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 </div>
-</div>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
+</section>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.ElementInclude.html">lxml.ElementInclude module</a></li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.sax.html">lxml.sax module</a></li>
 </ul>
 </div>
-</div>
-<div class="section" id="module-lxml">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-lxml" title="Permalink to this headline"></a></h2>
+</section>
+<section id="module-lxml">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-lxml" title="Permalink to this headline"></a></h2>
 <dl class="py function">
-<dt id="lxml.get_include">
-<code class="sig-prename descclassname">lxml.</code><code class="sig-name descname">get_include</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml.html#get_include"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.get_include" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.get_include">
+<span class="sig-prename descclassname"><span class="pre">lxml.</span></span><span class="sig-name descname"><span class="pre">get_include</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml.html#get_include"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.get_include" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a list of header include paths (for lxml itself, libxml2
 and libxslt) needed to compile C code against lxml if it was built
 with statically linked libraries.</p>
 </dd></dl>
 
-</div>
-</div>
+</section>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.html" class="btn btn-neutral float-right" title="lxml.html package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="index.html" class="btn btn-neutral float-left" title="lxml API Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="index.html" class="btn btn-neutral float-left" title="lxml API Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.html" class="btn btn-neutral float-right" title="lxml.html package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index dbb1d447105d21881ad90929215da027e4fbeba7..7775ab62bc01586ef8df5ea028b2a11eba5d05f6 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.ElementSoup module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.ElementSoup module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html._diffcommand module" href="lxml.html._diffcommand.html" />
     <link rel="prev" title="lxml.html package" href="lxml.html.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.ElementSoup module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.ElementSoup.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-html-elementsoup-module">
-<h1>lxml.html.ElementSoup module<a class="headerlink" href="#lxml-html-elementsoup-module" title="Permalink to this headline"></a></h1>
-</div>
+             
+  <section id="lxml-html-elementsoup-module">
+<h1>lxml.html.ElementSoup module<a class="headerlink" href="#lxml-html-elementsoup-module" title="Permalink to this headline"></a></h1>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html._diffcommand.html" class="btn btn-neutral float-right" title="lxml.html._diffcommand module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.html" class="btn btn-neutral float-left" title="lxml.html package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.html" class="btn btn-neutral float-left" title="lxml.html package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html._diffcommand.html" class="btn btn-neutral float-right" title="lxml.html._diffcommand module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index d05567682bca29407af2a8295f4a2ef6a2c69e58..e0c05bef34130e7678223b02fdc47135dd473d69 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html._diffcommand module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html._diffcommand module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html._setmixin module" href="lxml.html._setmixin.html" />
     <link rel="prev" title="lxml.html.ElementSoup module" href="lxml.html.ElementSoup.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html._diffcommand module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html._diffcommand.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html._diffcommand">
-<span id="lxml-html-diffcommand-module"></span><h1>lxml.html._diffcommand module<a class="headerlink" href="#module-lxml.html._diffcommand" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html._diffcommand">
+<span id="lxml-html-diffcommand-module"></span><h1>lxml.html._diffcommand module<a class="headerlink" href="#module-lxml.html._diffcommand" title="Permalink to this headline"></a></h1>
 <dl class="py function">
-<dt id="lxml.html._diffcommand.annotate">
-<code class="sig-prename descclassname">lxml.html._diffcommand.</code><code class="sig-name descname">annotate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">options</span></em>, <em class="sig-param"><span class="n">args</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#annotate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._diffcommand.annotate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._diffcommand.annotate">
+<span class="sig-prename descclassname"><span class="pre">lxml.html._diffcommand.</span></span><span class="sig-name descname"><span class="pre">annotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">options</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#annotate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._diffcommand.annotate" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._diffcommand.main">
-<code class="sig-prename descclassname">lxml.html._diffcommand.</code><code class="sig-name descname">main</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">args</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._diffcommand.main" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._diffcommand.main">
+<span class="sig-prename descclassname"><span class="pre">lxml.html._diffcommand.</span></span><span class="sig-name descname"><span class="pre">main</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#main"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._diffcommand.main" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._diffcommand.read_file">
-<code class="sig-prename descclassname">lxml.html._diffcommand.</code><code class="sig-name descname">read_file</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filename</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#read_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._diffcommand.read_file" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._diffcommand.read_file">
+<span class="sig-prename descclassname"><span class="pre">lxml.html._diffcommand.</span></span><span class="sig-name descname"><span class="pre">read_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#read_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._diffcommand.read_file" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._diffcommand.split_body">
-<code class="sig-prename descclassname">lxml.html._diffcommand.</code><code class="sig-name descname">split_body</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#split_body"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._diffcommand.split_body" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._diffcommand.split_body">
+<span class="sig-prename descclassname"><span class="pre">lxml.html._diffcommand.</span></span><span class="sig-name descname"><span class="pre">split_body</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_diffcommand.html#split_body"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._diffcommand.split_body" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html._setmixin.html" class="btn btn-neutral float-right" title="lxml.html._setmixin module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.ElementSoup.html" class="btn btn-neutral float-left" title="lxml.html.ElementSoup module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.ElementSoup.html" class="btn btn-neutral float-left" title="lxml.html.ElementSoup module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html._setmixin.html" class="btn btn-neutral float-right" title="lxml.html._setmixin module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 460ab1bf775f9fe28eb0ac23300a9885af58af2d..8d4a7981e42ec91aa943fa64a9a18054dde00097 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html._setmixin module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html._setmixin module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.builder module" href="lxml.html.builder.html" />
     <link rel="prev" title="lxml.html._diffcommand module" href="lxml.html._diffcommand.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html._setmixin module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html._setmixin.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html._setmixin">
-<span id="lxml-html-setmixin-module"></span><h1>lxml.html._setmixin module<a class="headerlink" href="#module-lxml.html._setmixin" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html._setmixin">
+<span id="lxml-html-setmixin-module"></span><h1>lxml.html._setmixin module<a class="headerlink" href="#module-lxml.html._setmixin" title="Permalink to this headline"></a></h1>
 <dl class="py class">
-<dt id="lxml.html._setmixin.SetMixin">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html._setmixin.</code><code class="sig-name descname">SetMixin</code><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html._setmixin.</span></span><span class="sig-name descname"><span class="pre">SetMixin</span></span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">collections.abc.MutableSet</span></code></p>
 <p>Mix-in for sets.  You must define __iter__, add, remove</p>
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin._from_iterable">
-<em class="property">classmethod </em><code class="sig-name descname">_from_iterable</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">it</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin._from_iterable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin._from_iterable" title="Permalink to this definition">¶</a></dt>
-<dd><p>Construct an instance of the class from any iterable input.</p>
-<p>Must override this method if the class constructor signature
-does not accept an iterable for an input.</p>
-</dd></dl>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin._from_iterable">
+<em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">_from_iterable</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">it</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin._from_iterable"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin._from_iterable" title="Permalink to this definition"></a></dt>
+<dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.copy">
-<code class="sig-name descname">copy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.copy" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.copy">
+<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.copy"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.copy" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.difference">
-<code class="sig-name descname">difference</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.difference" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.difference">
+<span class="sig-name descname"><span class="pre">difference</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.difference" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.difference_update">
-<code class="sig-name descname">difference_update</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.difference_update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.difference_update" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.difference_update">
+<span class="sig-name descname"><span class="pre">difference_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.difference_update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.difference_update" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.discard">
-<code class="sig-name descname">discard</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">item</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.discard"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.discard" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.discard">
+<span class="sig-name descname"><span class="pre">discard</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">item</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.discard"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.discard" title="Permalink to this definition"></a></dt>
 <dd><p>Remove an element.  Do not raise an exception if absent.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.intersection">
-<code class="sig-name descname">intersection</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.intersection" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.intersection">
+<span class="sig-name descname"><span class="pre">intersection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.intersection" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.intersection_update">
-<code class="sig-name descname">intersection_update</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.intersection_update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.intersection_update" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.intersection_update">
+<span class="sig-name descname"><span class="pre">intersection_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.intersection_update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.intersection_update" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.issubset">
-<code class="sig-name descname">issubset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.issubset" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.issubset">
+<span class="sig-name descname"><span class="pre">issubset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.issubset" title="Permalink to this definition"></a></dt>
 <dd><p>Return self&lt;=value.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.issuperset">
-<code class="sig-name descname">issuperset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.issuperset" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.issuperset">
+<span class="sig-name descname"><span class="pre">issuperset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.issuperset" title="Permalink to this definition"></a></dt>
 <dd><p>Return self&gt;=value.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.symmetric_difference">
-<code class="sig-name descname">symmetric_difference</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.symmetric_difference" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.symmetric_difference">
+<span class="sig-name descname"><span class="pre">symmetric_difference</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.symmetric_difference" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.symmetric_difference_update">
-<code class="sig-name descname">symmetric_difference_update</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.symmetric_difference_update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.symmetric_difference_update" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.symmetric_difference_update">
+<span class="sig-name descname"><span class="pre">symmetric_difference_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.symmetric_difference_update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.symmetric_difference_update" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.union">
-<code class="sig-name descname">union</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.union" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.union">
+<span class="sig-name descname"><span class="pre">union</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._setmixin.SetMixin.union" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html._setmixin.SetMixin.update">
-<code class="sig-name descname">update</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">other</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.update" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.update">
+<span class="sig-name descname"><span class="pre">update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/_setmixin.html#SetMixin.update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._setmixin.SetMixin.update" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html._setmixin.SetMixin._abc_impl">
-<code class="sig-name descname">_abc_impl</code><em class="property"> = &lt;_abc_data object&gt;</em><a class="headerlink" href="#lxml.html._setmixin.SetMixin._abc_impl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin._abc_impl">
+<span class="sig-name descname"><span class="pre">_abc_impl</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;_abc._abc_data</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.html._setmixin.SetMixin._abc_impl" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.builder.html" class="btn btn-neutral float-right" title="lxml.html.builder module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html._diffcommand.html" class="btn btn-neutral float-left" title="lxml.html._diffcommand module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html._diffcommand.html" class="btn btn-neutral float-left" title="lxml.html._diffcommand module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.builder.html" class="btn btn-neutral float-right" title="lxml.html.builder module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 44c9a8d01f585f6c1a28d31cfd2c2b90623d5413..0b504dda78e4475dcb56e1eae872ecd4cb1d0299 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.builder module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.builder module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.clean module" href="lxml.html.clean.html" />
     <link rel="prev" title="lxml.html._setmixin module" href="lxml.html._setmixin.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.builder module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.builder.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html.builder">
-<span id="lxml-html-builder-module"></span><h1>lxml.html.builder module<a class="headerlink" href="#module-lxml.html.builder" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html.builder">
+<span id="lxml-html-builder-module"></span><h1>lxml.html.builder module<a class="headerlink" href="#module-lxml.html.builder" title="Permalink to this headline"></a></h1>
 <p>A set of HTML generator tags for building HTML documents.</p>
 <p>Usage:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml.html.builder</span> <span class="kn">import</span> <span class="o">*</span>
 </pre></div>
 </div>
 <dl class="py function">
-<dt id="lxml.html.builder.CLASS">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">CLASS</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">v</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/builder.html#CLASS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.builder.CLASS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.CLASS">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">CLASS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">v</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/builder.html#CLASS"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.builder.CLASS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.builder.FOR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">FOR</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">v</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/builder.html#FOR"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.builder.FOR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.FOR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">FOR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">v</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/builder.html#FOR"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.builder.FOR" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.A">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">A</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'a')</em><a class="headerlink" href="#lxml.html.builder.A" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.A">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">A</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'a')</span></em><a class="headerlink" href="#lxml.html.builder.A" title="Permalink to this definition"></a></dt>
 <dd><p>anchor</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.ABBR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">ABBR</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'abbr')</em><a class="headerlink" href="#lxml.html.builder.ABBR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.ABBR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">ABBR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'abbr')</span></em><a class="headerlink" href="#lxml.html.builder.ABBR" title="Permalink to this definition"></a></dt>
 <dd><p>abbreviated form (e.g., WWW, HTTP, etc.)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.ACRONYM">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">ACRONYM</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'acronym')</em><a class="headerlink" href="#lxml.html.builder.ACRONYM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.ACRONYM">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">ACRONYM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'acronym')</span></em><a class="headerlink" href="#lxml.html.builder.ACRONYM" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.ADDRESS">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">ADDRESS</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'address')</em><a class="headerlink" href="#lxml.html.builder.ADDRESS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.ADDRESS">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">ADDRESS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'address')</span></em><a class="headerlink" href="#lxml.html.builder.ADDRESS" title="Permalink to this definition"></a></dt>
 <dd><p>information on author</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.APPLET">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">APPLET</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'applet')</em><a class="headerlink" href="#lxml.html.builder.APPLET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.APPLET">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">APPLET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'applet')</span></em><a class="headerlink" href="#lxml.html.builder.APPLET" title="Permalink to this definition"></a></dt>
 <dd><p>Java applet (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.AREA">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">AREA</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'area')</em><a class="headerlink" href="#lxml.html.builder.AREA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.AREA">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">AREA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'area')</span></em><a class="headerlink" href="#lxml.html.builder.AREA" title="Permalink to this definition"></a></dt>
 <dd><p>client-side image map area</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.B">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">B</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'b')</em><a class="headerlink" href="#lxml.html.builder.B" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.B">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">B</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'b')</span></em><a class="headerlink" href="#lxml.html.builder.B" title="Permalink to this definition"></a></dt>
 <dd><p>bold text style</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BASE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BASE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'base')</em><a class="headerlink" href="#lxml.html.builder.BASE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BASE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BASE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'base')</span></em><a class="headerlink" href="#lxml.html.builder.BASE" title="Permalink to this definition"></a></dt>
 <dd><p>document base URI</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BASEFONT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BASEFONT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'basefont')</em><a class="headerlink" href="#lxml.html.builder.BASEFONT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BASEFONT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BASEFONT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'basefont')</span></em><a class="headerlink" href="#lxml.html.builder.BASEFONT" title="Permalink to this definition"></a></dt>
 <dd><p>base font size (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BDO">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BDO</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'bdo')</em><a class="headerlink" href="#lxml.html.builder.BDO" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BDO">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BDO</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'bdo')</span></em><a class="headerlink" href="#lxml.html.builder.BDO" title="Permalink to this definition"></a></dt>
 <dd><p>I18N BiDi over-ride</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BIG">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BIG</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'big')</em><a class="headerlink" href="#lxml.html.builder.BIG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BIG">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BIG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'big')</span></em><a class="headerlink" href="#lxml.html.builder.BIG" title="Permalink to this definition"></a></dt>
 <dd><p>large text style</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BLOCKQUOTE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BLOCKQUOTE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'blockquote')</em><a class="headerlink" href="#lxml.html.builder.BLOCKQUOTE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BLOCKQUOTE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BLOCKQUOTE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'blockquote')</span></em><a class="headerlink" href="#lxml.html.builder.BLOCKQUOTE" title="Permalink to this definition"></a></dt>
 <dd><p>long quotation</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BODY">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BODY</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'body')</em><a class="headerlink" href="#lxml.html.builder.BODY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BODY">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BODY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'body')</span></em><a class="headerlink" href="#lxml.html.builder.BODY" title="Permalink to this definition"></a></dt>
 <dd><p>document body</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BR</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'br')</em><a class="headerlink" href="#lxml.html.builder.BR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'br')</span></em><a class="headerlink" href="#lxml.html.builder.BR" title="Permalink to this definition"></a></dt>
 <dd><p>forced line break</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.BUTTON">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">BUTTON</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'button')</em><a class="headerlink" href="#lxml.html.builder.BUTTON" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.BUTTON">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">BUTTON</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'button')</span></em><a class="headerlink" href="#lxml.html.builder.BUTTON" title="Permalink to this definition"></a></dt>
 <dd><p>push button</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.CAPTION">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">CAPTION</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'caption')</em><a class="headerlink" href="#lxml.html.builder.CAPTION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.CAPTION">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">CAPTION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'caption')</span></em><a class="headerlink" href="#lxml.html.builder.CAPTION" title="Permalink to this definition"></a></dt>
 <dd><p>table caption</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.CENTER">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">CENTER</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'center')</em><a class="headerlink" href="#lxml.html.builder.CENTER" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.CENTER">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">CENTER</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'center')</span></em><a class="headerlink" href="#lxml.html.builder.CENTER" title="Permalink to this definition"></a></dt>
 <dd><p>shorthand for DIV align=center (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.CITE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">CITE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'cite')</em><a class="headerlink" href="#lxml.html.builder.CITE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.CITE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">CITE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'cite')</span></em><a class="headerlink" href="#lxml.html.builder.CITE" title="Permalink to this definition"></a></dt>
 <dd><p>citation</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.CODE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">CODE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'code')</em><a class="headerlink" href="#lxml.html.builder.CODE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.CODE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">CODE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'code')</span></em><a class="headerlink" href="#lxml.html.builder.CODE" title="Permalink to this definition"></a></dt>
 <dd><p>computer code fragment</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.COL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">COL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'col')</em><a class="headerlink" href="#lxml.html.builder.COL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.COL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">COL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'col')</span></em><a class="headerlink" href="#lxml.html.builder.COL" title="Permalink to this definition"></a></dt>
 <dd><p>table column</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.COLGROUP">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">COLGROUP</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'colgroup')</em><a class="headerlink" href="#lxml.html.builder.COLGROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.COLGROUP">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">COLGROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'colgroup')</span></em><a class="headerlink" href="#lxml.html.builder.COLGROUP" title="Permalink to this definition"></a></dt>
 <dd><p>table column group</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DD">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DD</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'dd')</em><a class="headerlink" href="#lxml.html.builder.DD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DD">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'dd')</span></em><a class="headerlink" href="#lxml.html.builder.DD" title="Permalink to this definition"></a></dt>
 <dd><p>definition description</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DEL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DEL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'del')</em><a class="headerlink" href="#lxml.html.builder.DEL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DEL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DEL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'del')</span></em><a class="headerlink" href="#lxml.html.builder.DEL" title="Permalink to this definition"></a></dt>
 <dd><p>deleted text</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DFN">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DFN</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'dfn')</em><a class="headerlink" href="#lxml.html.builder.DFN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DFN">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DFN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'dfn')</span></em><a class="headerlink" href="#lxml.html.builder.DFN" title="Permalink to this definition"></a></dt>
 <dd><p>instance definition</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DIR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DIR</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'dir')</em><a class="headerlink" href="#lxml.html.builder.DIR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DIR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DIR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'dir')</span></em><a class="headerlink" href="#lxml.html.builder.DIR" title="Permalink to this definition"></a></dt>
 <dd><p>directory list (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DIV">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DIV</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'div')</em><a class="headerlink" href="#lxml.html.builder.DIV" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DIV">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DIV</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'div')</span></em><a class="headerlink" href="#lxml.html.builder.DIV" title="Permalink to this definition"></a></dt>
 <dd><p>generic language/style container</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'dl')</em><a class="headerlink" href="#lxml.html.builder.DL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'dl')</span></em><a class="headerlink" href="#lxml.html.builder.DL" title="Permalink to this definition"></a></dt>
 <dd><p>definition list</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.DT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">DT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'dt')</em><a class="headerlink" href="#lxml.html.builder.DT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.DT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">DT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'dt')</span></em><a class="headerlink" href="#lxml.html.builder.DT" title="Permalink to this definition"></a></dt>
 <dd><p>definition term</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.EM">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">EM</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'em')</em><a class="headerlink" href="#lxml.html.builder.EM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.EM">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">EM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'em')</span></em><a class="headerlink" href="#lxml.html.builder.EM" title="Permalink to this definition"></a></dt>
 <dd><p>emphasis</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.FIELDSET">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">FIELDSET</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'fieldset')</em><a class="headerlink" href="#lxml.html.builder.FIELDSET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.FIELDSET">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">FIELDSET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'fieldset')</span></em><a class="headerlink" href="#lxml.html.builder.FIELDSET" title="Permalink to this definition"></a></dt>
 <dd><p>form control group</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.FONT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">FONT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'font')</em><a class="headerlink" href="#lxml.html.builder.FONT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.FONT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">FONT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'font')</span></em><a class="headerlink" href="#lxml.html.builder.FONT" title="Permalink to this definition"></a></dt>
 <dd><p>local change to font (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.FORM">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">FORM</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'form')</em><a class="headerlink" href="#lxml.html.builder.FORM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.FORM">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">FORM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'form')</span></em><a class="headerlink" href="#lxml.html.builder.FORM" title="Permalink to this definition"></a></dt>
 <dd><p>interactive form</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.FRAME">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">FRAME</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'frame')</em><a class="headerlink" href="#lxml.html.builder.FRAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.FRAME">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">FRAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'frame')</span></em><a class="headerlink" href="#lxml.html.builder.FRAME" title="Permalink to this definition"></a></dt>
 <dd><p>subwindow</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.FRAMESET">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">FRAMESET</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'frameset')</em><a class="headerlink" href="#lxml.html.builder.FRAMESET" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.FRAMESET">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">FRAMESET</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'frameset')</span></em><a class="headerlink" href="#lxml.html.builder.FRAMESET" title="Permalink to this definition"></a></dt>
 <dd><p>window subdivision</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.H1">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">H1</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'h1')</em><a class="headerlink" href="#lxml.html.builder.H1" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.H1">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">H1</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'h1')</span></em><a class="headerlink" href="#lxml.html.builder.H1" title="Permalink to this definition"></a></dt>
 <dd><p>heading</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.H2">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">H2</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'h2')</em><a class="headerlink" href="#lxml.html.builder.H2" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.H2">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">H2</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'h2')</span></em><a class="headerlink" href="#lxml.html.builder.H2" title="Permalink to this definition"></a></dt>
 <dd><p>heading</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.H3">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">H3</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'h3')</em><a class="headerlink" href="#lxml.html.builder.H3" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.H3">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">H3</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'h3')</span></em><a class="headerlink" href="#lxml.html.builder.H3" title="Permalink to this definition"></a></dt>
 <dd><p>heading</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.H4">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">H4</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'h4')</em><a class="headerlink" href="#lxml.html.builder.H4" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.H4">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">H4</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'h4')</span></em><a class="headerlink" href="#lxml.html.builder.H4" title="Permalink to this definition"></a></dt>
 <dd><p>heading</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.H5">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">H5</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'h5')</em><a class="headerlink" href="#lxml.html.builder.H5" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.H5">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">H5</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'h5')</span></em><a class="headerlink" href="#lxml.html.builder.H5" title="Permalink to this definition"></a></dt>
 <dd><p>heading</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.H6">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">H6</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'h6')</em><a class="headerlink" href="#lxml.html.builder.H6" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.H6">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">H6</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'h6')</span></em><a class="headerlink" href="#lxml.html.builder.H6" title="Permalink to this definition"></a></dt>
 <dd><p>heading</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.HEAD">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">HEAD</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'head')</em><a class="headerlink" href="#lxml.html.builder.HEAD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.HEAD">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">HEAD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'head')</span></em><a class="headerlink" href="#lxml.html.builder.HEAD" title="Permalink to this definition"></a></dt>
 <dd><p>document head</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.HR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">HR</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'hr')</em><a class="headerlink" href="#lxml.html.builder.HR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.HR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">HR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'hr')</span></em><a class="headerlink" href="#lxml.html.builder.HR" title="Permalink to this definition"></a></dt>
 <dd><p>horizontal rule</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.HTML">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">HTML</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'html')</em><a class="headerlink" href="#lxml.html.builder.HTML" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.HTML">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">HTML</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'html')</span></em><a class="headerlink" href="#lxml.html.builder.HTML" title="Permalink to this definition"></a></dt>
 <dd><p>document root element</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.I">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">I</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'i')</em><a class="headerlink" href="#lxml.html.builder.I" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.I">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">I</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'i')</span></em><a class="headerlink" href="#lxml.html.builder.I" title="Permalink to this definition"></a></dt>
 <dd><p>italic text style</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.IFRAME">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">IFRAME</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'iframe')</em><a class="headerlink" href="#lxml.html.builder.IFRAME" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.IFRAME">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">IFRAME</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'iframe')</span></em><a class="headerlink" href="#lxml.html.builder.IFRAME" title="Permalink to this definition"></a></dt>
 <dd><p>inline subwindow</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.IMG">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">IMG</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'img')</em><a class="headerlink" href="#lxml.html.builder.IMG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.IMG">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">IMG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'img')</span></em><a class="headerlink" href="#lxml.html.builder.IMG" title="Permalink to this definition"></a></dt>
 <dd><p>Embedded image</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.INPUT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">INPUT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'input')</em><a class="headerlink" href="#lxml.html.builder.INPUT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.INPUT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">INPUT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'input')</span></em><a class="headerlink" href="#lxml.html.builder.INPUT" title="Permalink to this definition"></a></dt>
 <dd><p>form control</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.INS">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">INS</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'ins')</em><a class="headerlink" href="#lxml.html.builder.INS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.INS">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">INS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'ins')</span></em><a class="headerlink" href="#lxml.html.builder.INS" title="Permalink to this definition"></a></dt>
 <dd><p>inserted text</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.ISINDEX">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">ISINDEX</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'isindex')</em><a class="headerlink" href="#lxml.html.builder.ISINDEX" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.ISINDEX">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">ISINDEX</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'isindex')</span></em><a class="headerlink" href="#lxml.html.builder.ISINDEX" title="Permalink to this definition"></a></dt>
 <dd><p>single line prompt (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.KBD">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">KBD</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'kbd')</em><a class="headerlink" href="#lxml.html.builder.KBD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.KBD">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">KBD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'kbd')</span></em><a class="headerlink" href="#lxml.html.builder.KBD" title="Permalink to this definition"></a></dt>
 <dd><p>text to be entered by the user</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.LABEL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">LABEL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'label')</em><a class="headerlink" href="#lxml.html.builder.LABEL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.LABEL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">LABEL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'label')</span></em><a class="headerlink" href="#lxml.html.builder.LABEL" title="Permalink to this definition"></a></dt>
 <dd><p>form field label text</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.LEGEND">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">LEGEND</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'legend')</em><a class="headerlink" href="#lxml.html.builder.LEGEND" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.LEGEND">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">LEGEND</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'legend')</span></em><a class="headerlink" href="#lxml.html.builder.LEGEND" title="Permalink to this definition"></a></dt>
 <dd><p>fieldset legend</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.LI">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">LI</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'li')</em><a class="headerlink" href="#lxml.html.builder.LI" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.LI">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">LI</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'li')</span></em><a class="headerlink" href="#lxml.html.builder.LI" title="Permalink to this definition"></a></dt>
 <dd><p>list item</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.LINK">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">LINK</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'link')</em><a class="headerlink" href="#lxml.html.builder.LINK" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.LINK">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">LINK</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'link')</span></em><a class="headerlink" href="#lxml.html.builder.LINK" title="Permalink to this definition"></a></dt>
 <dd><p>a media-independent link</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.MAP">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">MAP</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'map')</em><a class="headerlink" href="#lxml.html.builder.MAP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.MAP">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">MAP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'map')</span></em><a class="headerlink" href="#lxml.html.builder.MAP" title="Permalink to this definition"></a></dt>
 <dd><p>client-side image map</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.MENU">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">MENU</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'menu')</em><a class="headerlink" href="#lxml.html.builder.MENU" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.MENU">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">MENU</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'menu')</span></em><a class="headerlink" href="#lxml.html.builder.MENU" title="Permalink to this definition"></a></dt>
 <dd><p>menu list (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.META">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">META</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'meta')</em><a class="headerlink" href="#lxml.html.builder.META" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.META">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">META</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'meta')</span></em><a class="headerlink" href="#lxml.html.builder.META" title="Permalink to this definition"></a></dt>
 <dd><p>generic metainformation</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.NOFRAMES">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">NOFRAMES</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'noframes')</em><a class="headerlink" href="#lxml.html.builder.NOFRAMES" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.NOFRAMES">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">NOFRAMES</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'noframes')</span></em><a class="headerlink" href="#lxml.html.builder.NOFRAMES" title="Permalink to this definition"></a></dt>
 <dd><p>alternate content container for non frame-based rendering</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.NOSCRIPT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">NOSCRIPT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'noscript')</em><a class="headerlink" href="#lxml.html.builder.NOSCRIPT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.NOSCRIPT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">NOSCRIPT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'noscript')</span></em><a class="headerlink" href="#lxml.html.builder.NOSCRIPT" title="Permalink to this definition"></a></dt>
 <dd><p>alternate content container for non script-based rendering</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.OBJECT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">OBJECT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'object')</em><a class="headerlink" href="#lxml.html.builder.OBJECT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.OBJECT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">OBJECT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'object')</span></em><a class="headerlink" href="#lxml.html.builder.OBJECT" title="Permalink to this definition"></a></dt>
 <dd><p>generic embedded object</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.OL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">OL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'ol')</em><a class="headerlink" href="#lxml.html.builder.OL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.OL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">OL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'ol')</span></em><a class="headerlink" href="#lxml.html.builder.OL" title="Permalink to this definition"></a></dt>
 <dd><p>ordered list</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.OPTGROUP">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">OPTGROUP</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'optgroup')</em><a class="headerlink" href="#lxml.html.builder.OPTGROUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.OPTGROUP">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">OPTGROUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'optgroup')</span></em><a class="headerlink" href="#lxml.html.builder.OPTGROUP" title="Permalink to this definition"></a></dt>
 <dd><p>option group</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.OPTION">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">OPTION</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'option')</em><a class="headerlink" href="#lxml.html.builder.OPTION" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.OPTION">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">OPTION</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'option')</span></em><a class="headerlink" href="#lxml.html.builder.OPTION" title="Permalink to this definition"></a></dt>
 <dd><p>selectable choice</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.P">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">P</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'p')</em><a class="headerlink" href="#lxml.html.builder.P" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.P">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">P</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'p')</span></em><a class="headerlink" href="#lxml.html.builder.P" title="Permalink to this definition"></a></dt>
 <dd><p>paragraph</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.PARAM">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">PARAM</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'param')</em><a class="headerlink" href="#lxml.html.builder.PARAM" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.PARAM">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">PARAM</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'param')</span></em><a class="headerlink" href="#lxml.html.builder.PARAM" title="Permalink to this definition"></a></dt>
 <dd><p>named property value</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.PRE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">PRE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'pre')</em><a class="headerlink" href="#lxml.html.builder.PRE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.PRE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">PRE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'pre')</span></em><a class="headerlink" href="#lxml.html.builder.PRE" title="Permalink to this definition"></a></dt>
 <dd><p>preformatted text</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.Q">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">Q</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'q')</em><a class="headerlink" href="#lxml.html.builder.Q" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.Q">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">Q</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'q')</span></em><a class="headerlink" href="#lxml.html.builder.Q" title="Permalink to this definition"></a></dt>
 <dd><p>short inline quotation</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.S">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">S</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 's')</em><a class="headerlink" href="#lxml.html.builder.S" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.S">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">S</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'s')</span></em><a class="headerlink" href="#lxml.html.builder.S" title="Permalink to this definition"></a></dt>
 <dd><p>strike-through text style (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SAMP">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SAMP</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'samp')</em><a class="headerlink" href="#lxml.html.builder.SAMP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SAMP">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SAMP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'samp')</span></em><a class="headerlink" href="#lxml.html.builder.SAMP" title="Permalink to this definition"></a></dt>
 <dd><p>sample program output, scripts, etc.</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SCRIPT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SCRIPT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'script')</em><a class="headerlink" href="#lxml.html.builder.SCRIPT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SCRIPT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SCRIPT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'script')</span></em><a class="headerlink" href="#lxml.html.builder.SCRIPT" title="Permalink to this definition"></a></dt>
 <dd><p>script statements</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SELECT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SELECT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'select')</em><a class="headerlink" href="#lxml.html.builder.SELECT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SELECT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SELECT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'select')</span></em><a class="headerlink" href="#lxml.html.builder.SELECT" title="Permalink to this definition"></a></dt>
 <dd><p>option selector</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SMALL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SMALL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'small')</em><a class="headerlink" href="#lxml.html.builder.SMALL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SMALL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SMALL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'small')</span></em><a class="headerlink" href="#lxml.html.builder.SMALL" title="Permalink to this definition"></a></dt>
 <dd><p>small text style</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SPAN">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SPAN</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'span')</em><a class="headerlink" href="#lxml.html.builder.SPAN" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SPAN">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SPAN</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'span')</span></em><a class="headerlink" href="#lxml.html.builder.SPAN" title="Permalink to this definition"></a></dt>
 <dd><p>generic language/style container</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.STRIKE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">STRIKE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'strike')</em><a class="headerlink" href="#lxml.html.builder.STRIKE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.STRIKE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">STRIKE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'strike')</span></em><a class="headerlink" href="#lxml.html.builder.STRIKE" title="Permalink to this definition"></a></dt>
 <dd><p>strike-through text (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.STRONG">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">STRONG</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'strong')</em><a class="headerlink" href="#lxml.html.builder.STRONG" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.STRONG">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">STRONG</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'strong')</span></em><a class="headerlink" href="#lxml.html.builder.STRONG" title="Permalink to this definition"></a></dt>
 <dd><p>strong emphasis</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.STYLE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">STYLE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'style')</em><a class="headerlink" href="#lxml.html.builder.STYLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.STYLE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">STYLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'style')</span></em><a class="headerlink" href="#lxml.html.builder.STYLE" title="Permalink to this definition"></a></dt>
 <dd><p>style info</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SUB">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SUB</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'sub')</em><a class="headerlink" href="#lxml.html.builder.SUB" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SUB">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SUB</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'sub')</span></em><a class="headerlink" href="#lxml.html.builder.SUB" title="Permalink to this definition"></a></dt>
 <dd><p>subscript</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.SUP">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">SUP</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'sup')</em><a class="headerlink" href="#lxml.html.builder.SUP" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.SUP">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">SUP</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'sup')</span></em><a class="headerlink" href="#lxml.html.builder.SUP" title="Permalink to this definition"></a></dt>
 <dd><p>superscript</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TABLE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TABLE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'table')</em><a class="headerlink" href="#lxml.html.builder.TABLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TABLE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TABLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'table')</span></em><a class="headerlink" href="#lxml.html.builder.TABLE" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TBODY">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TBODY</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'tbody')</em><a class="headerlink" href="#lxml.html.builder.TBODY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TBODY">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TBODY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'tbody')</span></em><a class="headerlink" href="#lxml.html.builder.TBODY" title="Permalink to this definition"></a></dt>
 <dd><p>table body</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TD">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TD</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'td')</em><a class="headerlink" href="#lxml.html.builder.TD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TD">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'td')</span></em><a class="headerlink" href="#lxml.html.builder.TD" title="Permalink to this definition"></a></dt>
 <dd><p>table data cell</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TEXTAREA">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TEXTAREA</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'textarea')</em><a class="headerlink" href="#lxml.html.builder.TEXTAREA" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TEXTAREA">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TEXTAREA</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'textarea')</span></em><a class="headerlink" href="#lxml.html.builder.TEXTAREA" title="Permalink to this definition"></a></dt>
 <dd><p>multi-line text field</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TFOOT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TFOOT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'tfoot')</em><a class="headerlink" href="#lxml.html.builder.TFOOT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TFOOT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TFOOT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'tfoot')</span></em><a class="headerlink" href="#lxml.html.builder.TFOOT" title="Permalink to this definition"></a></dt>
 <dd><p>table footer</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TH">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TH</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'th')</em><a class="headerlink" href="#lxml.html.builder.TH" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TH">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TH</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'th')</span></em><a class="headerlink" href="#lxml.html.builder.TH" title="Permalink to this definition"></a></dt>
 <dd><p>table header cell</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.THEAD">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">THEAD</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'thead')</em><a class="headerlink" href="#lxml.html.builder.THEAD" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.THEAD">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">THEAD</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'thead')</span></em><a class="headerlink" href="#lxml.html.builder.THEAD" title="Permalink to this definition"></a></dt>
 <dd><p>table header</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TITLE">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TITLE</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'title')</em><a class="headerlink" href="#lxml.html.builder.TITLE" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TITLE">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TITLE</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'title')</span></em><a class="headerlink" href="#lxml.html.builder.TITLE" title="Permalink to this definition"></a></dt>
 <dd><p>document title</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TR</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'tr')</em><a class="headerlink" href="#lxml.html.builder.TR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'tr')</span></em><a class="headerlink" href="#lxml.html.builder.TR" title="Permalink to this definition"></a></dt>
 <dd><p>table row</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.TT">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">TT</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'tt')</em><a class="headerlink" href="#lxml.html.builder.TT" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.TT">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">TT</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'tt')</span></em><a class="headerlink" href="#lxml.html.builder.TT" title="Permalink to this definition"></a></dt>
 <dd><p>teletype or monospaced text style</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.U">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">U</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'u')</em><a class="headerlink" href="#lxml.html.builder.U" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.U">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">U</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'u')</span></em><a class="headerlink" href="#lxml.html.builder.U" title="Permalink to this definition"></a></dt>
 <dd><p>underlined text style (DEPRECATED)</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.UL">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">UL</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'ul')</em><a class="headerlink" href="#lxml.html.builder.UL" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.UL">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">UL</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'ul')</span></em><a class="headerlink" href="#lxml.html.builder.UL" title="Permalink to this definition"></a></dt>
 <dd><p>unordered list</p>
 </dd></dl>
 
 <dl class="py data">
-<dt id="lxml.html.builder.VAR">
-<code class="sig-prename descclassname">lxml.html.builder.</code><code class="sig-name descname">VAR</code><em class="property"> = functools.partial(&lt;lxml.builder.ElementMaker object&gt;, 'var')</em><a class="headerlink" href="#lxml.html.builder.VAR" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.builder.VAR">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.builder.</span></span><span class="sig-name descname"><span class="pre">VAR</span></span><em class="property"> <span class="pre">=</span> <span class="pre">functools.partial(&lt;lxml.builder.ElementMaker</span> <span class="pre">object&gt;,</span> <span class="pre">'var')</span></em><a class="headerlink" href="#lxml.html.builder.VAR" title="Permalink to this definition"></a></dt>
 <dd><p>instance of a variable or program argument</p>
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.clean.html" class="btn btn-neutral float-right" title="lxml.html.clean module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html._setmixin.html" class="btn btn-neutral float-left" title="lxml.html._setmixin module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html._setmixin.html" class="btn btn-neutral float-left" title="lxml.html._setmixin module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.clean.html" class="btn btn-neutral float-right" title="lxml.html.clean module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index b1fe54bc725b7e23fcddbe83ceee92207c78c403..989e27209665ea47fe24b6ddb0024ed280037e90 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.clean module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.clean module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.defs module" href="lxml.html.defs.html" />
     <link rel="prev" title="lxml.html.builder module" href="lxml.html.builder.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.clean module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.clean.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html.clean">
-<span id="lxml-html-clean-module"></span><h1>lxml.html.clean module<a class="headerlink" href="#module-lxml.html.clean" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html.clean">
+<span id="lxml-html-clean-module"></span><h1>lxml.html.clean module<a class="headerlink" href="#module-lxml.html.clean" title="Permalink to this headline"></a></h1>
 <p>A cleanup tool for HTML.</p>
 <p>Removes unwanted tags and content.  See the <cite>Cleaner</cite> class for
 details.</p>
 <dl class="py class">
-<dt id="lxml.html.clean.Cleaner">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">Cleaner</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">Cleaner</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Instances cleans the document of each of the possible offending
 elements.  The cleaning is controlled by attributes; you can
@@ -262,8 +173,8 @@ include all tags.</p>
 </dl>
 <p>This modifies the document <em>in place</em>.</p>
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner._has_sneaky_javascript">
-<code class="sig-name descname">_has_sneaky_javascript</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">style</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._has_sneaky_javascript" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner._has_sneaky_javascript">
+<span class="sig-name descname"><span class="pre">_has_sneaky_javascript</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">style</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._has_sneaky_javascript" title="Permalink to this definition"></a></dt>
 <dd><p>Depending on the browser, stuff like <code class="docutils literal notranslate"><span class="pre">e</span> <span class="pre">x</span> <span class="pre">p</span> <span class="pre">r</span> <span class="pre">e</span> <span class="pre">s</span> <span class="pre">s</span> <span class="pre">i</span> <span class="pre">o</span> <span class="pre">n(...)</span></code>
 can get interpreted, or <code class="docutils literal notranslate"><span class="pre">expre/*</span> <span class="pre">stuff</span> <span class="pre">*/ssion(...)</span></code>.  This
 checks for attempt to do stuff like this.</p>
@@ -274,24 +185,24 @@ more sneaky attempts.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner._kill_elements">
-<code class="sig-name descname">_kill_elements</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">condition</span></em>, <em class="sig-param"><span class="n">iterate</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._kill_elements" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner._kill_elements">
+<span class="sig-name descname"><span class="pre">_kill_elements</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">condition</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">iterate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._kill_elements" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner._remove_javascript_link">
-<code class="sig-name descname">_remove_javascript_link</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">link</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._remove_javascript_link" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner._remove_javascript_link">
+<span class="sig-name descname"><span class="pre">_remove_javascript_link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">link</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._remove_javascript_link" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner._substitute_comments">
-<code class="sig-name descname">_substitute_comments</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">count</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._substitute_comments" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner._substitute_comments">
+<span class="sig-name descname"><span class="pre">_substitute_comments</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner._substitute_comments" title="Permalink to this definition"></a></dt>
 <dd><p>Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner.allow_element">
-<code class="sig-name descname">allow_element</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_element" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.allow_element">
+<span class="sig-name descname"><span class="pre">allow_element</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_element" title="Permalink to this definition"></a></dt>
 <dd><p>Decide whether an element is configured to be accepted or rejected.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
@@ -304,8 +215,8 @@ more sneaky attempts.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner.allow_embedded_url">
-<code class="sig-name descname">allow_embedded_url</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">url</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_embedded_url" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.allow_embedded_url">
+<span class="sig-name descname"><span class="pre">allow_embedded_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">url</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_embedded_url" title="Permalink to this definition"></a></dt>
 <dd><p>Decide whether a URL that was found in an element’s attributes or text
 if configured to be accepted or rejected.</p>
 <dl class="field-list simple">
@@ -322,203 +233,203 @@ if configured to be accepted or rejected.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner.allow_follow">
-<code class="sig-name descname">allow_follow</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">anchor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_follow" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.allow_follow">
+<span class="sig-name descname"><span class="pre">allow_follow</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">anchor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_follow" title="Permalink to this definition"></a></dt>
 <dd><p>Override to suppress rel=”nofollow” on some anchors.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner.clean_html">
-<code class="sig-name descname">clean_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.clean_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.clean_html">
+<span class="sig-name descname"><span class="pre">clean_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.clean_html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.clean.Cleaner.kill_conditional_comments">
-<code class="sig-name descname">kill_conditional_comments</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.kill_conditional_comments" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.kill_conditional_comments">
+<span class="sig-name descname"><span class="pre">kill_conditional_comments</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.Cleaner.kill_conditional_comments" title="Permalink to this definition"></a></dt>
 <dd><p>IE conditional comments basically embed HTML that the parser
 doesn’t normally see.  We can’t allow anything like that, so
 we’ll kill any comments that could be conditional.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner._tag_link_attrs">
-<code class="sig-name descname">_tag_link_attrs</code><em class="property"> = {'a': 'href', 'applet': ['code', 'object'], 'embed': 'src', 'iframe': 'src', 'layer': 'src', 'link': 'href', 'script': 'src'}</em><a class="headerlink" href="#lxml.html.clean.Cleaner._tag_link_attrs" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner._tag_link_attrs">
+<span class="sig-name descname"><span class="pre">_tag_link_attrs</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{'a':</span> <span class="pre">'href',</span> <span class="pre">'applet':</span> <span class="pre">['code',</span> <span class="pre">'object'],</span> <span class="pre">'embed':</span> <span class="pre">'src',</span> <span class="pre">'iframe':</span> <span class="pre">'src',</span> <span class="pre">'layer':</span> <span class="pre">'src',</span> <span class="pre">'link':</span> <span class="pre">'href',</span> <span class="pre">'script':</span> <span class="pre">'src'}</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner._tag_link_attrs" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.add_nofollow">
-<code class="sig-name descname">add_nofollow</code><em class="property"> = False</em><a class="headerlink" href="#lxml.html.clean.Cleaner.add_nofollow" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.add_nofollow">
+<span class="sig-name descname"><span class="pre">add_nofollow</span></span><em class="property"> <span class="pre">=</span> <span class="pre">False</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.add_nofollow" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.allow_tags">
-<code class="sig-name descname">allow_tags</code><em class="property"> = None</em><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.allow_tags">
+<span class="sig-name descname"><span class="pre">allow_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.allow_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.annoying_tags">
-<code class="sig-name descname">annoying_tags</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.annoying_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.annoying_tags">
+<span class="sig-name descname"><span class="pre">annoying_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.annoying_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.comments">
-<code class="sig-name descname">comments</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.comments" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.comments">
+<span class="sig-name descname"><span class="pre">comments</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.comments" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.embedded">
-<code class="sig-name descname">embedded</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.embedded" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.embedded">
+<span class="sig-name descname"><span class="pre">embedded</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.embedded" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.forms">
-<code class="sig-name descname">forms</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.forms" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.forms">
+<span class="sig-name descname"><span class="pre">forms</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.forms" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.frames">
-<code class="sig-name descname">frames</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.frames" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.frames">
+<span class="sig-name descname"><span class="pre">frames</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.frames" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.host_whitelist">
-<code class="sig-name descname">host_whitelist</code><em class="property"> = ()</em><a class="headerlink" href="#lxml.html.clean.Cleaner.host_whitelist" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.host_whitelist">
+<span class="sig-name descname"><span class="pre">host_whitelist</span></span><em class="property"> <span class="pre">=</span> <span class="pre">()</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.host_whitelist" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.inline_style">
-<code class="sig-name descname">inline_style</code><em class="property"> = None</em><a class="headerlink" href="#lxml.html.clean.Cleaner.inline_style" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.inline_style">
+<span class="sig-name descname"><span class="pre">inline_style</span></span><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.inline_style" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.javascript">
-<code class="sig-name descname">javascript</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.javascript" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.javascript">
+<span class="sig-name descname"><span class="pre">javascript</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.javascript" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.kill_tags">
-<code class="sig-name descname">kill_tags</code><em class="property"> = None</em><a class="headerlink" href="#lxml.html.clean.Cleaner.kill_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.kill_tags">
+<span class="sig-name descname"><span class="pre">kill_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.kill_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.links">
-<code class="sig-name descname">links</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.links" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.links">
+<span class="sig-name descname"><span class="pre">links</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.links" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.meta">
-<code class="sig-name descname">meta</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.meta" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.meta">
+<span class="sig-name descname"><span class="pre">meta</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.meta" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.page_structure">
-<code class="sig-name descname">page_structure</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.page_structure" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.page_structure">
+<span class="sig-name descname"><span class="pre">page_structure</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.page_structure" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.processing_instructions">
-<code class="sig-name descname">processing_instructions</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.processing_instructions" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.processing_instructions">
+<span class="sig-name descname"><span class="pre">processing_instructions</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.processing_instructions" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.remove_tags">
-<code class="sig-name descname">remove_tags</code><em class="property"> = None</em><a class="headerlink" href="#lxml.html.clean.Cleaner.remove_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.remove_tags">
+<span class="sig-name descname"><span class="pre">remove_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">None</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.remove_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.remove_unknown_tags">
-<code class="sig-name descname">remove_unknown_tags</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.remove_unknown_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.remove_unknown_tags">
+<span class="sig-name descname"><span class="pre">remove_unknown_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.remove_unknown_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.safe_attrs">
-<code class="sig-name descname">safe_attrs</code><em class="property"> = frozenset({'abbr', 'accept', 'accept-charset', 'accesskey', 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'compact', 'coords', 'datetime', 'dir', 'disabled', 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', 'usemap', 'valign', 'value', 'vspace', 'width'})</em><a class="headerlink" href="#lxml.html.clean.Cleaner.safe_attrs" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.safe_attrs">
+<span class="sig-name descname"><span class="pre">safe_attrs</span></span><em class="property"> <span class="pre">=</span> <span class="pre">frozenset({'abbr',</span> <span class="pre">'accept',</span> <span class="pre">'accept-charset',</span> <span class="pre">'accesskey',</span> <span class="pre">'action',</span> <span class="pre">'align',</span> <span class="pre">'alt',</span> <span class="pre">'axis',</span> <span class="pre">'border',</span> <span class="pre">'cellpadding',</span> <span class="pre">'cellspacing',</span> <span class="pre">'char',</span> <span class="pre">'charoff',</span> <span class="pre">'charset',</span> <span class="pre">'checked',</span> <span class="pre">'cite',</span> <span class="pre">'class',</span> <span class="pre">'clear',</span> <span class="pre">'color',</span> <span class="pre">'cols',</span> <span class="pre">'colspan',</span> <span class="pre">'compact',</span> <span class="pre">'coords',</span> <span class="pre">'datetime',</span> <span class="pre">'dir',</span> <span class="pre">'disabled',</span> <span class="pre">'enctype',</span> <span class="pre">'for',</span> <span class="pre">'frame',</span> <span class="pre">'headers',</span> <span class="pre">'height',</span> <span class="pre">'href',</span> <span class="pre">'hreflang',</span> <span class="pre">'hspace',</span> <span class="pre">'id',</span> <span class="pre">'ismap',</span> <span class="pre">'label',</span> <span class="pre">'lang',</span> <span class="pre">'longdesc',</span> <span class="pre">'maxlength',</span> <span class="pre">'media',</span> <span class="pre">'method',</span> <span class="pre">'multiple',</span> <span class="pre">'name',</span> <span class="pre">'nohref',</span> <span class="pre">'noshade',</span> <span class="pre">'nowrap',</span> <span class="pre">'prompt',</span> <span class="pre">'readonly',</span> <span class="pre">'rel',</span> <span class="pre">'rev',</span> <span class="pre">'rows',</span> <span class="pre">'rowspan',</span> <span class="pre">'rules',</span> <span class="pre">'scope',</span> <span class="pre">'selected',</span> <span class="pre">'shape',</span> <span class="pre">'size',</span> <span class="pre">'span',</span> <span class="pre">'src',</span> <span class="pre">'start',</span> <span class="pre">'summary',</span> <span class="pre">'tabindex',</span> <span class="pre">'target',</span> <span class="pre">'title',</span> <span class="pre">'type',</span> <span class="pre">'usemap',</span> <span class="pre">'valign',</span> <span class="pre">'value',</span> <span class="pre">'vspace',</span> <span class="pre">'width'})</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.safe_attrs" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.safe_attrs_only">
-<code class="sig-name descname">safe_attrs_only</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.safe_attrs_only" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.safe_attrs_only">
+<span class="sig-name descname"><span class="pre">safe_attrs_only</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.safe_attrs_only" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.scripts">
-<code class="sig-name descname">scripts</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.clean.Cleaner.scripts" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.scripts">
+<span class="sig-name descname"><span class="pre">scripts</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.scripts" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.style">
-<code class="sig-name descname">style</code><em class="property"> = False</em><a class="headerlink" href="#lxml.html.clean.Cleaner.style" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.style">
+<span class="sig-name descname"><span class="pre">style</span></span><em class="property"> <span class="pre">=</span> <span class="pre">False</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.style" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.clean.Cleaner.whitelist_tags">
-<code class="sig-name descname">whitelist_tags</code><em class="property"> = {'embed', 'iframe'}</em><a class="headerlink" href="#lxml.html.clean.Cleaner.whitelist_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.Cleaner.whitelist_tags">
+<span class="sig-name descname"><span class="pre">whitelist_tags</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{'embed',</span> <span class="pre">'iframe'}</span></em><a class="headerlink" href="#lxml.html.clean.Cleaner.whitelist_tags" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._break_text">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_break_text</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">max_width</span></em>, <em class="sig-param"><span class="n">break_character</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._break_text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._break_text">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_break_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">break_character</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._break_text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._insert_break">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_insert_break</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">word</span></em>, <em class="sig-param"><span class="n">width</span></em>, <em class="sig-param"><span class="n">break_character</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._insert_break" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._insert_break">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_insert_break</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">break_character</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._insert_break" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._is_image_dataurl">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_is_image_dataurl</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._is_image_dataurl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._is_image_dataurl">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_is_image_dataurl</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._is_image_dataurl" title="Permalink to this definition"></a></dt>
 <dd><p>Scan through string looking for a match, and return a corresponding match object instance.</p>
 <p>Return None if no position in the string matches.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._is_javascript_scheme">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_is_javascript_scheme</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._is_javascript_scheme" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._is_javascript_scheme">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_is_javascript_scheme</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._is_javascript_scheme" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._is_possibly_malicious_scheme">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_is_possibly_malicious_scheme</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._is_possibly_malicious_scheme" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._is_possibly_malicious_scheme">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_is_possibly_malicious_scheme</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._is_possibly_malicious_scheme" title="Permalink to this definition"></a></dt>
 <dd><p>Scan through string looking for a match, and return a corresponding match object instance.</p>
 <p>Return None if no position in the string matches.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._link_text">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_link_text</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">link_regexes</span></em>, <em class="sig-param"><span class="n">avoid_hosts</span></em>, <em class="sig-param"><span class="n">factory</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._link_text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._link_text">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_link_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">link_regexes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">avoid_hosts</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">factory</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._link_text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._looks_like_tag_content">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_looks_like_tag_content</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._looks_like_tag_content" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._looks_like_tag_content">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_looks_like_tag_content</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._looks_like_tag_content" title="Permalink to this definition"></a></dt>
 <dd><p>Scan through string looking for a match, and return a corresponding match object instance.</p>
 <p>Return None if no position in the string matches.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._replace_css_import">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_replace_css_import</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">repl</span></em>, <em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">count</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._replace_css_import" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._replace_css_import">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_replace_css_import</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">repl</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._replace_css_import" title="Permalink to this definition"></a></dt>
 <dd><p>Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._replace_css_javascript">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_replace_css_javascript</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">repl</span></em>, <em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">count</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._replace_css_javascript" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._replace_css_javascript">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_replace_css_javascript</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">repl</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._replace_css_javascript" title="Permalink to this definition"></a></dt>
 <dd><p>Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean._substitute_whitespace">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">_substitute_whitespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">repl</span></em>, <em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">count</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._substitute_whitespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean._substitute_whitespace">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">_substitute_whitespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">repl</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean._substitute_whitespace" title="Permalink to this definition"></a></dt>
 <dd><p>Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean.autolink">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">autolink</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">link_regexes</span><span class="o">=</span><span class="default_value">[re.compile('(?P&lt;body&gt;https?://(?P&lt;host&gt;[a-z0-9._-]+)(?:/[/\\-_.,a-z0-9%&amp;?;=~]*)?(?:\\([/\\-_.,a-z0-9%&amp;?;=~]*\\))?)', re.IGNORECASE), re.compile('mailto:(?P&lt;body&gt;[a-z0-9._-]+&#64;(?P&lt;host&gt;[a-z0-9_.-]+[a-z]))', re.IGNORECASE)]</span></em>, <em class="sig-param"><span class="n">avoid_elements</span><span class="o">=</span><span class="default_value">['textarea', 'pre', 'code', 'head', 'select', 'a']</span></em>, <em class="sig-param"><span class="n">avoid_hosts</span><span class="o">=</span><span class="default_value">[re.compile('^localhost', re.IGNORECASE), re.compile('\\bexample\\.(?:com|org|net)$', re.IGNORECASE), re.compile('^127\\.0\\.0\\.1$')]</span></em>, <em class="sig-param"><span class="n">avoid_classes</span><span class="o">=</span><span class="default_value">['nolink']</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.autolink" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.autolink">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">autolink</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">link_regexes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[re.compile('(?P&lt;body&gt;https?://(?P&lt;host&gt;[a-z0-9._-]+)(?:/[/\\-_.,a-z0-9%&amp;?;=~]*)?(?:\\([/\\-_.,a-z0-9%&amp;?;=~]*\\))?)',</span> <span class="pre">re.IGNORECASE),</span> <span class="pre">re.compile('mailto:(?P&lt;body&gt;[a-z0-9._-]+&#64;(?P&lt;host&gt;[a-z0-9_.-]+[a-z]))',</span> <span class="pre">re.IGNORECASE)]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">avoid_elements</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">['textarea',</span> <span class="pre">'pre',</span> <span class="pre">'code',</span> <span class="pre">'head',</span> <span class="pre">'select',</span> <span class="pre">'a']</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">avoid_hosts</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[re.compile('^localhost',</span> <span class="pre">re.IGNORECASE),</span> <span class="pre">re.compile('\\bexample\\.(?:com|org|net)$',</span> <span class="pre">re.IGNORECASE),</span> <span class="pre">re.compile('^127\\.0\\.0\\.1$')]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">avoid_classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">['nolink']</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.autolink" title="Permalink to this definition"></a></dt>
 <dd><p>Turn any URLs into links.</p>
 <p>It will search for links identified by the given regular
 expressions (by default mailto and http(s) links).</p>
@@ -531,8 +442,8 @@ substituted, only the contents of the element.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean.autolink_html">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">autolink_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.autolink_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.autolink_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">autolink_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.autolink_html" title="Permalink to this definition"></a></dt>
 <dd><p>Turn any URLs into links.</p>
 <p>It will search for links identified by the given regular
 expressions (by default mailto and http(s) links).</p>
@@ -545,13 +456,13 @@ substituted, only the contents of the element.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean.clean_html">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">clean_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.clean_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.clean_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">clean_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.clean_html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean.word_break">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">word_break</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">max_width</span><span class="o">=</span><span class="default_value">40</span></em>, <em class="sig-param"><span class="n">avoid_elements</span><span class="o">=</span><span class="default_value">['pre', 'textarea', 'code']</span></em>, <em class="sig-param"><span class="n">avoid_classes</span><span class="o">=</span><span class="default_value">['nobreak']</span></em>, <em class="sig-param"><span class="n">break_character</span><span class="o">=</span><span class="default_value">'\u200b'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.word_break" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.word_break">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">word_break</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_width</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">40</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">avoid_elements</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">['pre',</span> <span class="pre">'textarea',</span> <span class="pre">'code']</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">avoid_classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">['nobreak']</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">break_character</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'\u200b'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.word_break" title="Permalink to this definition"></a></dt>
 <dd><p>Breaks any long words found in the body of the text (not attributes).</p>
 <p>Doesn’t effect any of the tags in avoid_elements, by default
 <code class="docutils literal notranslate"><span class="pre">&lt;textarea&gt;</span></code> and <code class="docutils literal notranslate"><span class="pre">&lt;pre&gt;</span></code></p>
@@ -563,66 +474,41 @@ usually takes up space.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.clean.word_break_html">
-<code class="sig-prename descclassname">lxml.html.clean.</code><code class="sig-name descname">word_break_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.word_break_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.clean.word_break_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.clean.</span></span><span class="sig-name descname"><span class="pre">word_break_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.clean.word_break_html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.defs.html" class="btn btn-neutral float-right" title="lxml.html.defs module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.builder.html" class="btn btn-neutral float-left" title="lxml.html.builder module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.builder.html" class="btn btn-neutral float-left" title="lxml.html.builder module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.defs.html" class="btn btn-neutral float-right" title="lxml.html.defs module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index a71c10e0e70638e4c58274472993fed66054ca40..8bb007836aec5c6a595f205f2dda6a225380c930 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.defs module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.defs module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.diff module" href="lxml.html.diff.html" />
     <link rel="prev" title="lxml.html.clean module" href="lxml.html.clean.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.defs module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.defs.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html.defs">
-<span id="lxml-html-defs-module"></span><h1>lxml.html.defs module<a class="headerlink" href="#module-lxml.html.defs" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html.defs">
+<span id="lxml-html-defs-module"></span><h1>lxml.html.defs module<a class="headerlink" href="#module-lxml.html.defs" title="Permalink to this headline"></a></h1>
 <p>Data taken from <a class="reference external" href="https://www.w3.org/TR/html401/index/elements.html">https://www.w3.org/TR/html401/index/elements.html</a>
 and <a class="reference external" href="https://www.w3.org/community/webed/wiki/HTML/New_HTML5_Elements">https://www.w3.org/community/webed/wiki/HTML/New_HTML5_Elements</a>
 for html5_tags.</p>
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.diff.html" class="btn btn-neutral float-right" title="lxml.html.diff module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.clean.html" class="btn btn-neutral float-left" title="lxml.html.clean module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.clean.html" class="btn btn-neutral float-left" title="lxml.html.clean module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.diff.html" class="btn btn-neutral float-right" title="lxml.html.diff module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index b4202d0fe9b704941f1a8e2350e8bae03e4f4e2b..47da6063cb2572a2f30cc57af4fbff6b814a3a72 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.diff module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.diff module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.formfill module" href="lxml.html.formfill.html" />
     <link rel="prev" title="lxml.html.defs module" href="lxml.html.defs.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.diff module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.diff.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html.diff">
-<span id="lxml-html-diff-module"></span><h1>lxml.html.diff module<a class="headerlink" href="#module-lxml.html.diff" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html.diff">
+<span id="lxml-html-diff-module"></span><h1>lxml.html.diff module<a class="headerlink" href="#module-lxml.html.diff" title="Permalink to this headline"></a></h1>
 <dl class="py exception">
-<dt id="lxml.html.diff.NoDeletes">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">NoDeletes</code><a class="headerlink" href="#lxml.html.diff.NoDeletes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.NoDeletes">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">NoDeletes</span></span><a class="headerlink" href="#lxml.html.diff.NoDeletes" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
 <p>Raised when the document no longer contains any pending deletes
 (DEL_START/DEL_END)</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.diff.DEL_END">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">DEL_END</code><a class="headerlink" href="#lxml.html.diff.DEL_END" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.DEL_END">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">DEL_END</span></span><a class="headerlink" href="#lxml.html.diff.DEL_END" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.diff.DEL_START">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">DEL_START</code><a class="headerlink" href="#lxml.html.diff.DEL_START" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.DEL_START">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">DEL_START</span></span><a class="headerlink" href="#lxml.html.diff.DEL_START" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.diff.InsensitiveSequenceMatcher">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">InsensitiveSequenceMatcher</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">isjunk</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">a</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">b</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autojunk</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.InsensitiveSequenceMatcher" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.InsensitiveSequenceMatcher">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">InsensitiveSequenceMatcher</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">isjunk</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">a</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">b</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">autojunk</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.InsensitiveSequenceMatcher" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">difflib.SequenceMatcher</span></code></p>
 <p>Acts like SequenceMatcher, but tries not to find very small equal
 blocks amidst large spans of changes</p>
 <dl class="py method">
-<dt id="lxml.html.diff.InsensitiveSequenceMatcher.get_matching_blocks">
-<code class="sig-name descname">get_matching_blocks</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.InsensitiveSequenceMatcher.get_matching_blocks" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.InsensitiveSequenceMatcher.get_matching_blocks">
+<span class="sig-name descname"><span class="pre">get_matching_blocks</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.InsensitiveSequenceMatcher.get_matching_blocks" title="Permalink to this definition"></a></dt>
 <dd><p>Return list of triples describing matching subsequences.</p>
 <p>Each triple is of the form (i, j, n), and means that
 a[i:i+n] == b[j:j+n].  The triples are monotonically increasing in
@@ -233,47 +144,47 @@ triple with n==0.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.diff.InsensitiveSequenceMatcher.threshold">
-<code class="sig-name descname">threshold</code><em class="property"> = 2</em><a class="headerlink" href="#lxml.html.diff.InsensitiveSequenceMatcher.threshold" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.InsensitiveSequenceMatcher.threshold">
+<span class="sig-name descname"><span class="pre">threshold</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#lxml.html.diff.InsensitiveSequenceMatcher.threshold" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.diff.href_token">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">href_token</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">pre_tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">post_tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">trailing_whitespace</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.href_token" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.href_token">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">href_token</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pre_tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">post_tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trailing_whitespace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.href_token" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.diff.token" title="lxml.html.diff.token"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.diff.token</span></code></a></p>
 <p>Represents the href in an anchor tag.  Unlike other words, we only
 show the href when it changes.</p>
 <dl class="py method">
-<dt id="lxml.html.diff.href_token.html">
-<code class="sig-name descname">html</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.href_token.html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.href_token.html">
+<span class="sig-name descname"><span class="pre">html</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.href_token.html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.diff.href_token.hide_when_equal">
-<code class="sig-name descname">hide_when_equal</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.diff.href_token.hide_when_equal" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.href_token.hide_when_equal">
+<span class="sig-name descname"><span class="pre">hide_when_equal</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.diff.href_token.hide_when_equal" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.diff.tag_token">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">tag_token</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tag</span></em>, <em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="n">html_repr</span></em>, <em class="sig-param"><span class="n">pre_tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">post_tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">trailing_whitespace</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tag_token" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.tag_token">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">tag_token</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">html_repr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pre_tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">post_tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trailing_whitespace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tag_token" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.diff.token" title="lxml.html.diff.token"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.diff.token</span></code></a></p>
 <p>Represents a token that is actually a tag.  Currently this is just
 the &lt;img&gt; tag, which takes up visible space just like a word but
 is only represented in a document by a tag.</p>
 <dl class="py method">
-<dt id="lxml.html.diff.tag_token.html">
-<code class="sig-name descname">html</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tag_token.html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.tag_token.html">
+<span class="sig-name descname"><span class="pre">html</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tag_token.html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.diff.token">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">token</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">pre_tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">post_tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">trailing_whitespace</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.token" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.token">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">token</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pre_tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">post_tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trailing_whitespace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.token" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
 <p>Represents a diffable token, generally a word that is displayed to
 the user.  Opening tags are attached to this token when they are
@@ -286,47 +197,47 @@ whitespace, even though we do not want to treat the word as
 equivalent to a similar word that does not have a trailing
 space.</p>
 <dl class="py method">
-<dt id="lxml.html.diff.token.html">
-<code class="sig-name descname">html</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.token.html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.token.html">
+<span class="sig-name descname"><span class="pre">html</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.token.html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.diff.token.hide_when_equal">
-<code class="sig-name descname">hide_when_equal</code><em class="property"> = False</em><a class="headerlink" href="#lxml.html.diff.token.hide_when_equal" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.token.hide_when_equal">
+<span class="sig-name descname"><span class="pre">hide_when_equal</span></span><em class="property"> <span class="pre">=</span> <span class="pre">False</span></em><a class="headerlink" href="#lxml.html.diff.token.hide_when_equal" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff._contains_block_level_tag">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">_contains_block_level_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._contains_block_level_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff._contains_block_level_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">_contains_block_level_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._contains_block_level_tag" title="Permalink to this definition"></a></dt>
 <dd><p>True if the element contains any block-level elements, like &lt;p&gt;, &lt;td&gt;, etc.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff._fixup_ins_del_tags">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">_fixup_ins_del_tags</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._fixup_ins_del_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff._fixup_ins_del_tags">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">_fixup_ins_del_tags</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._fixup_ins_del_tags" title="Permalink to this definition"></a></dt>
 <dd><p>fixup_ins_del_tags that works on an lxml document in-place</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff._merge_element_contents">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">_merge_element_contents</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._merge_element_contents" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff._merge_element_contents">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">_merge_element_contents</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._merge_element_contents" title="Permalink to this definition"></a></dt>
 <dd><p>Removes an element, but merges its contents into its place, e.g.,
 given &lt;p&gt;Hi &lt;i&gt;there!&lt;/i&gt;&lt;/p&gt;, if you remove the &lt;i&gt; element you get
 &lt;p&gt;Hi there!&lt;/p&gt;</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff._move_el_inside_block">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">_move_el_inside_block</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">tag</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._move_el_inside_block" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff._move_el_inside_block">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">_move_el_inside_block</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff._move_el_inside_block" title="Permalink to this definition"></a></dt>
 <dd><p>helper for _fixup_ins_del_tags; actually takes the &lt;ins&gt; etc tags
 and moves them inside any block-level tags.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.cleanup_delete">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">cleanup_delete</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">chunks</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.cleanup_delete" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.cleanup_delete">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">cleanup_delete</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">chunks</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.cleanup_delete" title="Permalink to this definition"></a></dt>
 <dd><p>Cleans up any DEL_START/DEL_END markers in the document, replacing
 them with &lt;del&gt;&lt;/del&gt;.  To do this while keeping the document
 valid, it may need to drop some tags (either start or end tags).</p>
@@ -337,69 +248,69 @@ delete into preceding &lt;div&gt; tag, if the del looks like (DEL_START,
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.cleanup_html">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">cleanup_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.cleanup_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.cleanup_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">cleanup_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.cleanup_html" title="Permalink to this definition"></a></dt>
 <dd><p>This ‘cleans’ the HTML, meaning that any page structure is removed
 (only the contents of &lt;body&gt; are used, if there is any &lt;body).
 Also &lt;ins&gt; and &lt;del&gt; tags are removed.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.compress_merge_back">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">compress_merge_back</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tokens</span></em>, <em class="sig-param"><span class="n">tok</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.compress_merge_back" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.compress_merge_back">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">compress_merge_back</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tokens</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tok</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.compress_merge_back" title="Permalink to this definition"></a></dt>
 <dd><p>Merge tok into the last element of tokens (modifying the list of
 tokens in-place).</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.compress_tokens">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">compress_tokens</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tokens</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.compress_tokens" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.compress_tokens">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">compress_tokens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tokens</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.compress_tokens" title="Permalink to this definition"></a></dt>
 <dd><p>Combine adjacent tokens when there is no HTML between the tokens, 
 and they share an annotation</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.copy_annotations">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">copy_annotations</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">src</span></em>, <em class="sig-param"><span class="n">dest</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.copy_annotations" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.copy_annotations">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">copy_annotations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">src</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dest</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.copy_annotations" title="Permalink to this definition"></a></dt>
 <dd><p>Copy annotations from the tokens listed in src to the tokens in dest</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.default_markup">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">default_markup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">version</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.default_markup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.default_markup">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">default_markup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">version</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.default_markup" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.end_tag">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">end_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.end_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.end_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">end_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.end_tag" title="Permalink to this definition"></a></dt>
 <dd><p>The text representation of an end tag for a tag.  Includes
 trailing whitespace when appropriate.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.expand_tokens">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">expand_tokens</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tokens</span></em>, <em class="sig-param"><span class="n">equal</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.expand_tokens" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.expand_tokens">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">expand_tokens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tokens</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">equal</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.expand_tokens" title="Permalink to this definition"></a></dt>
 <dd><p>Given a list of tokens, return a generator of the chunks of
 text for the data in the tokens.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.fixup_chunks">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">fixup_chunks</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">chunks</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.fixup_chunks" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.fixup_chunks">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">fixup_chunks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">chunks</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.fixup_chunks" title="Permalink to this definition"></a></dt>
 <dd><p>This function takes a list of chunks and produces a list of tokens.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.fixup_ins_del_tags">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">fixup_ins_del_tags</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.fixup_ins_del_tags" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.fixup_ins_del_tags">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">fixup_ins_del_tags</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.fixup_ins_del_tags" title="Permalink to this definition"></a></dt>
 <dd><p>Given an html string, move any &lt;ins&gt; or &lt;del&gt; tags inside of any
 block-level elements, e.g. transform &lt;ins&gt;&lt;p&gt;word&lt;/p&gt;&lt;/ins&gt; to
 &lt;p&gt;&lt;ins&gt;word&lt;/ins&gt;&lt;/p&gt;</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.flatten_el">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">flatten_el</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">include_hrefs</span></em>, <em class="sig-param"><span class="n">skip_tag</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.flatten_el" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.flatten_el">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">flatten_el</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">include_hrefs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">skip_tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.flatten_el" title="Permalink to this definition"></a></dt>
 <dd><p>Takes an lxml element el, and generates all the text chunks for
 that tag.  Each start tag is a chunk, each word is a chunk, and each
 end tag is a chunk.</p>
@@ -408,8 +319,8 @@ not returned (just its contents).</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.html_annotate">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">html_annotate</code><span class="sig-paren">(</span><em class="sig-param">doclist</em>, <em class="sig-param">markup=&lt;cyfunction default_markup&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.html_annotate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.html_annotate">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">html_annotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">doclist</span></em>, <em class="sig-param"><span class="pre">markup=&lt;cyfunction</span> <span class="pre">default_markup&gt;</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.html_annotate" title="Permalink to this definition"></a></dt>
 <dd><p>doclist should be ordered from oldest to newest, like:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">version1</span> <span class="o">=</span> <span class="s1">&#39;Hello World&#39;</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">version2</span> <span class="o">=</span> <span class="s1">&#39;Goodbye World&#39;</span>
@@ -431,15 +342,15 @@ markup.  The default uses a span with a title:</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.html_annotate_merge_annotations">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">html_annotate_merge_annotations</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tokens_old</span></em>, <em class="sig-param"><span class="n">tokens_new</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.html_annotate_merge_annotations" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.html_annotate_merge_annotations">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">html_annotate_merge_annotations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tokens_old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tokens_new</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.html_annotate_merge_annotations" title="Permalink to this definition"></a></dt>
 <dd><p>Merge the annotations from tokens_old into tokens_new, when the
 tokens in the new document already existed in the old document.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.htmldiff">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">htmldiff</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">old_html</span></em>, <em class="sig-param"><span class="n">new_html</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.htmldiff" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.htmldiff">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">htmldiff</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">old_html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new_html</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.htmldiff" title="Permalink to this definition"></a></dt>
 <dd><p>Do a diff of the old and new document.  The documents are HTML
 <em>fragments</em> (str/UTF8 or unicode), they are not complete documents
 (i.e., no &lt;html&gt; tag).</p>
@@ -454,37 +365,37 @@ are noted inside the tag itself when there are changes.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.htmldiff_tokens">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">htmldiff_tokens</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html1_tokens</span></em>, <em class="sig-param"><span class="n">html2_tokens</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.htmldiff_tokens" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.htmldiff_tokens">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">htmldiff_tokens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html1_tokens</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">html2_tokens</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.htmldiff_tokens" title="Permalink to this definition"></a></dt>
 <dd><p>Does a diff on the tokens themselves, returning a list of text
 chunks (not tokens).</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.is_end_tag">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">is_end_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tok</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.is_end_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.is_end_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">is_end_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tok</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.is_end_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.is_start_tag">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">is_start_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tok</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.is_start_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.is_start_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">is_start_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tok</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.is_start_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.is_word">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">is_word</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tok</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.is_word" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.is_word">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">is_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tok</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.is_word" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.locate_unbalanced_end">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">locate_unbalanced_end</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">unbalanced_end</span></em>, <em class="sig-param"><span class="n">pre_delete</span></em>, <em class="sig-param"><span class="n">post_delete</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.locate_unbalanced_end" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.locate_unbalanced_end">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">locate_unbalanced_end</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">unbalanced_end</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pre_delete</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">post_delete</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.locate_unbalanced_end" title="Permalink to this definition"></a></dt>
 <dd><p>like locate_unbalanced_start, except handling end tags and
 possibly moving the point earlier in the document.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.locate_unbalanced_start">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">locate_unbalanced_start</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">unbalanced_start</span></em>, <em class="sig-param"><span class="n">pre_delete</span></em>, <em class="sig-param"><span class="n">post_delete</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.locate_unbalanced_start" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.locate_unbalanced_start">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">locate_unbalanced_start</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">unbalanced_start</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pre_delete</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">post_delete</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.locate_unbalanced_start" title="Permalink to this definition"></a></dt>
 <dd><p>pre_delete and post_delete implicitly point to a place in the
 document (where the two were split).  This moves that point (by
 popping items from one and pushing them onto the other).  It moves
@@ -507,30 +418,30 @@ unbalanced_start without doing anything.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.markup_serialize_tokens">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">markup_serialize_tokens</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tokens</span></em>, <em class="sig-param"><span class="n">markup_func</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.markup_serialize_tokens" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.markup_serialize_tokens">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">markup_serialize_tokens</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tokens</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">markup_func</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.markup_serialize_tokens" title="Permalink to this definition"></a></dt>
 <dd><p>Serialize the list of tokens into a list of text chunks, calling
 markup_func around text to add annotations.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.merge_delete">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">merge_delete</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">del_chunks</span></em>, <em class="sig-param"><span class="n">doc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.merge_delete" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.merge_delete">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">merge_delete</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">del_chunks</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.merge_delete" title="Permalink to this definition"></a></dt>
 <dd><p>Adds the text chunks in del_chunks to the document doc (another
 list of text chunks) with marker to show it is a delete.
 cleanup_delete later resolves these markers into &lt;del&gt; tags.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.merge_insert">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">merge_insert</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ins_chunks</span></em>, <em class="sig-param"><span class="n">doc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.merge_insert" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.merge_insert">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">merge_insert</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ins_chunks</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.merge_insert" title="Permalink to this definition"></a></dt>
 <dd><p>doc is the already-handled document (as a list of text chunks);
 here we add &lt;ins&gt;ins_chunks&lt;/ins&gt; to the end of that.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.parse_html">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">parse_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">cleanup</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.parse_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.parse_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">parse_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cleanup</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.parse_html" title="Permalink to this definition"></a></dt>
 <dd><p>Parses an HTML fragment, returning an lxml element.  Note that the HTML will be
 wrapped in a &lt;div&gt; tag that was not in the original document.</p>
 <p>If cleanup is true, make sure there’s no &lt;head&gt; or &lt;body&gt;, and get
@@ -538,16 +449,16 @@ rid of any &lt;ins&gt; and &lt;del&gt; tags.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.serialize_html_fragment">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">serialize_html_fragment</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">skip_outer</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.serialize_html_fragment" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.serialize_html_fragment">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">serialize_html_fragment</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">skip_outer</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.serialize_html_fragment" title="Permalink to this definition"></a></dt>
 <dd><p>Serialize a single lxml element as HTML.  The serialized form
 includes the elements tail.</p>
 <p>If skip_outer is true, then don’t serialize the outermost tag</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.split_delete">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">split_delete</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">chunks</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_delete" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.split_delete">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">split_delete</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">chunks</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_delete" title="Permalink to this definition"></a></dt>
 <dd><p>Returns (stuff_before_DEL_START, stuff_inside_DEL_START_END,
 stuff_after_DEL_END).  Returns the first case found (there may be
 more DEL_STARTs in stuff_after_DEL_END).  Raises NoDeletes if
@@ -555,8 +466,8 @@ there’s no DEL_START found.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.split_trailing_whitespace">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">split_trailing_whitespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">word</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_trailing_whitespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.split_trailing_whitespace">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">split_trailing_whitespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_trailing_whitespace" title="Permalink to this definition"></a></dt>
 <dd><blockquote>
 <div><p>This function takes a word, such as ‘test</p>
 </div></blockquote>
@@ -565,8 +476,8 @@ there’s no DEL_START found.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.split_unbalanced">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">split_unbalanced</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">chunks</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_unbalanced" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.split_unbalanced">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">split_unbalanced</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">chunks</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_unbalanced" title="Permalink to this definition"></a></dt>
 <dd><p>Return (unbalanced_start, balanced, unbalanced_end), where each is
 a list of text and tag chunks.</p>
 <p>unbalanced_start is a list of all the tags that are opened, but
@@ -576,21 +487,21 @@ mean some reordering of the chunks.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.split_words">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">split_words</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_words" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.split_words">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">split_words</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.split_words" title="Permalink to this definition"></a></dt>
 <dd><p>Splits some text into words. Includes trailing whitespace
 on each word when appropriate.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.start_tag">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">start_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.start_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.start_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">start_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.start_tag" title="Permalink to this definition"></a></dt>
 <dd><p>The text representation of the start tag for a tag.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.tokenize">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">tokenize</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">include_hrefs</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tokenize" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.tokenize">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">tokenize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">include_hrefs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tokenize" title="Permalink to this definition"></a></dt>
 <dd><p>Parse the given HTML and returns token objects (words with attached tags).</p>
 <p>This parses only the content of a page; anything in the head is
 ignored, and the &lt;head&gt; and &lt;body&gt; elements are themselves
@@ -604,67 +515,42 @@ included as a special kind of diffable token.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.diff.tokenize_annotated">
-<code class="sig-prename descclassname">lxml.html.diff.</code><code class="sig-name descname">tokenize_annotated</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">annotation</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tokenize_annotated" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.diff.tokenize_annotated">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.diff.</span></span><span class="sig-name descname"><span class="pre">tokenize_annotated</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">annotation</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tokenize_annotated" title="Permalink to this definition"></a></dt>
 <dd><p>Tokenize a document and add an annotation attribute to each token</p>
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.formfill.html" class="btn btn-neutral float-right" title="lxml.html.formfill module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.defs.html" class="btn btn-neutral float-left" title="lxml.html.defs module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.defs.html" class="btn btn-neutral float-left" title="lxml.html.defs module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.formfill.html" class="btn btn-neutral float-right" title="lxml.html.formfill module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 96d1810443f82e6f17500608499bba7e43c9a00b..01e8a8a9a52cc2267ae66e16507e729404b83bba 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.formfill module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.formfill module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.html5parser module" href="lxml.html.html5parser.html" />
     <link rel="prev" title="lxml.html.diff module" href="lxml.html.diff.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.formfill module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.formfill.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.html.formfill">
-<span id="lxml-html-formfill-module"></span><h1>lxml.html.formfill module<a class="headerlink" href="#module-lxml.html.formfill" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.html.formfill">
+<span id="lxml-html-formfill-module"></span><h1>lxml.html.formfill module<a class="headerlink" href="#module-lxml.html.formfill" title="Permalink to this headline"></a></h1>
 <dl class="py exception">
-<dt id="lxml.html.formfill.FormNotFound">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">FormNotFound</code><a class="reference internal" href="_modules/lxml/html/formfill.html#FormNotFound"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill.FormNotFound" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.FormNotFound">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">FormNotFound</span></span><a class="reference internal" href="_modules/lxml/html/formfill.html#FormNotFound"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill.FormNotFound" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">LookupError</span></code></p>
 <p>Raised when no form can be found</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.formfill.DefaultErrorCreator">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">DefaultErrorCreator</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#DefaultErrorCreator"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">DefaultErrorCreator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#DefaultErrorCreator"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <dl class="py attribute">
-<dt id="lxml.html.formfill.DefaultErrorCreator.block_inside">
-<code class="sig-name descname">block_inside</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.block_inside" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator.block_inside">
+<span class="sig-name descname"><span class="pre">block_inside</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.block_inside" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.formfill.DefaultErrorCreator.default_message">
-<code class="sig-name descname">default_message</code><em class="property"> = 'Invalid'</em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.default_message" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator.default_message">
+<span class="sig-name descname"><span class="pre">default_message</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'Invalid'</span></em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.default_message" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.formfill.DefaultErrorCreator.error_block_class">
-<code class="sig-name descname">error_block_class</code><em class="property"> = 'error-block'</em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.error_block_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator.error_block_class">
+<span class="sig-name descname"><span class="pre">error_block_class</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'error-block'</span></em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.error_block_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.formfill.DefaultErrorCreator.error_container_tag">
-<code class="sig-name descname">error_container_tag</code><em class="property"> = 'div'</em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.error_container_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator.error_container_tag">
+<span class="sig-name descname"><span class="pre">error_container_tag</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'div'</span></em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.error_container_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.formfill.DefaultErrorCreator.error_message_class">
-<code class="sig-name descname">error_message_class</code><em class="property"> = 'error-message'</em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.error_message_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator.error_message_class">
+<span class="sig-name descname"><span class="pre">error_message_class</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'error-message'</span></em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.error_message_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.formfill.DefaultErrorCreator.insert_before">
-<code class="sig-name descname">insert_before</code><em class="property"> = True</em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.insert_before" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.DefaultErrorCreator.insert_before">
+<span class="sig-name descname"><span class="pre">insert_before</span></span><em class="property"> <span class="pre">=</span> <span class="pre">True</span></em><a class="headerlink" href="#lxml.html.formfill.DefaultErrorCreator.insert_before" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._add_class">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_add_class</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">class_name</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_add_class"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._add_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._add_class">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_add_class</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">class_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_add_class"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._add_class" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._check">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_check</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">check</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_check"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._check" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._check">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_check</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_check"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._check" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._fill_form">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_fill_form</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">values</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_fill_form"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._fill_form" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._fill_form">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_fill_form</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_fill_form"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._fill_form" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._fill_multiple">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_fill_multiple</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">input</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_fill_multiple"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._fill_multiple" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._fill_multiple">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_fill_multiple</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_fill_multiple"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._fill_multiple" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._fill_single">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_fill_single</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">input</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_fill_single"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._fill_single" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._fill_single">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_fill_single</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_fill_single"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._fill_single" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._find_elements_for_name">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_find_elements_for_name</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">form</span></em>, <em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">error</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_find_elements_for_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._find_elements_for_name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._find_elements_for_name">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_find_elements_for_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_find_elements_for_name"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._find_elements_for_name" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._find_form">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_find_form</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">form_id</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">form_index</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_find_form"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._find_form" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._find_form">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_find_form</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">form_id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">form_index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_find_form"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._find_form" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._find_form_ids">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_find_form_ids</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_find_form_ids"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._find_form_ids" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._find_form_ids">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_find_form_ids</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_find_form_ids"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._find_form_ids" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._insert_error">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_insert_error</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">error</span></em>, <em class="sig-param"><span class="n">error_class</span></em>, <em class="sig-param"><span class="n">error_creator</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_insert_error"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._insert_error" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._insert_error">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_insert_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_class</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_creator</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_insert_error"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._insert_error" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._select">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_select</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">select</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_select"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._select" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._select">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_select</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">select</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_select"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._select" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill._takes_multiple">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">_takes_multiple</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">input</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_takes_multiple"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill._takes_multiple" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill._takes_multiple">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">_takes_multiple</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#_takes_multiple"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill._takes_multiple" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill.fill_form">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">fill_form</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em>, <em class="sig-param"><span class="n">values</span></em>, <em class="sig-param"><span class="n">form_id</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">form_index</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#fill_form"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill.fill_form" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.fill_form">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">fill_form</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">form_id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">form_index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#fill_form"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill.fill_form" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill.fill_form_html">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">fill_form_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">values</span></em>, <em class="sig-param"><span class="n">form_id</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">form_index</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#fill_form_html"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill.fill_form_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.fill_form_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">fill_form_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">form_id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">form_index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#fill_form_html"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill.fill_form_html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill.insert_errors">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">insert_errors</code><span class="sig-paren">(</span><em class="sig-param">el</em>, <em class="sig-param">errors</em>, <em class="sig-param">form_id=None</em>, <em class="sig-param">form_index=None</em>, <em class="sig-param">error_class='error'</em>, <em class="sig-param">error_creator=&lt;lxml.html.formfill.DefaultErrorCreator object&gt;</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#insert_errors"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill.insert_errors" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.insert_errors">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">insert_errors</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">el</span></em>, <em class="sig-param"><span class="pre">errors</span></em>, <em class="sig-param"><span class="pre">form_id=None</span></em>, <em class="sig-param"><span class="pre">form_index=None</span></em>, <em class="sig-param"><span class="pre">error_class='error'</span></em>, <em class="sig-param"><span class="pre">error_creator=&lt;lxml.html.formfill.DefaultErrorCreator</span> <span class="pre">object&gt;</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#insert_errors"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill.insert_errors" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.formfill.insert_errors_html">
-<code class="sig-prename descclassname">lxml.html.formfill.</code><code class="sig-name descname">insert_errors_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">values</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#insert_errors_html"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.formfill.insert_errors_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.formfill.insert_errors_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.formfill.</span></span><span class="sig-name descname"><span class="pre">insert_errors_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html/formfill.html#insert_errors_html"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.formfill.insert_errors_html" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.html5parser.html" class="btn btn-neutral float-right" title="lxml.html.html5parser module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.diff.html" class="btn btn-neutral float-left" title="lxml.html.diff module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.diff.html" class="btn btn-neutral float-left" title="lxml.html.diff module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.html5parser.html" class="btn btn-neutral float-right" title="lxml.html.html5parser module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 58733c0c66fa0dce0a034138aa8740649c6262b6..e95b5681d7f9601f33cf9f7301535a9d42b38eb2 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html package &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html package &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.ElementSoup module" href="lxml.html.ElementSoup.html" />
     <link rel="prev" title="lxml package" href="lxml.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="current reference internal" href="#">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.html package</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-html-package">
-<h1>lxml.html package<a class="headerlink" href="#lxml-html-package" title="Permalink to this headline"></a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
+             
+  <section id="lxml-html-package">
+<h1>lxml.html package<a class="headerlink" href="#lxml-html-package" title="Permalink to this headline"></a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.ElementSoup.html">lxml.html.ElementSoup module</a></li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.soupparser.html">lxml.html.soupparser module</a></li>
 </ul>
 </div>
-</div>
-<div class="section" id="module-lxml.html">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-lxml.html" title="Permalink to this headline"></a></h2>
+</section>
+<section id="module-lxml.html">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-lxml.html" title="Permalink to this headline"></a></h2>
 <p>The <code class="docutils literal notranslate"><span class="pre">lxml.html</span></code> tool set for HTML handling.</p>
 <dl class="py class">
-<dt id="lxml.html.CheckboxGroup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">CheckboxGroup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">iterable</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="o">/</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxGroup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.CheckboxGroup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.CheckboxGroup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">CheckboxGroup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">iterable</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">()</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">/</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxGroup"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.CheckboxGroup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
 <p>Represents a group of checkboxes (<code class="docutils literal notranslate"><span class="pre">&lt;input</span> <span class="pre">type=checkbox&gt;</span></code>) that
 have the same name.</p>
@@ -214,49 +126,49 @@ have the same name.</p>
 returns a set-like object that you can add to or remove from to
 check and uncheck checkboxes.  You can also use <code class="docutils literal notranslate"><span class="pre">.value_options</span></code>
 to get the possible values.</p>
-<dl class="py method">
-<dt id="lxml.html.CheckboxGroup.value">
-<em class="property">property </em><code class="sig-name descname">value</code><a class="headerlink" href="#lxml.html.CheckboxGroup.value" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.CheckboxGroup.value">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#lxml.html.CheckboxGroup.value" title="Permalink to this definition"></a></dt>
 <dd><p>Return a set-like object that can be modified to check or
 uncheck individual checkboxes according to their value.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.CheckboxGroup.value_options">
-<em class="property">property </em><code class="sig-name descname">value_options</code><a class="headerlink" href="#lxml.html.CheckboxGroup.value_options" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.CheckboxGroup.value_options">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value_options</span></span><a class="headerlink" href="#lxml.html.CheckboxGroup.value_options" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a list of all the possible values.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.CheckboxValues">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">CheckboxValues</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">group</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxValues"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.CheckboxValues" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.CheckboxValues">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">CheckboxValues</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">group</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxValues"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.CheckboxValues" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin" title="lxml.html._setmixin.SetMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html._setmixin.SetMixin</span></code></a></p>
 <p>Represents the values of the checked checkboxes in a group of
 checkboxes with the same name.</p>
 <dl class="py method">
-<dt id="lxml.html.CheckboxValues.add">
-<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxValues.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.CheckboxValues.add" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.CheckboxValues.add">
+<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxValues.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.CheckboxValues.add" title="Permalink to this definition"></a></dt>
 <dd><p>Add an element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.CheckboxValues.remove">
-<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxValues.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.CheckboxValues.remove" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.CheckboxValues.remove">
+<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#CheckboxValues.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.CheckboxValues.remove" title="Permalink to this definition"></a></dt>
 <dd><p>Remove an element. If not a member, raise a KeyError.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.CheckboxValues._abc_impl">
-<code class="sig-name descname">_abc_impl</code><em class="property"> = &lt;_abc_data object&gt;</em><a class="headerlink" href="#lxml.html.CheckboxValues._abc_impl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.CheckboxValues._abc_impl">
+<span class="sig-name descname"><span class="pre">_abc_impl</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;_abc._abc_data</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.html.CheckboxValues._abc_impl" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.Classes">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">Classes</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">attributes</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Classes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">Classes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">attributes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Classes" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">collections.abc.MutableSet</span></code></p>
 <p>Provides access to an element’s class attribute as a set-like collection.
 Usage:</p>
@@ -275,104 +187,104 @@ Usage:</p>
 </pre></div>
 </div>
 <dl class="py method">
-<dt id="lxml.html.Classes.add">
-<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Classes.add" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes.add">
+<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Classes.add" title="Permalink to this definition"></a></dt>
 <dd><p>Add a class.</p>
 <p>This has no effect if the class is already present.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.Classes.discard">
-<code class="sig-name descname">discard</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.discard"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Classes.discard" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes.discard">
+<span class="sig-name descname"><span class="pre">discard</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.discard"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Classes.discard" title="Permalink to this definition"></a></dt>
 <dd><p>Remove a class if it is currently present.</p>
 <p>If the class is not present, do nothing.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.Classes.remove">
-<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Classes.remove" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes.remove">
+<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Classes.remove" title="Permalink to this definition"></a></dt>
 <dd><p>Remove a class; it must currently be present.</p>
 <p>If the class is not present, raise a KeyError.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.Classes.toggle">
-<code class="sig-name descname">toggle</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.toggle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Classes.toggle" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes.toggle">
+<span class="sig-name descname"><span class="pre">toggle</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.toggle"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Classes.toggle" title="Permalink to this definition"></a></dt>
 <dd><p>Add a class name if it isn’t there yet, or remove it if it exists.</p>
 <p>Returns true if the class was added (and is now enabled) and
 false if it was removed (and is now disabled).</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.Classes.update">
-<code class="sig-name descname">update</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">values</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Classes.update" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes.update">
+<span class="sig-name descname"><span class="pre">update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">values</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Classes.update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Classes.update" title="Permalink to this definition"></a></dt>
 <dd><p>Add all names from ‘values’.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.Classes._abc_impl">
-<code class="sig-name descname">_abc_impl</code><em class="property"> = &lt;_abc_data object&gt;</em><a class="headerlink" href="#lxml.html.Classes._abc_impl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Classes._abc_impl">
+<span class="sig-name descname"><span class="pre">_abc_impl</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;_abc._abc_data</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.html.Classes._abc_impl" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.FieldsDict">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">FieldsDict</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inputs</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#FieldsDict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.FieldsDict" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.FieldsDict">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">FieldsDict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inputs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#FieldsDict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.FieldsDict" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">collections.abc.MutableMapping</span></code></p>
 <dl class="py method">
-<dt id="lxml.html.FieldsDict.keys">
-<code class="sig-name descname">keys</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; a set-like object providing a view on D’s keys<a class="reference internal" href="_modules/lxml/html.html#FieldsDict.keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.FieldsDict.keys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.FieldsDict.keys">
+<span class="sig-name descname"><span class="pre">keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">a</span> <span class="pre">set-like</span> <span class="pre">object</span> <span class="pre">providing</span> <span class="pre">a</span> <span class="pre">view</span> <span class="pre">on</span> <span class="pre">D's</span> <span class="pre">keys</span></span></span><a class="reference internal" href="_modules/lxml/html.html#FieldsDict.keys"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.FieldsDict.keys" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.FieldsDict._abc_impl">
-<code class="sig-name descname">_abc_impl</code><em class="property"> = &lt;_abc_data object&gt;</em><a class="headerlink" href="#lxml.html.FieldsDict._abc_impl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.FieldsDict._abc_impl">
+<span class="sig-name descname"><span class="pre">_abc_impl</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;_abc._abc_data</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.html.FieldsDict._abc_impl" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.FormElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">FormElement</code><a class="reference internal" href="_modules/lxml/html.html#FormElement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.FormElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.FormElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">FormElement</span></span><a class="reference internal" href="_modules/lxml/html.html#FormElement"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.FormElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.HtmlElement" title="lxml.html.HtmlElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlElement</span></code></a></p>
 <p>Represents a &lt;form&gt; element.</p>
 <dl class="py method">
-<dt id="lxml.html.FormElement._name">
-<code class="sig-name descname">_name</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#FormElement._name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.FormElement._name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.FormElement._name">
+<span class="sig-name descname"><span class="pre">_name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#FormElement._name"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.FormElement._name" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.FormElement.form_values">
-<code class="sig-name descname">form_values</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#FormElement.form_values"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.FormElement.form_values" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.FormElement.form_values">
+<span class="sig-name descname"><span class="pre">form_values</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#FormElement.form_values"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.FormElement.form_values" title="Permalink to this definition"></a></dt>
 <dd><p>Return a list of tuples of the field values for the form.
 This is suitable to be passed to <code class="docutils literal notranslate"><span class="pre">urllib.urlencode()</span></code>.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.FormElement.action">
-<em class="property">property </em><code class="sig-name descname">action</code><a class="headerlink" href="#lxml.html.FormElement.action" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.FormElement.action">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">action</span></span><a class="headerlink" href="#lxml.html.FormElement.action" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the form’s <code class="docutils literal notranslate"><span class="pre">action</span></code> attribute.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.FormElement.fields">
-<em class="property">property </em><code class="sig-name descname">fields</code><a class="headerlink" href="#lxml.html.FormElement.fields" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.FormElement.fields">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">fields</span></span><a class="headerlink" href="#lxml.html.FormElement.fields" title="Permalink to this definition"></a></dt>
 <dd><p>Dictionary-like object that represents all the fields in this
 form.  You can set values in this dictionary to effect the
 form.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.FormElement.inputs">
-<em class="property">property </em><code class="sig-name descname">inputs</code><a class="headerlink" href="#lxml.html.FormElement.inputs" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.FormElement.inputs">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">inputs</span></span><a class="headerlink" href="#lxml.html.FormElement.inputs" title="Permalink to this definition"></a></dt>
 <dd><p>Returns an accessor for all the input elements in the form.</p>
 <p>See <cite>InputGetter</cite> for more information about the object.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.FormElement.method">
-<em class="property">property </em><code class="sig-name descname">method</code><a class="headerlink" href="#lxml.html.FormElement.method" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.FormElement.method">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">method</span></span><a class="headerlink" href="#lxml.html.FormElement.method" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the form’s method.  Always returns a capitalized
 string, and defaults to <code class="docutils literal notranslate"><span class="pre">'GET'</span></code></p>
 </dd></dl>
@@ -380,26 +292,26 @@ string, and defaults to <code class="docutils literal notranslate"><span class="
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HTMLParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HTMLParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HTMLParser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HTMLParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HTMLParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HTMLParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HTMLParser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HTMLParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser" title="lxml.etree.HTMLParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.HTMLParser</span></code></a></p>
 <p>An HTML parser that is configured to return lxml.html Element
 objects.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HtmlComment">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HtmlComment</code><a class="reference internal" href="_modules/lxml/html.html#HtmlComment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlComment" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlComment">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HtmlComment</span></span><a class="reference internal" href="_modules/lxml/html.html#HtmlComment"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlComment" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase" title="lxml.etree.CommentBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.CommentBase</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlMixin" title="lxml.html.HtmlMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlMixin</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HtmlElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HtmlElement</code><a class="reference internal" href="_modules/lxml/html.html#HtmlElement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HtmlElement</span></span><a class="reference internal" href="_modules/lxml/html.html#HtmlElement"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase" title="lxml.etree.ElementBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ElementBase</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlMixin" title="lxml.html.HtmlMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlMixin</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.html.HtmlElement.cssselect">
-<code class="sig-name descname">cssselect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">expr</span></em>, <em class="sig-param"><span class="n">translator</span><span class="o">=</span><span class="default_value">'html'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.HtmlElement.cssselect" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlElement.cssselect">
+<span class="sig-name descname"><span class="pre">cssselect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">expr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'html'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.HtmlElement.cssselect" title="Permalink to this definition"></a></dt>
 <dd><p>Run the CSS expression on this element and its children,
 returning a list of the results.</p>
 <p>Equivalent to lxml.cssselect.CSSSelect(expr, translator=’html’)(self)
@@ -408,8 +320,8 @@ speedup.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlElement.set">
-<code class="sig-name descname">set</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">value</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.HtmlElement.set" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlElement.set">
+<span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.HtmlElement.set" title="Permalink to this definition"></a></dt>
 <dd><p>Sets an element attribute.  If no value is provided, or if the value is None,
 creates a ‘boolean’ attribute without value, e.g. “&lt;form novalidate&gt;&lt;/form&gt;”
 for <code class="docutils literal notranslate"><span class="pre">form.set('novalidate')</span></code>.</p>
@@ -418,8 +330,8 @@ for <code class="docutils literal notranslate"><span class="pre">form.set('noval
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HtmlElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HtmlElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">classes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">mixins</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlElementClassLookup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HtmlElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mixins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlElementClassLookup"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.CustomElementClassLookup" title="lxml.etree.CustomElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.CustomElementClassLookup</span></code></a></p>
 <p>A lookup scheme for HTML Element classes.</p>
 <p>To create a lookup instance with different Element classes, pass a tag
@@ -428,30 +340,30 @@ a tag name mapping of Mixin classes in the <code class="docutils literal notrans
 The special key ‘*’ denotes a Mixin class that should be mixed into all
 Element classes.</p>
 <dl class="py method">
-<dt id="lxml.html.HtmlElementClassLookup.lookup">
-<code class="sig-name descname">lookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">type</span></em>, <em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">namespace</span></em>, <em class="sig-param"><span class="n">name</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlElementClassLookup.lookup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlElementClassLookup.lookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlElementClassLookup.lookup">
+<span class="sig-name descname"><span class="pre">lookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespace</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlElementClassLookup.lookup"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlElementClassLookup.lookup" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.HtmlElementClassLookup._default_element_classes">
-<code class="sig-name descname">_default_element_classes</code><em class="property"> = {'form': &lt;class 'lxml.html.FormElement'&gt;, 'input': &lt;class 'lxml.html.InputElement'&gt;, 'label': &lt;class 'lxml.html.LabelElement'&gt;, 'select': &lt;class 'lxml.html.SelectElement'&gt;, 'textarea': &lt;class 'lxml.html.TextareaElement'&gt;}</em><a class="headerlink" href="#lxml.html.HtmlElementClassLookup._default_element_classes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlElementClassLookup._default_element_classes">
+<span class="sig-name descname"><span class="pre">_default_element_classes</span></span><em class="property"> <span class="pre">=</span> <span class="pre">{'form':</span> <span class="pre">&lt;class</span> <span class="pre">'lxml.html.FormElement'&gt;,</span> <span class="pre">'input':</span> <span class="pre">&lt;class</span> <span class="pre">'lxml.html.InputElement'&gt;,</span> <span class="pre">'label':</span> <span class="pre">&lt;class</span> <span class="pre">'lxml.html.LabelElement'&gt;,</span> <span class="pre">'select':</span> <span class="pre">&lt;class</span> <span class="pre">'lxml.html.SelectElement'&gt;,</span> <span class="pre">'textarea':</span> <span class="pre">&lt;class</span> <span class="pre">'lxml.html.TextareaElement'&gt;}</span></em><a class="headerlink" href="#lxml.html.HtmlElementClassLookup._default_element_classes" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HtmlEntity">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HtmlEntity</code><a class="reference internal" href="_modules/lxml/html.html#HtmlEntity"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlEntity" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlEntity">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HtmlEntity</span></span><a class="reference internal" href="_modules/lxml/html.html#HtmlEntity"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlEntity" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase" title="lxml.etree.EntityBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.EntityBase</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlMixin" title="lxml.html.HtmlMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlMixin</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HtmlMixin">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HtmlMixin</code><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HtmlMixin</span></span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.cssselect">
-<code class="sig-name descname">cssselect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">expr</span></em>, <em class="sig-param"><span class="n">translator</span><span class="o">=</span><span class="default_value">'html'</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.cssselect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.cssselect" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.cssselect">
+<span class="sig-name descname"><span class="pre">cssselect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">expr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'html'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.cssselect"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.cssselect" title="Permalink to this definition"></a></dt>
 <dd><p>Run the CSS expression on this element and its children,
 returning a list of the results.</p>
 <p>Equivalent to lxml.cssselect.CSSSelect(expr, translator=’html’)(self)
@@ -460,8 +372,8 @@ speedup.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.drop_tag">
-<code class="sig-name descname">drop_tag</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.drop_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.drop_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.drop_tag">
+<span class="sig-name descname"><span class="pre">drop_tag</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.drop_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.drop_tag" title="Permalink to this definition"></a></dt>
 <dd><p>Remove the tag, but not its children or text.  The children and text
 are merged into the parent.</p>
 <p>Example:</p>
@@ -474,28 +386,28 @@ are merged into the parent.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.drop_tree">
-<code class="sig-name descname">drop_tree</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.drop_tree"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.drop_tree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.drop_tree">
+<span class="sig-name descname"><span class="pre">drop_tree</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.drop_tree"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.drop_tree" title="Permalink to this definition"></a></dt>
 <dd><p>Removes this element from the tree, including its children and
 text.  The tail text is joined to the previous element or
 parent.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.find_class">
-<code class="sig-name descname">find_class</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">class_name</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.find_class"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.find_class" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.find_class">
+<span class="sig-name descname"><span class="pre">find_class</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">class_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.find_class"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.find_class" title="Permalink to this definition"></a></dt>
 <dd><p>Find any elements with the given class name.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.find_rel_links">
-<code class="sig-name descname">find_rel_links</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">rel</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.find_rel_links"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.find_rel_links" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.find_rel_links">
+<span class="sig-name descname"><span class="pre">find_rel_links</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.find_rel_links"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.find_rel_links" title="Permalink to this definition"></a></dt>
 <dd><p>Find any links like <code class="docutils literal notranslate"><span class="pre">&lt;a</span> <span class="pre">rel=&quot;{rel}&quot;&gt;...&lt;/a&gt;</span></code>; returns a list of elements.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.get_element_by_id">
-<code class="sig-name descname">get_element_by_id</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">id</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">default</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.get_element_by_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.get_element_by_id" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.get_element_by_id">
+<span class="sig-name descname"><span class="pre">get_element_by_id</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">default</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.get_element_by_id"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.get_element_by_id" title="Permalink to this definition"></a></dt>
 <dd><p>Get the first element in a document with the given id.  If none is
 found, return the default argument if provided or raise KeyError
 otherwise.</p>
@@ -506,8 +418,8 @@ the same.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.iterlinks">
-<code class="sig-name descname">iterlinks</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.iterlinks"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.iterlinks" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.iterlinks">
+<span class="sig-name descname"><span class="pre">iterlinks</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.iterlinks"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.iterlinks" title="Permalink to this definition"></a></dt>
 <dd><p>Yield (element, attribute, link, pos), where attribute may be None
 (indicating the link is in the text).  <code class="docutils literal notranslate"><span class="pre">pos</span></code> is the position
 where the link occurs; often 0, but sometimes something else in
@@ -523,8 +435,8 @@ links reported later on.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.make_links_absolute">
-<code class="sig-name descname">make_links_absolute</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">resolve_base_href</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">handle_failures</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.make_links_absolute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.make_links_absolute" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.make_links_absolute">
+<span class="sig-name descname"><span class="pre">make_links_absolute</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">resolve_base_href</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">handle_failures</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.make_links_absolute"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.make_links_absolute" title="Permalink to this definition"></a></dt>
 <dd><p>Make all links in the document absolute, given the
 <code class="docutils literal notranslate"><span class="pre">base_url</span></code> for the document (the full URL where the document
 came from), or if no <code class="docutils literal notranslate"><span class="pre">base_url</span></code> is given, then the <code class="docutils literal notranslate"><span class="pre">.base_url</span></code>
@@ -538,8 +450,8 @@ are ignored.  If set to ‘discard’, failing URLs will be removed.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.resolve_base_href">
-<code class="sig-name descname">resolve_base_href</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">handle_failures</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.resolve_base_href"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.resolve_base_href" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.resolve_base_href">
+<span class="sig-name descname"><span class="pre">resolve_base_href</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">handle_failures</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.resolve_base_href"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.resolve_base_href" title="Permalink to this definition"></a></dt>
 <dd><p>Find any <code class="docutils literal notranslate"><span class="pre">&lt;base</span> <span class="pre">href&gt;</span></code> tag in the document, and apply its
 values to all links found in the document.  Also remove the
 tag once it has been applied.</p>
@@ -549,8 +461,8 @@ are ignored.  If set to ‘discard’, failing URLs will be removed.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.rewrite_links">
-<code class="sig-name descname">rewrite_links</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">link_repl_func</span></em>, <em class="sig-param"><span class="n">resolve_base_href</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">base_href</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.rewrite_links"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.rewrite_links" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.rewrite_links">
+<span class="sig-name descname"><span class="pre">rewrite_links</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">link_repl_func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">resolve_base_href</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_href</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.rewrite_links"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.rewrite_links" title="Permalink to this definition"></a></dt>
 <dd><p>Rewrite all the links in the document.  For each link
 <code class="docutils literal notranslate"><span class="pre">link_repl_func(link)</span></code> will be called, and the return value
 will replace the old link.</p>
@@ -565,70 +477,70 @@ tag text will be removed completely.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.set">
-<code class="sig-name descname">set</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">value</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.set" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.set">
+<span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.set"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.set" title="Permalink to this definition"></a></dt>
 <dd><p>Sets an element attribute.  If no value is provided, or if the value is None,
 creates a ‘boolean’ attribute without value, e.g. “&lt;form novalidate&gt;&lt;/form&gt;”
 for <code class="docutils literal notranslate"><span class="pre">form.set('novalidate')</span></code>.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.HtmlMixin.text_content">
-<code class="sig-name descname">text_content</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.text_content"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlMixin.text_content" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.text_content">
+<span class="sig-name descname"><span class="pre">text_content</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#HtmlMixin.text_content"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlMixin.text_content" title="Permalink to this definition"></a></dt>
 <dd><p>Return the text content of the tag (and the text in any children).</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.HtmlMixin.base_url">
-<em class="property">property </em><code class="sig-name descname">base_url</code><a class="headerlink" href="#lxml.html.HtmlMixin.base_url" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.base_url">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">base_url</span></span><a class="headerlink" href="#lxml.html.HtmlMixin.base_url" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the base URL, given when the page was parsed.</p>
 <p>Use with <code class="docutils literal notranslate"><span class="pre">urlparse.urljoin(el.base_url,</span> <span class="pre">href)</span></code> to get
 absolute URLs.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.HtmlMixin.body">
-<em class="property">property </em><code class="sig-name descname">body</code><a class="headerlink" href="#lxml.html.HtmlMixin.body" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.body">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">body</span></span><a class="headerlink" href="#lxml.html.HtmlMixin.body" title="Permalink to this definition"></a></dt>
 <dd><p>Return the &lt;body&gt; element.  Can be called from a child element
 to get the document’s head.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.HtmlMixin.classes">
-<em class="property">property </em><code class="sig-name descname">classes</code><a class="headerlink" href="#lxml.html.HtmlMixin.classes" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.classes">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">classes</span></span><a class="headerlink" href="#lxml.html.HtmlMixin.classes" title="Permalink to this definition"></a></dt>
 <dd><p>A set-like wrapper around the ‘class’ attribute.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.HtmlMixin.forms">
-<em class="property">property </em><code class="sig-name descname">forms</code><a class="headerlink" href="#lxml.html.HtmlMixin.forms" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.forms">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">forms</span></span><a class="headerlink" href="#lxml.html.HtmlMixin.forms" title="Permalink to this definition"></a></dt>
 <dd><p>Return a list of all the forms</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.HtmlMixin.head">
-<em class="property">property </em><code class="sig-name descname">head</code><a class="headerlink" href="#lxml.html.HtmlMixin.head" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.head">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">head</span></span><a class="headerlink" href="#lxml.html.HtmlMixin.head" title="Permalink to this definition"></a></dt>
 <dd><p>Returns the &lt;head&gt; element.  Can be called from a child
 element to get the document’s head.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.HtmlMixin.label">
-<em class="property">property </em><code class="sig-name descname">label</code><a class="headerlink" href="#lxml.html.HtmlMixin.label" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.HtmlMixin.label">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">label</span></span><a class="headerlink" href="#lxml.html.HtmlMixin.label" title="Permalink to this definition"></a></dt>
 <dd><p>Get or set any &lt;label&gt; element associated with this element.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.HtmlProcessingInstruction">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">HtmlProcessingInstruction</code><a class="reference internal" href="_modules/lxml/html.html#HtmlProcessingInstruction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.HtmlProcessingInstruction" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.HtmlProcessingInstruction">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">HtmlProcessingInstruction</span></span><a class="reference internal" href="_modules/lxml/html.html#HtmlProcessingInstruction"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.HtmlProcessingInstruction" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase" title="lxml.etree.PIBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.PIBase</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlMixin" title="lxml.html.HtmlMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlMixin</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.InputElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">InputElement</code><a class="reference internal" href="_modules/lxml/html.html#InputElement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.InputElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.InputElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">InputElement</span></span><a class="reference internal" href="_modules/lxml/html.html#InputElement"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.InputElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.InputMixin" title="lxml.html.InputMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.InputMixin</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlElement" title="lxml.html.HtmlElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlElement</span></code></a></p>
 <p>Represents an <code class="docutils literal notranslate"><span class="pre">&lt;input&gt;</span></code> element.</p>
 <p>You can get the type with <code class="docutils literal notranslate"><span class="pre">.type</span></code> (which is lower-cased and
@@ -637,29 +549,29 @@ defaults to <code class="docutils literal notranslate"><span class="pre">'text'<
 <p>Checkboxes and radios have the attribute <code class="docutils literal notranslate"><span class="pre">input.checkable</span> <span class="pre">==</span>
 <span class="pre">True</span></code> (for all others it is false) and a boolean attribute
 <code class="docutils literal notranslate"><span class="pre">.checked</span></code>.</p>
-<dl class="py method">
-<dt id="lxml.html.InputElement.checkable">
-<em class="property">property </em><code class="sig-name descname">checkable</code><a class="headerlink" href="#lxml.html.InputElement.checkable" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.InputElement.checkable">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">checkable</span></span><a class="headerlink" href="#lxml.html.InputElement.checkable" title="Permalink to this definition"></a></dt>
 <dd><p>Boolean: can this element be checked?</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.InputElement.checked">
-<em class="property">property </em><code class="sig-name descname">checked</code><a class="headerlink" href="#lxml.html.InputElement.checked" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.InputElement.checked">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">checked</span></span><a class="headerlink" href="#lxml.html.InputElement.checked" title="Permalink to this definition"></a></dt>
 <dd><p>Boolean attribute to get/set the presence of the <code class="docutils literal notranslate"><span class="pre">checked</span></code>
 attribute.</p>
 <p>You can only use this on checkable input types.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.InputElement.type">
-<em class="property">property </em><code class="sig-name descname">type</code><a class="headerlink" href="#lxml.html.InputElement.type" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.InputElement.type">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">type</span></span><a class="headerlink" href="#lxml.html.InputElement.type" title="Permalink to this definition"></a></dt>
 <dd><p>Return the type of this element (using the type attribute).</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.InputElement.value">
-<em class="property">property </em><code class="sig-name descname">value</code><a class="headerlink" href="#lxml.html.InputElement.value" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.InputElement.value">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#lxml.html.InputElement.value" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the value of this element, using the <code class="docutils literal notranslate"><span class="pre">value</span></code> attribute.</p>
 <p>Also, if this is a checkbox and it has no value, this defaults
 to <code class="docutils literal notranslate"><span class="pre">'on'</span></code>.  If it is a checkbox or radio that is not
@@ -669,8 +581,8 @@ checked, this returns None.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.InputGetter">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">InputGetter</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">form</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#InputGetter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.InputGetter" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.InputGetter">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">InputGetter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#InputGetter"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.InputGetter" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>An accessor that represents all the input fields in a form.</p>
 <p>You can get fields by name from this, with
@@ -683,8 +595,8 @@ in this way.</p>
 won’t return the same thing as if you get all the names, as
 checkboxes and radio elements are returned individually.</p>
 <dl class="py method">
-<dt id="lxml.html.InputGetter.items">
-<code class="sig-name descname">items</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#InputGetter.items"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.InputGetter.items" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.InputGetter.items">
+<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#InputGetter.items"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.InputGetter.items" title="Permalink to this definition"></a></dt>
 <dd><p>Returns all fields with their names, similar to dict.items().</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns</dt>
@@ -694,8 +606,8 @@ checkboxes and radio elements are returned individually.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.InputGetter.keys">
-<code class="sig-name descname">keys</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#InputGetter.keys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.InputGetter.keys" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.InputGetter.keys">
+<span class="sig-name descname"><span class="pre">keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#InputGetter.keys"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.InputGetter.keys" title="Permalink to this definition"></a></dt>
 <dd><p>Returns all unique field names, in document order.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns</dt>
@@ -707,28 +619,28 @@ checkboxes and radio elements are returned individually.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.InputMixin">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">InputMixin</code><a class="reference internal" href="_modules/lxml/html.html#InputMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.InputMixin" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.InputMixin">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">InputMixin</span></span><a class="reference internal" href="_modules/lxml/html.html#InputMixin"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.InputMixin" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Mix-in for all input elements (input, select, and textarea)</p>
-<dl class="py method">
-<dt id="lxml.html.InputMixin.name">
-<em class="property">property </em><code class="sig-name descname">name</code><a class="headerlink" href="#lxml.html.InputMixin.name" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.InputMixin.name">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#lxml.html.InputMixin.name" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the name of the element</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.LabelElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">LabelElement</code><a class="reference internal" href="_modules/lxml/html.html#LabelElement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.LabelElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.LabelElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">LabelElement</span></span><a class="reference internal" href="_modules/lxml/html.html#LabelElement"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.LabelElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.HtmlElement" title="lxml.html.HtmlElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlElement</span></code></a></p>
 <p>Represents a <code class="docutils literal notranslate"><span class="pre">&lt;label&gt;</span></code> element.</p>
 <p>Label elements are linked to other elements with their <code class="docutils literal notranslate"><span class="pre">for</span></code>
 attribute.  You can access this element with <code class="docutils literal notranslate"><span class="pre">label.for_element</span></code>.</p>
-<dl class="py method">
-<dt id="lxml.html.LabelElement.for_element">
-<em class="property">property </em><code class="sig-name descname">for_element</code><a class="headerlink" href="#lxml.html.LabelElement.for_element" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.LabelElement.for_element">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">for_element</span></span><a class="headerlink" href="#lxml.html.LabelElement.for_element" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the element this label points to.  Return None if it
 can’t be found.</p>
 </dd></dl>
@@ -736,64 +648,64 @@ can’t be found.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.MultipleSelectOptions">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">MultipleSelectOptions</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">select</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#MultipleSelectOptions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.MultipleSelectOptions" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">MultipleSelectOptions</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">select</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#MultipleSelectOptions"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.MultipleSelectOptions" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin" title="lxml.html._setmixin.SetMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html._setmixin.SetMixin</span></code></a></p>
 <p>Represents all the selected options in a <code class="docutils literal notranslate"><span class="pre">&lt;select</span> <span class="pre">multiple&gt;</span></code> element.</p>
 <p>You can add to this set-like option to select an option, or remove
 to unselect the option.</p>
 <dl class="py method">
-<dt id="lxml.html.MultipleSelectOptions.add">
-<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">item</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#MultipleSelectOptions.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.MultipleSelectOptions.add" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions.add">
+<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">item</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#MultipleSelectOptions.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.MultipleSelectOptions.add" title="Permalink to this definition"></a></dt>
 <dd><p>Add an element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.html.MultipleSelectOptions.remove">
-<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">item</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#MultipleSelectOptions.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.MultipleSelectOptions.remove" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions.remove">
+<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">item</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#MultipleSelectOptions.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.MultipleSelectOptions.remove" title="Permalink to this definition"></a></dt>
 <dd><p>Remove an element. If not a member, raise a KeyError.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.html.MultipleSelectOptions._abc_impl">
-<code class="sig-name descname">_abc_impl</code><em class="property"> = &lt;_abc_data object&gt;</em><a class="headerlink" href="#lxml.html.MultipleSelectOptions._abc_impl" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions._abc_impl">
+<span class="sig-name descname"><span class="pre">_abc_impl</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;_abc._abc_data</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.html.MultipleSelectOptions._abc_impl" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.MultipleSelectOptions.options">
-<em class="property">property </em><code class="sig-name descname">options</code><a class="headerlink" href="#lxml.html.MultipleSelectOptions.options" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions.options">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">options</span></span><a class="headerlink" href="#lxml.html.MultipleSelectOptions.options" title="Permalink to this definition"></a></dt>
 <dd><p>Iterator of all the <code class="docutils literal notranslate"><span class="pre">&lt;option&gt;</span></code> elements.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.RadioGroup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">RadioGroup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">iterable</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="o">/</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#RadioGroup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.RadioGroup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.RadioGroup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">RadioGroup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">iterable</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">()</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">/</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#RadioGroup"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.RadioGroup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
 <p>This object represents several <code class="docutils literal notranslate"><span class="pre">&lt;input</span> <span class="pre">type=radio&gt;</span></code> elements
 that have the same name.</p>
 <p>You can use this like a list, but also use the property
 <code class="docutils literal notranslate"><span class="pre">.value</span></code> to check/uncheck inputs.  Also you can use
 <code class="docutils literal notranslate"><span class="pre">.value_options</span></code> to get the possible values.</p>
-<dl class="py method">
-<dt id="lxml.html.RadioGroup.value">
-<em class="property">property </em><code class="sig-name descname">value</code><a class="headerlink" href="#lxml.html.RadioGroup.value" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.RadioGroup.value">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#lxml.html.RadioGroup.value" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the value, which checks the radio with that value (and
 unchecks any other value).</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.RadioGroup.value_options">
-<em class="property">property </em><code class="sig-name descname">value_options</code><a class="headerlink" href="#lxml.html.RadioGroup.value_options" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.RadioGroup.value_options">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value_options</span></span><a class="headerlink" href="#lxml.html.RadioGroup.value_options" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a list of all the possible values.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.SelectElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">SelectElement</code><a class="reference internal" href="_modules/lxml/html.html#SelectElement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.SelectElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.SelectElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">SelectElement</span></span><a class="reference internal" href="_modules/lxml/html.html#SelectElement"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.SelectElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.InputMixin" title="lxml.html.InputMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.InputMixin</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlElement" title="lxml.html.HtmlElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlElement</span></code></a></p>
 <p><code class="docutils literal notranslate"><span class="pre">&lt;select&gt;</span></code> element.  You can get the name with <code class="docutils literal notranslate"><span class="pre">.name</span></code>.</p>
 <p><code class="docutils literal notranslate"><span class="pre">.value</span></code> will be the value of the selected option, unless this
@@ -802,23 +714,23 @@ it will be a set-like object.  In either case <code class="docutils literal notr
 gives the possible values.</p>
 <p>The boolean attribute <code class="docutils literal notranslate"><span class="pre">.multiple</span></code> shows if this is a
 multi-select.</p>
-<dl class="py method">
-<dt id="lxml.html.SelectElement.multiple">
-<em class="property">property </em><code class="sig-name descname">multiple</code><a class="headerlink" href="#lxml.html.SelectElement.multiple" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.SelectElement.multiple">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">multiple</span></span><a class="headerlink" href="#lxml.html.SelectElement.multiple" title="Permalink to this definition"></a></dt>
 <dd><p>Boolean attribute: is there a <code class="docutils literal notranslate"><span class="pre">multiple</span></code> attribute on this element.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.SelectElement.value">
-<em class="property">property </em><code class="sig-name descname">value</code><a class="headerlink" href="#lxml.html.SelectElement.value" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.SelectElement.value">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#lxml.html.SelectElement.value" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the value of this select (the selected option).</p>
 <p>If this is a multi-select, this is a set-like object that
 represents all the selected options.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.html.SelectElement.value_options">
-<em class="property">property </em><code class="sig-name descname">value_options</code><a class="headerlink" href="#lxml.html.SelectElement.value_options" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.SelectElement.value_options">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value_options</span></span><a class="headerlink" href="#lxml.html.SelectElement.value_options" title="Permalink to this definition"></a></dt>
 <dd><p>All the possible values this select can have (the <code class="docutils literal notranslate"><span class="pre">value</span></code>
 attribute of all the <code class="docutils literal notranslate"><span class="pre">&lt;option&gt;</span></code> elements.</p>
 </dd></dl>
@@ -826,22 +738,22 @@ attribute of all the <code class="docutils literal notranslate"><span class="pre
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.TextareaElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">TextareaElement</code><a class="reference internal" href="_modules/lxml/html.html#TextareaElement"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.TextareaElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.TextareaElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">TextareaElement</span></span><a class="reference internal" href="_modules/lxml/html.html#TextareaElement"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.TextareaElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.html.InputMixin" title="lxml.html.InputMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.InputMixin</span></code></a>, <a class="reference internal" href="#lxml.html.HtmlElement" title="lxml.html.HtmlElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.html.HtmlElement</span></code></a></p>
 <p><code class="docutils literal notranslate"><span class="pre">&lt;textarea&gt;</span></code> element.  You can get the name with <code class="docutils literal notranslate"><span class="pre">.name</span></code> and
 get/set the value with <code class="docutils literal notranslate"><span class="pre">.value</span></code></p>
-<dl class="py method">
-<dt id="lxml.html.TextareaElement.value">
-<em class="property">property </em><code class="sig-name descname">value</code><a class="headerlink" href="#lxml.html.TextareaElement.value" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.html.TextareaElement.value">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#lxml.html.TextareaElement.value" title="Permalink to this definition"></a></dt>
 <dd><p>Get/set the value (which is the contents of this element)</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html.XHTMLParser">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">XHTMLParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#XHTMLParser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.XHTMLParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.XHTMLParser">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">XHTMLParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#XHTMLParser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.XHTMLParser" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser" title="lxml.etree.XMLParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.XMLParser</span></code></a></p>
 <p>An XML parser that is configured to return lxml.html Element
 objects.</p>
@@ -860,8 +772,8 @@ parser like this:</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.html._MethodFunc">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_MethodFunc</code><span class="sig-paren">(</span><em class="sig-param">name</em>, <em class="sig-param">copy=False</em>, <em class="sig-param">source_class=&lt;class 'lxml.html.HtmlMixin'&gt;</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_MethodFunc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._MethodFunc" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._MethodFunc">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_MethodFunc</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">name</span></em>, <em class="sig-param"><span class="pre">copy=False</span></em>, <em class="sig-param"><span class="pre">source_class=&lt;class</span> <span class="pre">'lxml.html.HtmlMixin'&gt;</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_MethodFunc"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._MethodFunc" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>An object that represents a method on an element as a function;
 the function takes either an element or an HTML string.  It
@@ -871,96 +783,96 @@ of the resulting document.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.Element">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">Element</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Element"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.Element" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.Element">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">Element</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#Element"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.Element" title="Permalink to this definition"></a></dt>
 <dd><p>Create a new HTML Element.</p>
 <p>This can also be used for XHTML documents.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.__bytes_replace_meta_content_type">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">__bytes_replace_meta_content_type</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">repl</span></em>, <em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">count</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.__bytes_replace_meta_content_type" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.__bytes_replace_meta_content_type">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">__bytes_replace_meta_content_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">repl</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.__bytes_replace_meta_content_type" title="Permalink to this definition"></a></dt>
 <dd><p>Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.__fix_docstring">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">__fix_docstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#__fix_docstring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.__fix_docstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.__fix_docstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">__fix_docstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#__fix_docstring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.__fix_docstring" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.__str_replace_meta_content_type">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">__str_replace_meta_content_type</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">repl</span></em>, <em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">count</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.__str_replace_meta_content_type" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.__str_replace_meta_content_type">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">__str_replace_meta_content_type</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">repl</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">count</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.__str_replace_meta_content_type" title="Permalink to this definition"></a></dt>
 <dd><p>Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._contains_block_level_tag">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_contains_block_level_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_contains_block_level_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._contains_block_level_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._contains_block_level_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_contains_block_level_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_contains_block_level_tag"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._contains_block_level_tag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._element_name">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_element_name</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">el</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_element_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._element_name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._element_name">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_element_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">el</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_element_name"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._element_name" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._iter_css_imports">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_iter_css_imports</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._iter_css_imports" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._iter_css_imports">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_iter_css_imports</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._iter_css_imports" title="Permalink to this definition"></a></dt>
 <dd><p>Return an iterator over all non-overlapping matches for the RE pattern in string.</p>
 <p>For each match, the iterator returns a match object.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._iter_css_urls">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_iter_css_urls</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._iter_css_urls" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._iter_css_urls">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_iter_css_urls</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._iter_css_urls" title="Permalink to this definition"></a></dt>
 <dd><p>Return an iterator over all non-overlapping matches for the RE pattern in string.</p>
 <p>For each match, the iterator returns a match object.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._looks_like_full_html_bytes">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_looks_like_full_html_bytes</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._looks_like_full_html_bytes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._looks_like_full_html_bytes">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_looks_like_full_html_bytes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._looks_like_full_html_bytes" title="Permalink to this definition"></a></dt>
 <dd><p>Matches zero or more characters at the beginning of the string.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._looks_like_full_html_unicode">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_looks_like_full_html_unicode</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._looks_like_full_html_unicode" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._looks_like_full_html_unicode">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_looks_like_full_html_unicode</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._looks_like_full_html_unicode" title="Permalink to this definition"></a></dt>
 <dd><p>Matches zero or more characters at the beginning of the string.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._nons">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_nons</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tag</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_nons"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._nons" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._nons">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_nons</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tag</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_nons"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._nons" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._parse_meta_refresh_url">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_parse_meta_refresh_url</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">string</span></em>, <em class="sig-param"><span class="n">pos</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">endpos</span><span class="o">=</span><span class="default_value">9223372036854775807</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._parse_meta_refresh_url" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._parse_meta_refresh_url">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_parse_meta_refresh_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">endpos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9223372036854775807</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html._parse_meta_refresh_url" title="Permalink to this definition"></a></dt>
 <dd><p>Scan through string looking for a match, and return a corresponding match object instance.</p>
 <p>Return None if no position in the string matches.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._transform_result">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_transform_result</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typ</span></em>, <em class="sig-param"><span class="n">result</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_transform_result"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._transform_result" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._transform_result">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_transform_result</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">typ</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">result</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_transform_result"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._transform_result" title="Permalink to this definition"></a></dt>
 <dd><p>Convert the result back into the input type.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html._unquote_match">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">_unquote_match</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em>, <em class="sig-param"><span class="n">pos</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_unquote_match"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html._unquote_match" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html._unquote_match">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">_unquote_match</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#_unquote_match"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html._unquote_match" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.document_fromstring">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">document_fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">ensure_head_body</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#document_fromstring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.document_fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.document_fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">document_fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ensure_head_body</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#document_fromstring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.document_fromstring" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.fragment_fromstring">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">fragment_fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">create_parent</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#fragment_fromstring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.fragment_fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.fragment_fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">fragment_fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">create_parent</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#fragment_fromstring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.fragment_fromstring" title="Permalink to this definition"></a></dt>
 <dd><p>Parses a single HTML element; it is an error if there is more than
 one element, or if anything but whitespace precedes or follows the
 element.</p>
@@ -973,8 +885,8 @@ as result of the parsing.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.fragments_fromstring">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">fragments_fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">no_leading_text</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#fragments_fromstring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.fragments_fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.fragments_fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">fragments_fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">no_leading_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#fragments_fromstring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.fragments_fromstring" title="Permalink to this definition"></a></dt>
 <dd><p>Parses several HTML elements, returning a list of elements.</p>
 <p>The first item in the list may be a string.
 If no_leading_text is true, then it will be an error if there is
@@ -984,8 +896,8 @@ leading text, and it will always be a list of only elements.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.fromstring">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#fromstring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#fromstring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.fromstring" title="Permalink to this definition"></a></dt>
 <dd><p>Parse the html, returning a single element/document.</p>
 <p>This tries to minimally parse the chunk of text, without knowing if it
 is a fragment or a document.</p>
@@ -993,28 +905,28 @@ is a fragment or a document.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.html_to_xhtml">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">html_to_xhtml</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">html</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#html_to_xhtml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.html_to_xhtml" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.html_to_xhtml">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">html_to_xhtml</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">html</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#html_to_xhtml"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.html_to_xhtml" title="Permalink to this definition"></a></dt>
 <dd><p>Convert all tags in an HTML tree to XHTML by moving them to the
 XHTML namespace.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.open_http_urllib">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">open_http_urllib</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">method</span></em>, <em class="sig-param"><span class="n">url</span></em>, <em class="sig-param"><span class="n">values</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#open_http_urllib"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.open_http_urllib" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.open_http_urllib">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">open_http_urllib</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#open_http_urllib"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.open_http_urllib" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.open_in_browser">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">open_in_browser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#open_in_browser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.open_in_browser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.open_in_browser">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">open_in_browser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#open_in_browser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.open_in_browser" title="Permalink to this definition"></a></dt>
 <dd><p>Open the HTML document in a web browser, saving it to a temporary
 file to open it.  Note that this does not delete the file after
 use.  This is mainly meant for debugging.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.parse">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">parse</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filename_or_url</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.parse" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.parse">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">parse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename_or_url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#parse"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.parse" title="Permalink to this definition"></a></dt>
 <dd><p>Parse a filename, URL, or file-like object into an HTML document
 tree.  Note: this returns a tree, not an element.  Use
 <code class="docutils literal notranslate"><span class="pre">parse(...).getroot()</span></code> to get the document root.</p>
@@ -1023,8 +935,8 @@ is most useful when parsing from a file-like object.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.submit_form">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">submit_form</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">form</span></em>, <em class="sig-param"><span class="n">extra_values</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">open_http</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#submit_form"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.submit_form" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.submit_form">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">submit_form</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">form</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">extra_values</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">open_http</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#submit_form"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.submit_form" title="Permalink to this definition"></a></dt>
 <dd><p>Helper function to submit a form.  Returns a file-like object, as from
 <code class="docutils literal notranslate"><span class="pre">urllib.urlopen()</span></code>.  This object also has a <code class="docutils literal notranslate"><span class="pre">.geturl()</span></code> function,
 which shows the URL if there were any redirects.</p>
@@ -1048,8 +960,8 @@ form data.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.tostring">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">tostring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">doc</span></em>, <em class="sig-param"><span class="n">pretty_print</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">include_meta_content_type</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">encoding</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">method</span><span class="o">=</span><span class="default_value">'html'</span></em>, <em class="sig-param"><span class="n">with_tail</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">doctype</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#tostring"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.tostring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.tostring">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">tostring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pretty_print</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">include_meta_content_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'html'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">with_tail</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doctype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#tostring"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.tostring" title="Permalink to this definition"></a></dt>
 <dd><p>Return an HTML string representation of the document.</p>
 <p>Note: if include_meta_content_type is true this will create a
 <code class="docutils literal notranslate"><span class="pre">&lt;meta</span> <span class="pre">http-equiv=&quot;Content-Type&quot;</span> <span class="pre">...&gt;</span></code> tag in the head;
@@ -1108,69 +1020,44 @@ when serialising an ElementTree instance.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.html.xhtml_to_html">
-<code class="sig-prename descclassname">lxml.html.</code><code class="sig-name descname">xhtml_to_html</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">xhtml</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#xhtml_to_html"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.html.xhtml_to_html" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.html.xhtml_to_html">
+<span class="sig-prename descclassname"><span class="pre">lxml.html.</span></span><span class="sig-name descname"><span class="pre">xhtml_to_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">xhtml</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/html.html#xhtml_to_html"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.html.xhtml_to_html" title="Permalink to this definition"></a></dt>
 <dd><p>Convert all tags in an XHTML tree to HTML by removing their
 XHTML namespace.</p>
 </dd></dl>
 
-</div>
-</div>
+</section>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.ElementSoup.html" class="btn btn-neutral float-right" title="lxml.html.ElementSoup module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html" class="btn btn-neutral float-left" title="lxml package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html" class="btn btn-neutral float-left" title="lxml package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.ElementSoup.html" class="btn btn-neutral float-right" title="lxml.html.ElementSoup module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 53791f96e4e47e95c544bdca2710df2185891a5c..a5a12645119089aff23971368a64b524740c50a2 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.html5parser module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.html5parser module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.html.soupparser module" href="lxml.html.soupparser.html" />
     <link rel="prev" title="lxml.html.formfill module" href="lxml.html.formfill.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.html5parser module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.html5parser.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-html-html5parser-module">
-<h1>lxml.html.html5parser module<a class="headerlink" href="#lxml-html-html5parser-module" title="Permalink to this headline"></a></h1>
-</div>
+             
+  <section id="lxml-html-html5parser-module">
+<h1>lxml.html.html5parser module<a class="headerlink" href="#lxml-html-html5parser-module" title="Permalink to this headline"></a></h1>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.html.soupparser.html" class="btn btn-neutral float-right" title="lxml.html.soupparser module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.formfill.html" class="btn btn-neutral float-left" title="lxml.html.formfill module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.formfill.html" class="btn btn-neutral float-left" title="lxml.html.formfill module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.html.soupparser.html" class="btn btn-neutral float-right" title="lxml.html.soupparser module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 3a45aaa6f11a9fc67420868bb1293c0a87344749..de0f5f2694bb0e4116a7973dc55a135afe2e7647 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.html.soupparser module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.html.soupparser module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.isoschematron package" href="lxml.isoschematron.html" />
     <link rel="prev" title="lxml.html.html5parser module" href="lxml.html.html5parser.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul class="current">
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
           <li><a href="lxml.html.html">lxml.html package</a> &raquo;</li>
-        
       <li>lxml.html.soupparser module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.html.soupparser.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-html-soupparser-module">
-<h1>lxml.html.soupparser module<a class="headerlink" href="#lxml-html-soupparser-module" title="Permalink to this headline"></a></h1>
-</div>
+             
+  <section id="lxml-html-soupparser-module">
+<h1>lxml.html.soupparser module<a class="headerlink" href="#lxml-html-soupparser-module" title="Permalink to this headline"></a></h1>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.isoschematron.html" class="btn btn-neutral float-right" title="lxml.isoschematron package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.html5parser.html" class="btn btn-neutral float-left" title="lxml.html.html5parser module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.html5parser.html" class="btn btn-neutral float-left" title="lxml.html.html5parser module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.isoschematron.html" class="btn btn-neutral float-right" title="lxml.isoschematron package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index ff2a05be1910bb2a31bcf01c9a9ee3fe3aaffd76..4526a559801dd733e797121245e27c3c531a3354 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.isoschematron package &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.isoschematron package &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.ElementInclude module" href="lxml.ElementInclude.html" />
     <link rel="prev" title="lxml.html.soupparser module" href="lxml.html.soupparser.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.isoschematron package</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.isoschematron.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="lxml-isoschematron-package">
-<h1>lxml.isoschematron package<a class="headerlink" href="#lxml-isoschematron-package" title="Permalink to this headline"></a></h1>
-<div class="section" id="module-lxml.isoschematron">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-lxml.isoschematron" title="Permalink to this headline"></a></h2>
+             
+  <section id="lxml-isoschematron-package">
+<h1>lxml.isoschematron package<a class="headerlink" href="#lxml-isoschematron-package" title="Permalink to this headline"></a></h1>
+<section id="module-lxml.isoschematron">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-lxml.isoschematron" title="Permalink to this headline"></a></h2>
 <p>The <code class="docutils literal notranslate"><span class="pre">lxml.isoschematron</span></code> package implements ISO Schematron support on top
 of the pure-xslt ‘skeleton’ implementation.</p>
 <dl class="py class">
-<dt id="lxml.isoschematron.Schematron">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.isoschematron.</code><code class="sig-name descname">Schematron</code><span class="sig-paren">(</span><em class="sig-param">etree=None</em>, <em class="sig-param">file=None</em>, <em class="sig-param">include=True</em>, <em class="sig-param">expand=True</em>, <em class="sig-param">include_params={}</em>, <em class="sig-param">expand_params={}</em>, <em class="sig-param">compile_params={}</em>, <em class="sig-param">store_schematron=False</em>, <em class="sig-param">store_xslt=False</em>, <em class="sig-param">store_report=False</em>, <em class="sig-param">phase=None</em>, <em class="sig-param">error_finder=//svrl:failed-assert</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#Schematron"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.isoschematron.Schematron" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.isoschematron.</span></span><span class="sig-name descname"><span class="pre">Schematron</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">etree=None</span></em>, <em class="sig-param"><span class="pre">file=None</span></em>, <em class="sig-param"><span class="pre">include=True</span></em>, <em class="sig-param"><span class="pre">expand=True</span></em>, <em class="sig-param"><span class="pre">include_params={}</span></em>, <em class="sig-param"><span class="pre">expand_params={}</span></em>, <em class="sig-param"><span class="pre">compile_params={}</span></em>, <em class="sig-param"><span class="pre">store_schematron=False</span></em>, <em class="sig-param"><span class="pre">store_xslt=False</span></em>, <em class="sig-param"><span class="pre">store_report=False</span></em>, <em class="sig-param"><span class="pre">phase=None</span></em>, <em class="sig-param"><span class="pre">error_finder=//svrl:failed-assert</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#Schematron"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.isoschematron.Schematron" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree._Validator" title="lxml.etree._Validator"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree._Validator</span></code></a></p>
 <p>An ISO Schematron validator.</p>
 <p>Pass a root Element or an ElementTree to turn it into a validator.
@@ -270,8 +182,8 @@ property.</p>
 </pre></div>
 </div>
 <dl class="py method">
-<dt id="lxml.isoschematron.Schematron._extract">
-<code class="sig-name descname">_extract</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#Schematron._extract"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.isoschematron.Schematron._extract" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._extract">
+<span class="sig-name descname"><span class="pre">_extract</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#Schematron._extract"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.isoschematron.Schematron._extract" title="Permalink to this definition"></a></dt>
 <dd><p>Extract embedded schematron schema from non-schematron host schema.
 This method will only be called by __init__ if the given schema document
 is not a schematron schema by itself.
@@ -279,77 +191,77 @@ Must return a schematron schema document tree or None.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron.ASSERTS_AND_REPORTS">
-<code class="sig-name descname">ASSERTS_AND_REPORTS</code><em class="property"> = //svrl:failed-assert | //svrl:successful-report</em><a class="headerlink" href="#lxml.isoschematron.Schematron.ASSERTS_AND_REPORTS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron.ASSERTS_AND_REPORTS">
+<span class="sig-name descname"><span class="pre">ASSERTS_AND_REPORTS</span></span><em class="property"> <span class="pre">=</span> <span class="pre">//svrl:failed-assert</span> <span class="pre">|</span> <span class="pre">//svrl:successful-report</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron.ASSERTS_AND_REPORTS" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron.ASSERTS_ONLY">
-<code class="sig-name descname">ASSERTS_ONLY</code><em class="property"> = //svrl:failed-assert</em><a class="headerlink" href="#lxml.isoschematron.Schematron.ASSERTS_ONLY" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron.ASSERTS_ONLY">
+<span class="sig-name descname"><span class="pre">ASSERTS_ONLY</span></span><em class="property"> <span class="pre">=</span> <span class="pre">//svrl:failed-assert</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron.ASSERTS_ONLY" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._compile">
-<code class="sig-name descname">_compile</code><em class="property"> = &lt;lxml.etree.XSLT object&gt;</em><a class="headerlink" href="#lxml.isoschematron.Schematron._compile" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._compile">
+<span class="sig-name descname"><span class="pre">_compile</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;lxml.etree.XSLT</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._compile" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._domain">
-<code class="sig-name descname">_domain</code><em class="property"> = 28</em><a class="headerlink" href="#lxml.isoschematron.Schematron._domain" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._domain">
+<span class="sig-name descname"><span class="pre">_domain</span></span><em class="property"> <span class="pre">=</span> <span class="pre">28</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._domain" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._error_type">
-<code class="sig-name descname">_error_type</code><em class="property"> = 4000</em><a class="headerlink" href="#lxml.isoschematron.Schematron._error_type" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._error_type">
+<span class="sig-name descname"><span class="pre">_error_type</span></span><em class="property"> <span class="pre">=</span> <span class="pre">4000</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._error_type" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._expand">
-<code class="sig-name descname">_expand</code><em class="property"> = &lt;lxml.etree.XSLT object&gt;</em><a class="headerlink" href="#lxml.isoschematron.Schematron._expand" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._expand">
+<span class="sig-name descname"><span class="pre">_expand</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;lxml.etree.XSLT</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._expand" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._extract_rng">
-<code class="sig-name descname">_extract_rng</code><em class="property"> = &lt;lxml.etree.XSLT object&gt;</em><a class="headerlink" href="#lxml.isoschematron.Schematron._extract_rng" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._extract_rng">
+<span class="sig-name descname"><span class="pre">_extract_rng</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;lxml.etree.XSLT</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._extract_rng" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._extract_xsd">
-<code class="sig-name descname">_extract_xsd</code><em class="property"> = &lt;lxml.etree.XSLT object&gt;</em><a class="headerlink" href="#lxml.isoschematron.Schematron._extract_xsd" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._extract_xsd">
+<span class="sig-name descname"><span class="pre">_extract_xsd</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;lxml.etree.XSLT</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._extract_xsd" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._include">
-<code class="sig-name descname">_include</code><em class="property"> = &lt;lxml.etree.XSLT object&gt;</em><a class="headerlink" href="#lxml.isoschematron.Schematron._include" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._include">
+<span class="sig-name descname"><span class="pre">_include</span></span><em class="property"> <span class="pre">=</span> <span class="pre">&lt;lxml.etree.XSLT</span> <span class="pre">object&gt;</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._include" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._level">
-<code class="sig-name descname">_level</code><em class="property"> = 2</em><a class="headerlink" href="#lxml.isoschematron.Schematron._level" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._level">
+<span class="sig-name descname"><span class="pre">_level</span></span><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._level" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.isoschematron.Schematron._validation_errors">
-<code class="sig-name descname">_validation_errors</code><em class="property"> = //svrl:failed-assert</em><a class="headerlink" href="#lxml.isoschematron.Schematron._validation_errors" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron._validation_errors">
+<span class="sig-name descname"><span class="pre">_validation_errors</span></span><em class="property"> <span class="pre">=</span> <span class="pre">//svrl:failed-assert</span></em><a class="headerlink" href="#lxml.isoschematron.Schematron._validation_errors" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
-<dl class="py method">
-<dt id="lxml.isoschematron.Schematron.schematron">
-<em class="property">property </em><code class="sig-name descname">schematron</code><a class="headerlink" href="#lxml.isoschematron.Schematron.schematron" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron.schematron">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">schematron</span></span><a class="headerlink" href="#lxml.isoschematron.Schematron.schematron" title="Permalink to this definition"></a></dt>
 <dd><p>ISO-schematron schema document (None if object has been initialized
 with store_schematron=False).</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.isoschematron.Schematron.validation_report">
-<em class="property">property </em><code class="sig-name descname">validation_report</code><a class="headerlink" href="#lxml.isoschematron.Schematron.validation_report" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron.validation_report">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">validation_report</span></span><a class="headerlink" href="#lxml.isoschematron.Schematron.validation_report" title="Permalink to this definition"></a></dt>
 <dd><p>ISO-schematron validation result report (None if result-storing has
 been turned off).</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.isoschematron.Schematron.validator_xslt">
-<em class="property">property </em><code class="sig-name descname">validator_xslt</code><a class="headerlink" href="#lxml.isoschematron.Schematron.validator_xslt" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.isoschematron.Schematron.validator_xslt">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">validator_xslt</span></span><a class="headerlink" href="#lxml.isoschematron.Schematron.validator_xslt" title="Permalink to this definition"></a></dt>
 <dd><p>ISO-schematron skeleton implementation XSLT validator document (None
 if object has been initialized with store_xslt=False).</p>
 </dd></dl>
@@ -357,16 +269,16 @@ if object has been initialized with store_xslt=False).</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.isoschematron._stylesheet_param_dict">
-<code class="sig-prename descclassname">lxml.isoschematron.</code><code class="sig-name descname">_stylesheet_param_dict</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">paramsDict</span></em>, <em class="sig-param"><span class="n">kwargsDict</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#_stylesheet_param_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.isoschematron._stylesheet_param_dict" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron._stylesheet_param_dict">
+<span class="sig-prename descclassname"><span class="pre">lxml.isoschematron.</span></span><span class="sig-name descname"><span class="pre">_stylesheet_param_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">paramsDict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kwargsDict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#_stylesheet_param_dict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.isoschematron._stylesheet_param_dict" title="Permalink to this definition"></a></dt>
 <dd><p>Return a copy of paramsDict, updated with kwargsDict entries, wrapped as
 stylesheet arguments.
 kwargsDict entries with a value of None are ignored.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.isoschematron.stylesheet_params">
-<code class="sig-prename descclassname">lxml.isoschematron.</code><code class="sig-name descname">stylesheet_params</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#stylesheet_params"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#lxml.isoschematron.stylesheet_params" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.isoschematron.stylesheet_params">
+<span class="sig-prename descclassname"><span class="pre">lxml.isoschematron.</span></span><span class="sig-name descname"><span class="pre">stylesheet_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/lxml/isoschematron.html#stylesheet_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#lxml.isoschematron.stylesheet_params" title="Permalink to this definition"></a></dt>
 <dd><p>Convert keyword args to a dictionary of stylesheet parameters.
 XSL stylesheet parameters must be XPath expressions, i.e.:</p>
 <ul class="simple">
@@ -382,63 +294,38 @@ If arg is None raise TypeError.
 Else convert arg to string.</p>
 </dd></dl>
 
-</div>
-</div>
+</section>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.ElementInclude.html" class="btn btn-neutral float-right" title="lxml.ElementInclude module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.html.soupparser.html" class="btn btn-neutral float-left" title="lxml.html.soupparser module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.html.soupparser.html" class="btn btn-neutral float-left" title="lxml.html.soupparser module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.ElementInclude.html" class="btn btn-neutral float-right" title="lxml.ElementInclude module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 7c957314a951ffae132f700246381b30a06c9f38..a42f7bc98f3d632b17478a6fa91edc607f6ed570 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.objectify module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.objectify module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="lxml.sax module" href="lxml.sax.html" />
     <link rel="prev" title="lxml.etree module" href="lxml.etree.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.objectify module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.objectify.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.objectify">
-<span id="lxml-objectify-module"></span><h1>lxml.objectify module<a class="headerlink" href="#module-lxml.objectify" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.objectify">
+<span id="lxml-objectify-module"></span><h1>lxml.objectify module<a class="headerlink" href="#module-lxml.objectify" title="Permalink to this headline"></a></h1>
 <p>The <code class="docutils literal notranslate"><span class="pre">lxml.objectify</span></code> module implements a Python object API for XML.
 It is based on <cite>lxml.etree</cite>.</p>
 <dl class="py class">
-<dt id="lxml.objectify.BoolElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">BoolElement</code><a class="headerlink" href="#lxml.objectify.BoolElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.BoolElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">BoolElement</span></span><a class="headerlink" href="#lxml.objectify.BoolElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.IntElement" title="lxml.objectify.IntElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.IntElement</span></code></a></p>
 <p>Boolean type base on string values: ‘true’ or ‘false’.</p>
 <p>Note that this inherits from IntElement to mimic the behaviour of
 Python’s bool type.</p>
 <dl class="py method">
-<dt id="lxml.objectify.BoolElement._init">
-<code class="sig-name descname">_init</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.BoolElement._init" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.BoolElement._init">
+<span class="sig-name descname"><span class="pre">_init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.BoolElement._init" title="Permalink to this definition"></a></dt>
 <dd><p>Called after object initialisation.  Custom subclasses may override
 this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.BoolElement.pyval">
-<code class="sig-name descname">pyval</code><a class="headerlink" href="#lxml.objectify.BoolElement.pyval" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.BoolElement.pyval">
+<span class="sig-name descname"><span class="pre">pyval</span></span><a class="headerlink" href="#lxml.objectify.BoolElement.pyval" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.ElementMaker">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">ElementMaker</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">namespace</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">annotate</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">makeelement</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ElementMaker" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ElementMaker">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">ElementMaker</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">annotate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">makeelement</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ElementMaker" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>An ElementMaker that can be used for constructing trees.</p>
 <p>Example:</p>
@@ -235,12 +147,12 @@ directly and pass the tag name as first argument:</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.FloatElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">FloatElement</code><a class="headerlink" href="#lxml.objectify.FloatElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.FloatElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">FloatElement</span></span><a class="headerlink" href="#lxml.objectify.FloatElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.NumberElement" title="lxml.objectify.NumberElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.NumberElement</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.objectify.FloatElement._init">
-<code class="sig-name descname">_init</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.FloatElement._init" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.FloatElement._init">
+<span class="sig-name descname"><span class="pre">_init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.FloatElement._init" title="Permalink to this definition"></a></dt>
 <dd><p>Called after object initialisation.  Custom subclasses may override
 this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
@@ -248,12 +160,12 @@ this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.IntElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">IntElement</code><a class="headerlink" href="#lxml.objectify.IntElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.IntElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">IntElement</span></span><a class="headerlink" href="#lxml.objectify.IntElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.NumberElement" title="lxml.objectify.NumberElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.NumberElement</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.objectify.IntElement._init">
-<code class="sig-name descname">_init</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.IntElement._init" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.IntElement._init">
+<span class="sig-name descname"><span class="pre">_init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.IntElement._init" title="Permalink to this definition"></a></dt>
 <dd><p>Called after object initialisation.  Custom subclasses may override
 this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
@@ -261,12 +173,12 @@ this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.LongElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">LongElement</code><a class="headerlink" href="#lxml.objectify.LongElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.LongElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">LongElement</span></span><a class="headerlink" href="#lxml.objectify.LongElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.NumberElement" title="lxml.objectify.NumberElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.NumberElement</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.objectify.LongElement._init">
-<code class="sig-name descname">_init</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.LongElement._init" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.LongElement._init">
+<span class="sig-name descname"><span class="pre">_init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.LongElement._init" title="Permalink to this definition"></a></dt>
 <dd><p>Called after object initialisation.  Custom subclasses may override
 this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
@@ -274,89 +186,89 @@ this if they recursively call _init() in the superclasses.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.NoneElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">NoneElement</code><a class="headerlink" href="#lxml.objectify.NoneElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.NoneElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">NoneElement</span></span><a class="headerlink" href="#lxml.objectify.NoneElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.ObjectifiedDataElement" title="lxml.objectify.ObjectifiedDataElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.ObjectifiedDataElement</span></code></a></p>
 <dl class="py attribute">
-<dt id="lxml.objectify.NoneElement.pyval">
-<code class="sig-name descname">pyval</code><a class="headerlink" href="#lxml.objectify.NoneElement.pyval" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.NoneElement.pyval">
+<span class="sig-name descname"><span class="pre">pyval</span></span><a class="headerlink" href="#lxml.objectify.NoneElement.pyval" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.NumberElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">NumberElement</code><a class="headerlink" href="#lxml.objectify.NumberElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.NumberElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">NumberElement</span></span><a class="headerlink" href="#lxml.objectify.NumberElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.ObjectifiedDataElement" title="lxml.objectify.ObjectifiedDataElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.ObjectifiedDataElement</span></code></a></p>
 <dl class="py method">
-<dt id="lxml.objectify.NumberElement._setValueParser">
-<code class="sig-name descname">_setValueParser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">function</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.NumberElement._setValueParser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.NumberElement._setValueParser">
+<span class="sig-name descname"><span class="pre">_setValueParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">function</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.NumberElement._setValueParser" title="Permalink to this definition"></a></dt>
 <dd><p>Set the function that parses the Python value from a string.</p>
 <p>Do not use this unless you know what you are doing.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.NumberElement.pyval">
-<code class="sig-name descname">pyval</code><a class="headerlink" href="#lxml.objectify.NumberElement.pyval" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.NumberElement.pyval">
+<span class="sig-name descname"><span class="pre">pyval</span></span><a class="headerlink" href="#lxml.objectify.NumberElement.pyval" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.ObjectPath">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">ObjectPath</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">path</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectPath">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">ObjectPath</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Immutable object that represents a compiled object path.</p>
 <p>Example for a path: ‘root.child[1].{other}child[25]’</p>
 <dl class="py method">
-<dt id="lxml.objectify.ObjectPath.addattr">
-<code class="sig-name descname">addattr</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">root</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath.addattr" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectPath.addattr">
+<span class="sig-name descname"><span class="pre">addattr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">root</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath.addattr" title="Permalink to this definition"></a></dt>
 <dd><p>Append a value to the target element in a subtree.</p>
 <p>If any of the children on the path does not exist, it is created.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.objectify.ObjectPath.hasattr">
-<code class="sig-name descname">hasattr</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">root</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath.hasattr" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectPath.hasattr">
+<span class="sig-name descname"><span class="pre">hasattr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">root</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath.hasattr" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.objectify.ObjectPath.setattr">
-<code class="sig-name descname">setattr</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">root</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath.setattr" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectPath.setattr">
+<span class="sig-name descname"><span class="pre">setattr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">root</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectPath.setattr" title="Permalink to this definition"></a></dt>
 <dd><p>Set the value of the target element in a subtree.</p>
 <p>If any of the children on the path does not exist, it is created.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.ObjectPath.find">
-<code class="sig-name descname">find</code><a class="headerlink" href="#lxml.objectify.ObjectPath.find" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectPath.find">
+<span class="sig-name descname"><span class="pre">find</span></span><a class="headerlink" href="#lxml.objectify.ObjectPath.find" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.ObjectifiedDataElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">ObjectifiedDataElement</code><a class="headerlink" href="#lxml.objectify.ObjectifiedDataElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedDataElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">ObjectifiedDataElement</span></span><a class="headerlink" href="#lxml.objectify.ObjectifiedDataElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.ObjectifiedElement" title="lxml.objectify.ObjectifiedElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.ObjectifiedElement</span></code></a></p>
 <p>This is the base class for all data type Elements.  Subclasses should
 override the ‘pyval’ property and possibly the __str__ method.</p>
 <dl class="py method">
-<dt id="lxml.objectify.ObjectifiedDataElement._setText">
-<code class="sig-name descname">_setText</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedDataElement._setText" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedDataElement._setText">
+<span class="sig-name descname"><span class="pre">_setText</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedDataElement._setText" title="Permalink to this definition"></a></dt>
 <dd><p>For use in subclasses only. Don’t use unless you know what you are
 doing.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.ObjectifiedDataElement.pyval">
-<code class="sig-name descname">pyval</code><a class="headerlink" href="#lxml.objectify.ObjectifiedDataElement.pyval" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedDataElement.pyval">
+<span class="sig-name descname"><span class="pre">pyval</span></span><a class="headerlink" href="#lxml.objectify.ObjectifiedDataElement.pyval" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.ObjectifiedElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">ObjectifiedElement</code><a class="headerlink" href="#lxml.objectify.ObjectifiedElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">ObjectifiedElement</span></span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase" title="lxml.etree.ElementBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ElementBase</span></code></a></p>
 <p>Main XML Element class.</p>
 <p>Element children are accessed as object attributes.  Multiple children
@@ -370,49 +282,49 @@ with the same name are available through a list index.  Example:</p>
 <p>Note that you cannot (and must not) instantiate this class or its
 subclasses.</p>
 <dl class="py method">
-<dt id="lxml.objectify.ObjectifiedElement.addattr">
-<code class="sig-name descname">addattr</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tag</span></em>, <em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.addattr" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedElement.addattr">
+<span class="sig-name descname"><span class="pre">addattr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.addattr" title="Permalink to this definition"></a></dt>
 <dd><p>Add a child value to the element.</p>
 <p>As opposed to append(), it sets a data value, not an element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.objectify.ObjectifiedElement.countchildren">
-<code class="sig-name descname">countchildren</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.countchildren" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedElement.countchildren">
+<span class="sig-name descname"><span class="pre">countchildren</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.countchildren" title="Permalink to this definition"></a></dt>
 <dd><p>Return the number of children of this element, regardless of their
 name.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.objectify.ObjectifiedElement.descendantpaths">
-<code class="sig-name descname">descendantpaths</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">prefix</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.descendantpaths" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedElement.descendantpaths">
+<span class="sig-name descname"><span class="pre">descendantpaths</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prefix</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.descendantpaths" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a list of object path expressions for all descendants.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.objectify.ObjectifiedElement.getchildren">
-<code class="sig-name descname">getchildren</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.getchildren" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedElement.getchildren">
+<span class="sig-name descname"><span class="pre">getchildren</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.getchildren" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a sequence of all direct children.  The elements are
 returned in document order.</p>
 </dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.ObjectifiedElement.text">
-<code class="sig-name descname">text</code><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.text" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifiedElement.text">
+<span class="sig-name descname"><span class="pre">text</span></span><a class="headerlink" href="#lxml.objectify.ObjectifiedElement.text" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.ObjectifyElementClassLookup">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">ObjectifyElementClassLookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">tree_class</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">empty_data_class</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifyElementClassLookup" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.ObjectifyElementClassLookup">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">ObjectifyElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tree_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_data_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.ObjectifyElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.ElementClassLookup" title="lxml.etree.ElementClassLookup"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.ElementClassLookup</span></code></a></p>
 <p>Element class lookup method that uses the objectify classes.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.PyType">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">PyType</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">type_check</span></em>, <em class="sig-param"><span class="n">type_class</span></em>, <em class="sig-param"><span class="n">stringify</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.PyType" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">PyType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type_check</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type_class</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stringify</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.PyType" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>User defined type.</p>
 <p>Named type that contains a type check function, a type class that
@@ -430,8 +342,8 @@ stored in the XML tree.</p>
 <p>Note that the order in which types are registered matters.  The first
 matching type will be used.</p>
 <dl class="py method">
-<dt id="lxml.objectify.PyType.register">
-<code class="sig-name descname">register</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">before</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">after</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.PyType.register" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType.register">
+<span class="sig-name descname"><span class="pre">register</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">before</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">after</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.PyType.register" title="Permalink to this definition"></a></dt>
 <dd><p>Register the type.</p>
 <p>The additional keyword arguments ‘before’ and ‘after’ accept a
 sequence of type names that must appear before/after the new type in
@@ -440,28 +352,28 @@ ignored.  Raises ValueError if the dependencies cannot be fulfilled.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.objectify.PyType.unregister">
-<code class="sig-name descname">unregister</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.PyType.unregister" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType.unregister">
+<span class="sig-name descname"><span class="pre">unregister</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">self</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.PyType.unregister" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.PyType.name">
-<code class="sig-name descname">name</code><a class="headerlink" href="#lxml.objectify.PyType.name" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType.name">
+<span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#lxml.objectify.PyType.name" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.PyType.stringify">
-<code class="sig-name descname">stringify</code><a class="headerlink" href="#lxml.objectify.PyType.stringify" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType.stringify">
+<span class="sig-name descname"><span class="pre">stringify</span></span><a class="headerlink" href="#lxml.objectify.PyType.stringify" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.PyType.type_check">
-<code class="sig-name descname">type_check</code><a class="headerlink" href="#lxml.objectify.PyType.type_check" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType.type_check">
+<span class="sig-name descname"><span class="pre">type_check</span></span><a class="headerlink" href="#lxml.objectify.PyType.type_check" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.PyType.xmlSchemaTypes">
-<code class="sig-name descname">xmlSchemaTypes</code><a class="headerlink" href="#lxml.objectify.PyType.xmlSchemaTypes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.PyType.xmlSchemaTypes">
+<span class="sig-name descname"><span class="pre">xmlSchemaTypes</span></span><a class="headerlink" href="#lxml.objectify.PyType.xmlSchemaTypes" title="Permalink to this definition"></a></dt>
 <dd><p>The list of XML Schema datatypes this Python type maps to.</p>
 <p>Note that this must be set before registering the type!</p>
 </dd></dl>
@@ -469,28 +381,28 @@ ignored.  Raises ValueError if the dependencies cannot be fulfilled.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.objectify.StringElement">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">StringElement</code><a class="headerlink" href="#lxml.objectify.StringElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.StringElement">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">StringElement</span></span><a class="headerlink" href="#lxml.objectify.StringElement" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#lxml.objectify.ObjectifiedDataElement" title="lxml.objectify.ObjectifiedDataElement"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.objectify.ObjectifiedDataElement</span></code></a></p>
 <p>String data class.</p>
 <p>Note that this class does <em>not</em> support the sequence protocol of strings:
 len(), iter(), str_attr[0], str_attr[0:1], etc. are <em>not</em> supported.
 Instead, use the .text attribute to get a ‘real’ string.</p>
 <dl class="py method">
-<dt id="lxml.objectify.StringElement.strlen">
-<code class="sig-name descname">strlen</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.StringElement.strlen" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.StringElement.strlen">
+<span class="sig-name descname"><span class="pre">strlen</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.StringElement.strlen" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
-<dt id="lxml.objectify.StringElement.pyval">
-<code class="sig-name descname">pyval</code><a class="headerlink" href="#lxml.objectify.StringElement.pyval" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.StringElement.pyval">
+<span class="sig-name descname"><span class="pre">pyval</span></span><a class="headerlink" href="#lxml.objectify.StringElement.pyval" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.DataElement">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">DataElement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">_value</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">_pytype</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">_xsi</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_attributes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.DataElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.DataElement">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">DataElement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_xsi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_attributes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.DataElement" title="Permalink to this definition"></a></dt>
 <dd><p>Create a new element from a Python value and XML attributes taken from
 keyword arguments or a dictionary passed as second argument.</p>
 <p>Automatically adds a ‘pytype’ attribute for the Python type of the value,
@@ -502,16 +414,16 @@ in attrib and/or keyword arguments.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.Element">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">Element</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">_tag</span></em>, <em class="sig-param"><span class="n">attrib</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nsmap</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">_pytype</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_attributes</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.Element" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.Element">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">Element</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_tag</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attrib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nsmap</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">_attributes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.Element" title="Permalink to this definition"></a></dt>
 <dd><p>Objectify specific version of the lxml.etree Element() factory that
 always creates a structural (tree) element.</p>
 <p>NOTE: requires parser based element class lookup activated in lxml.etree!</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.XML">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">XML</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">xml</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.XML" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.XML">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">XML</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">xml</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.XML" title="Permalink to this definition"></a></dt>
 <dd><p>Objectify specific version of the lxml.etree XML() literal factory
 that uses the objectify parser.</p>
 <p>You can pass a different parser as second argument.</p>
@@ -521,28 +433,28 @@ the document to support relative Paths when looking up external entities
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.__checkBool">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">__checkBool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__checkBool" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.__checkBool">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">__checkBool</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__checkBool" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.__lower_bool">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">__lower_bool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">b</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__lower_bool" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.__lower_bool">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">__lower_bool</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">b</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__lower_bool" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.__parseBool">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">__parseBool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">s</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__parseBool" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.__parseBool">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">__parseBool</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">s</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__parseBool" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.__unpickleElementTree">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">__unpickleElementTree</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__unpickleElementTree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.__unpickleElementTree">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">__unpickleElementTree</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.__unpickleElementTree" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.annotate">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">annotate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="n">ignore_old</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">ignore_xsi</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">empty_pytype</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">empty_type</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">annotate_xsi</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">annotate_pytype</span><span class="o">=</span><span class="default_value">1</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.annotate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.annotate">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">annotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_old</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_xsi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">annotate_xsi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">annotate_pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.annotate" title="Permalink to this definition"></a></dt>
 <dd><p>Recursively annotates the elements of an XML tree with ‘xsi:type’
 and/or ‘py:pytype’ attributes.</p>
 <p>If the ‘ignore_old’ keyword argument is True (the default), current
@@ -567,8 +479,8 @@ elements.  Pass ‘string’, for example, to make string values the default.</p
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.deannotate">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">deannotate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="n">pytype</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">xsi</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">xsi_nil</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">cleanup_namespaces</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.deannotate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.deannotate">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">deannotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xsi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xsi_nil</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cleanup_namespaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.deannotate" title="Permalink to this definition"></a></dt>
 <dd><p>Recursively de-annotate the elements of an XML tree by removing ‘py:pytype’
 and/or ‘xsi:type’ attributes and/or ‘xsi:nil’ attributes.</p>
 <p>If the ‘pytype’ keyword argument is True (the default), ‘py:pytype’
@@ -582,21 +494,21 @@ the tree, pass the option <code class="docutils literal notranslate"><span class
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.dump">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">dump</code><span class="sig-paren">(</span><em class="sig-param">_Element element not None</em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.dump" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.dump">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">dump</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">_Element</span> <span class="pre">element</span> <span class="pre">not</span> <span class="pre">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.dump" title="Permalink to this definition"></a></dt>
 <dd><p>Return a recursively generated string representation of an element.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.enable_recursive_str">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">enable_recursive_str</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">on</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.enable_recursive_str" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.enable_recursive_str">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">enable_recursive_str</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">on</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.enable_recursive_str" title="Permalink to this definition"></a></dt>
 <dd><p>Enable a recursively generated tree representation for str(element),
 based on objectify.dump(element).</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.fromstring">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">fromstring</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">xml</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.fromstring" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.fromstring">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">fromstring</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">xml</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.fromstring" title="Permalink to this definition"></a></dt>
 <dd><p>Objectify specific version of the lxml.etree fromstring() function
 that uses the objectify parser.</p>
 <p>You can pass a different parser as second argument.</p>
@@ -606,8 +518,8 @@ the document to support relative Paths when looking up external entities
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.getRegisteredTypes">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">getRegisteredTypes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.getRegisteredTypes" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.getRegisteredTypes">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">getRegisteredTypes</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.getRegisteredTypes" title="Permalink to this definition"></a></dt>
 <dd><p>Returns a list of the currently registered PyType objects.</p>
 <p>To add a new type, retrieve this list and call unregister() for all
 entries.  Then add the new type at a suitable position (possibly replacing
@@ -620,8 +532,8 @@ end of the type list.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.makeparser">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">makeparser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">remove_blank_text</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kw</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.makeparser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.makeparser">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">makeparser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">remove_blank_text</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.makeparser" title="Permalink to this definition"></a></dt>
 <dd><p>Create a new XML parser for objectify trees.</p>
 <p>You can pass all keyword arguments that are supported by
 <code class="docutils literal notranslate"><span class="pre">etree.XMLParser()</span></code>.  Note that this parser defaults to removing
@@ -630,8 +542,8 @@ blank text.  You can disable this by passing the
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.parse">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">parse</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">f</span></em>, <em class="sig-param"><span class="n">parser</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">base_url</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.parse" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.parse">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">parse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.parse" title="Permalink to this definition"></a></dt>
 <dd><p>Parse a file or file-like object with the objectify parser.</p>
 <p>You can pass a different parser as second argument.</p>
 <p>The <code class="docutils literal notranslate"><span class="pre">base_url</span></code> keyword allows setting a URL for the document
@@ -640,8 +552,8 @@ up external entities (DTD, XInclude, …) with relative paths.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.pyannotate">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">pyannotate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="n">ignore_old</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">ignore_xsi</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">empty_pytype</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.pyannotate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.pyannotate">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">pyannotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_old</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_xsi</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.pyannotate" title="Permalink to this definition"></a></dt>
 <dd><p>Recursively annotates the elements of an XML tree with ‘pytype’
 attributes.</p>
 <p>If the ‘ignore_old’ keyword argument is True (the default), current ‘pytype’
@@ -656,14 +568,14 @@ elements.  Pass ‘str’, for example, to make string values the default.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.pytypename">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">pytypename</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.pytypename" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.pytypename">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">pytypename</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.pytypename" title="Permalink to this definition"></a></dt>
 <dd><p>Find the name of the corresponding PyType for a Python object.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.set_default_parser">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">set_default_parser</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">new_parser</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.set_default_parser" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.set_default_parser">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">set_default_parser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">new_parser</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.set_default_parser" title="Permalink to this definition"></a></dt>
 <dd><p>Replace the default parser used by objectify’s Element() and
 fromstring() functions.</p>
 <p>The new parser must be an etree.XMLParser.</p>
@@ -671,8 +583,8 @@ fromstring() functions.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.set_pytype_attribute_tag">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">set_pytype_attribute_tag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">attribute_tag</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.set_pytype_attribute_tag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.set_pytype_attribute_tag">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">set_pytype_attribute_tag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">attribute_tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.set_pytype_attribute_tag" title="Permalink to this definition"></a></dt>
 <dd><p>Change name and namespace of the XML attribute that holds Python type
 information.</p>
 <p>Do not use this unless you know what you are doing.</p>
@@ -681,8 +593,8 @@ information.</p>
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.objectify.xsiannotate">
-<code class="sig-prename descclassname">lxml.objectify.</code><code class="sig-name descname">xsiannotate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="n">ignore_old</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">ignore_pytype</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">empty_type</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.xsiannotate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.objectify.xsiannotate">
+<span class="sig-prename descclassname"><span class="pre">lxml.objectify.</span></span><span class="sig-name descname"><span class="pre">xsiannotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_old</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_pytype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.objectify.xsiannotate" title="Permalink to this definition"></a></dt>
 <dd><p>Recursively annotates the elements of an XML tree with ‘xsi:type’
 attributes.</p>
 <p>If the ‘ignore_old’ keyword argument is True (the default), current
@@ -700,62 +612,37 @@ use them as a type hint.</p>
 elements.  Pass ‘string’, for example, to make string values the default.</p>
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="lxml.sax.html" class="btn btn-neutral float-right" title="lxml.sax module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="lxml.etree.html" class="btn btn-neutral float-left" title="lxml.etree module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.etree.html" class="btn btn-neutral float-left" title="lxml.etree module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="lxml.sax.html" class="btn btn-neutral float-right" title="lxml.sax module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 8fb41637ff798e1e8447ca1d1c13fb77cbb6881b..5e31cceb9b944dffa7a1cc3d7185dbd15c901158 100644 (file)
@@ -1,74 +1,37 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>lxml.sax module &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
-  
-  
-  
-  
-
-  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>lxml.sax module &mdash; lxml  documentation</title>
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="prev" title="lxml.objectify module" href="lxml.objectify.html" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="lxml.html">lxml package</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
           <li><a href="lxml.html">lxml package</a> &raquo;</li>
-        
       <li>lxml.sax module</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
             <a href="_sources/lxml.sax.rst.txt" rel="nofollow"> View page source</a>
-          
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
-  <div class="section" id="module-lxml.sax">
-<span id="lxml-sax-module"></span><h1>lxml.sax module<a class="headerlink" href="#module-lxml.sax" title="Permalink to this headline"></a></h1>
+             
+  <section id="module-lxml.sax">
+<span id="lxml-sax-module"></span><h1>lxml.sax module<a class="headerlink" href="#module-lxml.sax" title="Permalink to this headline"></a></h1>
 <p>SAX-based adapter to copy trees from/to the Python standard library.</p>
 <p>Use the <cite>ElementTreeContentHandler</cite> class to build an ElementTree from
 SAX events.</p>
@@ -190,31 +102,31 @@ SAX events.</p>
 the SAX events of an ElementTree against a SAX ContentHandler.</p>
 <p>See <a class="reference external" href="https://lxml.de/sax.html">https://lxml.de/sax.html</a></p>
 <dl class="py exception">
-<dt id="lxml.sax.SaxError">
-<em class="property">exception </em><code class="sig-prename descclassname">lxml.sax.</code><code class="sig-name descname">SaxError</code><a class="headerlink" href="#lxml.sax.SaxError" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.SaxError">
+<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.sax.</span></span><span class="sig-name descname"><span class="pre">SaxError</span></span><a class="headerlink" href="#lxml.sax.SaxError" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlError" title="lxml.etree.LxmlError"><code class="xref py py-class docutils literal notranslate"><span class="pre">lxml.etree.LxmlError</span></code></a></p>
 <p>General SAX error.</p>
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.sax.ElementTreeContentHandler">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.sax.</code><code class="sig-name descname">ElementTreeContentHandler</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">makeelement</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.sax.</span></span><span class="sig-name descname"><span class="pre">ElementTreeContentHandler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">makeelement</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">xml.sax.handler.ContentHandler</span></code></p>
 <p>Build an lxml ElementTree from SAX events.</p>
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler._buildTag">
-<code class="sig-name descname">_buildTag</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ns_name_tuple</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler._buildTag" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler._buildTag">
+<span class="sig-name descname"><span class="pre">_buildTag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ns_name_tuple</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler._buildTag" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler._get_etree">
-<code class="sig-name descname">_get_etree</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler._get_etree" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler._get_etree">
+<span class="sig-name descname"><span class="pre">_get_etree</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler._get_etree" title="Permalink to this definition"></a></dt>
 <dd><p>Contains the generated ElementTree after parsing is finished.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.characters">
-<code class="sig-name descname">characters</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.characters" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.characters">
+<span class="sig-name descname"><span class="pre">characters</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.characters" title="Permalink to this definition"></a></dt>
 <dd><p>Receive notification of character data.</p>
 <p>The Parser will call this method to report each chunk of
 character data. SAX parsers may return all contiguous
@@ -225,8 +137,8 @@ Locator provides useful information.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.endDocument">
-<code class="sig-name descname">endDocument</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endDocument" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.endDocument">
+<span class="sig-name descname"><span class="pre">endDocument</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endDocument" title="Permalink to this definition"></a></dt>
 <dd><p>Receive notification of the end of a document.</p>
 <p>The SAX parser will invoke this method only once, and it will
 be the last method invoked during the parse. The parser shall
@@ -236,24 +148,24 @@ input.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.endElement">
-<code class="sig-name descname">endElement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.endElement">
+<span class="sig-name descname"><span class="pre">endElement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endElement" title="Permalink to this definition"></a></dt>
 <dd><p>Signals the end of an element in non-namespace mode.</p>
 <p>The name parameter contains the name of the element type, just
 as with the startElement event.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.endElementNS">
-<code class="sig-name descname">endElementNS</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ns_name</span></em>, <em class="sig-param"><span class="n">qname</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endElementNS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.endElementNS">
+<span class="sig-name descname"><span class="pre">endElementNS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ns_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qname</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endElementNS" title="Permalink to this definition"></a></dt>
 <dd><p>Signals the end of an element in namespace mode.</p>
 <p>The name parameter contains the name of the element type, just
 as with the startElementNS event.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.endPrefixMapping">
-<code class="sig-name descname">endPrefixMapping</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">prefix</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endPrefixMapping" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.endPrefixMapping">
+<span class="sig-name descname"><span class="pre">endPrefixMapping</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prefix</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.endPrefixMapping" title="Permalink to this definition"></a></dt>
 <dd><p>End the scope of a prefix-URI mapping.</p>
 <p>See startPrefixMapping for details. This event will always
 occur after the corresponding endElement event, but the order
@@ -261,8 +173,8 @@ of endPrefixMapping events is not otherwise guaranteed.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.ignorableWhitespace">
-<code class="sig-name descname">ignorableWhitespace</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.ignorableWhitespace" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.ignorableWhitespace">
+<span class="sig-name descname"><span class="pre">ignorableWhitespace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.ignorableWhitespace" title="Permalink to this definition"></a></dt>
 <dd><p>Receive notification of ignorable whitespace in element content.</p>
 <p>Validating Parsers must use this method to report each chunk
 of ignorable whitespace (see the W3C XML 1.0 recommendation,
@@ -276,8 +188,8 @@ information.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.processingInstruction">
-<code class="sig-name descname">processingInstruction</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">target</span></em>, <em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.processingInstruction" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.processingInstruction">
+<span class="sig-name descname"><span class="pre">processingInstruction</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.processingInstruction" title="Permalink to this definition"></a></dt>
 <dd><p>Receive notification of a processing instruction.</p>
 <p>The Parser will invoke this method once for each processing
 instruction found: note that processing instructions may occur
@@ -288,8 +200,8 @@ using this method.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.setDocumentLocator">
-<code class="sig-name descname">setDocumentLocator</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">locator</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.setDocumentLocator" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.setDocumentLocator">
+<span class="sig-name descname"><span class="pre">setDocumentLocator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.setDocumentLocator" title="Permalink to this definition"></a></dt>
 <dd><p>Called by the parser to give the application a locator for
 locating the origin of document events.</p>
 <p>SAX parsers are strongly encouraged (though not absolutely
@@ -310,8 +222,8 @@ application should not attempt to use it at any other time.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.startDocument">
-<code class="sig-name descname">startDocument</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startDocument" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.startDocument">
+<span class="sig-name descname"><span class="pre">startDocument</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startDocument" title="Permalink to this definition"></a></dt>
 <dd><p>Receive notification of the beginning of a document.</p>
 <p>The SAX parser will invoke this method only once, before any
 other methods in this interface or in DTDHandler (except for
@@ -319,8 +231,8 @@ setDocumentLocator).</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.startElement">
-<code class="sig-name descname">startElement</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startElement" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.startElement">
+<span class="sig-name descname"><span class="pre">startElement</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attributes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startElement" title="Permalink to this definition"></a></dt>
 <dd><p>Signals the start of an element in non-namespace mode.</p>
 <p>The name parameter contains the raw XML 1.0 name of the
 element type as a string and the attrs parameter holds an
@@ -329,8 +241,8 @@ the element.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.startElementNS">
-<code class="sig-name descname">startElementNS</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ns_name</span></em>, <em class="sig-param"><span class="n">qname</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startElementNS" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.startElementNS">
+<span class="sig-name descname"><span class="pre">startElementNS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ns_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qname</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">attributes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startElementNS" title="Permalink to this definition"></a></dt>
 <dd><p>Signals the start of an element in namespace mode.</p>
 <p>The name parameter contains the name of the element type as a
 (uri, localname) tuple, the qname parameter the raw XML 1.0
@@ -342,8 +254,8 @@ no namespace.</p>
 </dd></dl>
 
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.startPrefixMapping">
-<code class="sig-name descname">startPrefixMapping</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">prefix</span></em>, <em class="sig-param"><span class="n">uri</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startPrefixMapping" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.startPrefixMapping">
+<span class="sig-name descname"><span class="pre">startPrefixMapping</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prefix</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.startPrefixMapping" title="Permalink to this definition"></a></dt>
 <dd><p>Begin the scope of a prefix-URI Namespace mapping.</p>
 <p>The information from this event is not necessary for normal
 Namespace processing: the SAX XML reader will automatically
@@ -364,92 +276,68 @@ after the corresponding endElement event, but their order is
 not guaranteed.</p>
 </dd></dl>
 
-<dl class="py method">
-<dt id="lxml.sax.ElementTreeContentHandler.etree">
-<em class="property">property </em><code class="sig-name descname">etree</code><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.etree" title="Permalink to this definition">¶</a></dt>
+<dl class="py property">
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeContentHandler.etree">
+<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">etree</span></span><a class="headerlink" href="#lxml.sax.ElementTreeContentHandler.etree" title="Permalink to this definition"></a></dt>
 <dd><p>Contains the generated ElementTree after parsing is finished.</p>
 </dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
-<dt id="lxml.sax.ElementTreeProducer">
-<em class="property">class </em><code class="sig-prename descclassname">lxml.sax.</code><code class="sig-name descname">ElementTreeProducer</code><a class="headerlink" href="#lxml.sax.ElementTreeProducer" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeProducer">
+<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">lxml.sax.</span></span><span class="sig-name descname"><span class="pre">ElementTreeProducer</span></span><a class="headerlink" href="#lxml.sax.ElementTreeProducer" title="Permalink to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Produces SAX events for an element and children.</p>
 <dl class="py method">
-<dt id="lxml.sax.ElementTreeProducer.saxify">
-<code class="sig-name descname">saxify</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeProducer.saxify" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.ElementTreeProducer.saxify">
+<span class="sig-name descname"><span class="pre">saxify</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.ElementTreeProducer.saxify" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py function">
-<dt id="lxml.sax.__pyx_unpickle_ElementTreeProducer">
-<code class="sig-prename descclassname">lxml.sax.</code><code class="sig-name descname">__pyx_unpickle_ElementTreeProducer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">__pyx_type</span></em>, <em class="sig-param"><span class="n">__pyx_checksum</span></em>, <em class="sig-param"><span class="n">__pyx_state</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.__pyx_unpickle_ElementTreeProducer" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.__pyx_unpickle_ElementTreeProducer">
+<span class="sig-prename descclassname"><span class="pre">lxml.sax.</span></span><span class="sig-name descname"><span class="pre">__pyx_unpickle_ElementTreeProducer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">__pyx_type</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">__pyx_checksum</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">__pyx_state</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.__pyx_unpickle_ElementTreeProducer" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py function">
-<dt id="lxml.sax.saxify">
-<code class="sig-prename descclassname">lxml.sax.</code><code class="sig-name descname">saxify</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">element_or_tree</span></em>, <em class="sig-param"><span class="n">content_handler</span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.saxify" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="lxml.sax.saxify">
+<span class="sig-prename descclassname"><span class="pre">lxml.sax.</span></span><span class="sig-name descname"><span class="pre">saxify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">element_or_tree</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">content_handler</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.saxify" title="Permalink to this definition"></a></dt>
 <dd><p>One-shot helper to generate SAX events from an XML tree and fire
 them against a SAX ContentHandler.</p>
 </dd></dl>
 
-</div>
+</section>
 
 
            </div>
-           
           </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="lxml.objectify.html" class="btn btn-neutral float-left" title="lxml.objectify module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="lxml.objectify.html" class="btn btn-neutral float-left" title="lxml.objectify module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
     </div>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index 75cf09af2d013c3561b8fcb2a93669c33a31a262..a8050a9af127fc7de1e1e1e241cb19615881f08e 100644 (file)
@@ -1,39 +1,20 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>Python Module Index &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
  
 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
       <li>Python Module Index</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
 
    <h1>Python Module Index</h1>
 
 
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
-  </script>
-
-  
-  
-    
-   
+  </script> 
 
 </body>
 </html>
\ No newline at end of file
index c119ba29aa119a03ae62deab60bd691ede412ad0..d5cf86aebfb3f2dca8bd3df2fc47982328ac8ec4 100644 (file)
@@ -1,75 +1,38 @@
-
-
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>Search &mdash; lxml  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
+      <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+      <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
     
   <!--[if lt IE 9]>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/jquery.js"></script>
         <script src="_static/underscore.js"></script>
         <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
-    <script type="text/javascript" src="_static/searchtools.js"></script>
+    <script src="_static/js/theme.js"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="#" /> 
 </head>
 
-<body class="wy-body-for-nav">
-
-   
+<body class="wy-body-for-nav"> 
   <div class="wy-grid-for-nav">
-    
     <nav data-toggle="wy-nav-shift" class="wy-nav-side">
       <div class="wy-side-scroll">
         <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> lxml
-          
-
-          
-            
+            <a href="index.html" class="icon icon-home"> lxml
             <img src="_static/python-xml.png" class="logo" alt="Logo"/>
-          
           </a>
-
-          
-            
-            
               <div class="version">
-                4.6.2
+                4.6.4
               </div>
-            
-          
-
-          
 <div role="search">
   <form id="rtd-search-form" class="wy-form" action="#" method="get">
     <input type="text" name="q" placeholder="Search docs" />
     <input type="hidden" name="area" value="default" />
   </form>
 </div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
               <ul>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html">lxml package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 </li>
 </ul>
 
-            
-          
         </div>
-        
       </div>
     </nav>
 
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
           <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
           <a href="index.html">lxml</a>
-        
       </nav>
 
-
       <div class="wy-nav-content">
-        
         <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
+          <div role="navigation" aria-label="Page navigation">
   <ul class="wy-breadcrumbs">
-    
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
       <li>Search</li>
-    
-    
       <li class="wy-breadcrumbs-aside">
-        
-            
-        
       </li>
-    
   </ul>
-
-  
   <hr/>
 </div>
           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div itemprop="articleBody">
-            
+             
   <noscript>
   <div id="fallback" class="admonition warning">
     <p class="last">
   </div>
 
            </div>
-           
           </div>
           <footer>
-  
 
   <hr/>
 
   <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, lxml dev team
-
-    </p>
+    <p>&#169; Copyright 2020, lxml dev team.</p>
   </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
 
-</footer>
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
 
+</footer>
         </div>
       </div>
-
     </section>
-
   </div>
-  
-
-  <script type="text/javascript">
+  <script>
       jQuery(function () {
           SphinxRtdTheme.Navigation.enable(true);
       });
   </script>
-
-  
-  
-    
-  
-  <script type="text/javascript">
+  <script>
     jQuery(function() { Search.loadIndex("searchindex.js"); });
   </script>
   
-  <script type="text/javascript" id="searchindexloader"></script>
+  <script id="searchindexloader"></script>
    
 
 
index 9130ad31f65c5b69360146cbe8d72cd99f521b79..3652aac48006f976080d542694ec3d122553b312 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>How to build lxml from source</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="how-to-build-lxml-from-source">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu current" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">How to build lxml from source</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu current" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">How to build lxml from source</h1>
 
 <p>To build lxml from source, you need libxml2 and libxslt properly
 installed, <em>including the header files</em>.  These are likely shipped in
@@ -317,7 +317,7 @@ installed using <tt class="docutils literal">dpkg <span class="pre">-i</span></t
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 405df7e34294cdeeb2c89eb9e59ee3591031be05..95ffc01a2328a8a652bec211a13e509ffbcebadb 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>The public C-API of lxml.etree</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,13 +24,13 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="the-public-c-api-of-lxml-etree">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu current" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">The public C-API of lxml.etree</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu current" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">The public C-API of lxml.etree</h1>
 
 <p>As of version 1.1, lxml.etree provides a public C-API.  This allows external
 C extensions to efficiently access public functions and classes of lxml,
 without going through the Python API.</p>
 <p>The API is described in the file <a class="reference external" href="https://github.com/lxml/lxml/blob/master/src/lxml/includes/etreepublic.pxd">etreepublic.pxd</a>, which is directly
-c-importable by extension modules implemented in <a class="reference external" href="http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/">Pyrex</a> or <a class="reference external" href="http://cython.org">Cython</a>.</p>
+c-importable by extension modules implemented in <a class="reference external" href="https://cython.org">Cython</a>.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
@@ -57,8 +57,8 @@ of the C function <tt class="docutils literal">adoptExternalDocument()</tt>.</p>
 </div>
 <div class="section" id="writing-external-modules-in-cython">
 <h1>Writing external modules in Cython</h1>
-<p>This is the easiest way of extending lxml at the C level.  A <a class="reference external" href="http://cython.org">Cython</a>
-(or <a class="reference external" href="http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/">Pyrex</a>) module should start like this:</p>
+<p>This is the easiest way of extending lxml at the C level.  A <a class="reference external" href="https://cython.org">Cython</a>
+module should start like this:</p>
 <pre class="literal-block">
 # My Cython extension
 
@@ -102,29 +102,29 @@ etree.set_element_class_lookup(
 <p>If you really feel like it, you can also interface with lxml.etree straight
 from C code.  All you have to do is include the header file for the public
 API, import the <tt class="docutils literal">lxml.etree</tt> module and then call the import function:</p>
-<div class="syntax"><pre><span></span><span class="cm">/* My C extension */</span>
+<div class="syntax"><pre><span></span><span class="cm">/* My C extension */</span><span class="w"></span>
 
-<span class="cm">/* common includes */</span>
-<span class="cp">#include</span> <span class="cpf">"Python.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"stdio.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"string.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"stdarg.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/xmlversion.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/encoding.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/hash.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/tree.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/xmlIO.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/xmlsave.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/globals.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"libxml/xmlstring.h"</span><span class="cp"></span>
+<span class="cm">/* common includes */</span><span class="w"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"Python.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"stdio.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"string.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"stdarg.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlversion.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/encoding.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/hash.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/tree.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlIO.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlsave.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/globals.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlstring.h"</span><span class="cp"></span>
 
-<span class="cm">/* lxml.etree specific includes */</span>
-<span class="cp">#include</span> <span class="cpf">"lxml-version.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"etree_defs.h"</span><span class="cp"></span>
-<span class="cp">#include</span> <span class="cpf">"etree.h"</span><span class="cp"></span>
+<span class="cm">/* lxml.etree specific includes */</span><span class="w"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lxml-version.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"etree_defs.h"</span><span class="cp"></span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"etree.h"</span><span class="cp"></span>
 
-<span class="cm">/* setup code */</span>
-<span class="n">import_lxml__etree</span><span class="p">()</span>
+<span class="cm">/* setup code */</span><span class="w"></span>
+<span class="n">import_lxml__etree</span><span class="p">()</span><span class="w"></span>
 </pre></div>
 <p>Note that including <tt class="docutils literal">etree.h</tt> does not automatically include the
 header files it requires.  Note also that the above list of common
@@ -133,7 +133,7 @@ includes may not be sufficient.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
diff --git a/doc/html/changes-4.6.3.html b/doc/html/changes-4.6.3.html
deleted file mode 100644 (file)
index 0ce06bb..0000000
+++ /dev/null
@@ -1,3712 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!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" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
-<title>lxml changelog</title>
-<link rel="stylesheet" href="style.css" type="text/css" />
-</head>
-<body>
-<div class="document" id="lxml-changelog">
-<h1 class="title">lxml changelog</h1>
-
-<div class="section" id="id1">
-<h1>4.6.3 (2021-03-21)</h1>
-<div class="section" id="bugs-fixed">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>A vulnerability (CVE-2021-28957) was discovered in the HTML Cleaner by Kevin Chung,
-which allowed JavaScript to pass through.  The cleaner now removes the HTML5
-<tt class="docutils literal">formaction</tt> attribute.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id2">
-<h1>4.6.2 (2020-11-26)</h1>
-<div class="section" id="id3">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>A vulnerability (CVE-2020-27783) was discovered in the HTML Cleaner by Yaniv Nizry,
-which allowed JavaScript to pass through.  The cleaner now removes more sneaky
-&quot;style&quot; content.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id4">
-<h1>4.6.1 (2020-10-18)</h1>
-<div class="section" id="id5">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>A vulnerability was discovered in the HTML Cleaner by Yaniv Nizry, which allowed
-JavaScript to pass through.  The cleaner now removes more sneaky &quot;style&quot; content.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id6">
-<h1>4.6.0 (2020-10-17)</h1>
-<div class="section" id="features-added">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/310">GH#310</a>: <tt class="docutils literal">lxml.html.InputGetter</tt> supports <tt class="docutils literal">__len__()</tt> to count the number of input fields.
-Patch by Aidan Woolley.</li>
-<li><tt class="docutils literal">lxml.html.InputGetter</tt> has a new <tt class="docutils literal">.items()</tt> method to ease processing all input fields.</li>
-<li><tt class="docutils literal">lxml.html.InputGetter.keys()</tt> now returns the field names in document order.</li>
-<li>GH-309: The API documentation is now generated using <tt class="docutils literal"><span class="pre">sphinx-apidoc</span></tt>.
-Patch by Chris Mayo.</li>
-</ul>
-</div>
-<div class="section" id="id7">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1869455">LP#1869455</a>: C14N 2.0 serialisation failed for unprefixed attributes
-when a default namespace was defined.</li>
-<li><tt class="docutils literal">TreeBuilder.close()</tt> raised <tt class="docutils literal">AssertionError</tt> in some error cases where it
-should have raised <tt class="docutils literal">XMLSyntaxError</tt>.  It now raises a combined exception to
-keep up backwards compatibility, while switching to <tt class="docutils literal">XMLSyntaxError</tt> as an
-interface.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id8">
-<h1>4.5.2 (2020-07-09)</h1>
-<div class="section" id="id9">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">Cleaner()</tt> now validates that only known configuration options can be set.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1882606">LP#1882606</a>: <tt class="docutils literal">Cleaner.clean_html()</tt> discarded comments and PIs regardless of the
-corresponding configuration option, if <tt class="docutils literal">remove_unknown_tags</tt> was set.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1880251">LP#1880251</a>: Instead of globally overwriting the document loader in libxml2, lxml now
-sets it per parser run, which improves the interoperability with other users of libxml2
-such as libxmlsec.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1881960">LP#1881960</a>: Fix build in CPython 3.10 by using Cython 0.29.21.</li>
-<li>The setup options &quot;--with-xml2-config&quot; and &quot;--with-xslt-config&quot; were accidentally renamed
-to &quot;--xml2-config&quot; and &quot;--xslt-config&quot; in 4.5.1 and are now available again.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id10">
-<h1>4.5.1 (2020-05-19)</h1>
-<div class="section" id="id11">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1570388">LP#1570388</a>: Fix failures when serialising documents larger than 2GB in some cases.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1865141">LP#1865141</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/298">GH#298</a>: <tt class="docutils literal">QName</tt> values were not accepted by the <tt class="docutils literal">el.iter()</tt> method.
-Patch by xmo-odoo.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1863413">LP#1863413</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/297">GH#297</a>: The build failed to detect libraries on Linux that are only
-configured via pkg-config.
-Patch by Hugh McMaster.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id12">
-<h1>4.5.0 (2020-01-29)</h1>
-<div class="section" id="id13">
-<h2>Features added</h2>
-<ul class="simple">
-<li>A new function <tt class="docutils literal">indent()</tt> was added to insert tail whitespace for pretty-printing
-an XML tree.</li>
-</ul>
-</div>
-<div class="section" id="id14">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1857794">LP#1857794</a>: Tail text of nodes that get removed from a document using item
-deletion disappeared silently instead of sticking with the node that was removed.</li>
-</ul>
-</div>
-<div class="section" id="other-changes">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>MacOS builds are 64-bit-only by default.
-Set CFLAGS and LDFLAGS explicitly to override it.</li>
-<li>Linux/MacOS Binary wheels now use libxml2 2.9.10 and libxslt 1.1.34.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1840234">LP#1840234</a>: The package version number is now available as <tt class="docutils literal">lxml.__version__</tt>.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id15">
-<h1>4.4.3 (2020-01-28)</h1>
-<div class="section" id="id16">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1844674">LP#1844674</a>: <tt class="docutils literal">itertext()</tt> was missing tail text of comments and PIs since 4.4.0.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id17">
-<h1>4.4.2 (2019-11-25)</h1>
-<div class="section" id="id18">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1835708">LP#1835708</a>: <tt class="docutils literal">ElementInclude</tt> incorrectly rejected repeated non-recursive
-includes as recursive.
-Patch by Rainer Hausdorf.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id19">
-<h1>4.4.1 (2019-08-11)</h1>
-<div class="section" id="id20">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1838252">LP#1838252</a>: The order of an OrderedDict was lost in 4.4.0 when passing it as
-attrib mapping during element creation.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1838521">LP#1838521</a>: The package metadata now lists the supported Python versions.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id21">
-<h1>4.4.0 (2019-07-27)</h1>
-<div class="section" id="id22">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">Element.clear()</tt> accepts a new keyword argument <tt class="docutils literal">keep_tail=True</tt> to clear
-everything but the tail text.  This is helpful in some document-style use cases
-and for clearing the current element in <tt class="docutils literal">iterparse()</tt> and pull parsing.</li>
-<li>When creating attributes or namespaces from a dict in Python 3.6+, lxml now
-preserves the original insertion order of that dict, instead of always sorting
-the items by name.  A similar change was made for ElementTree in CPython 3.8.
-See <a class="reference external" href="https://bugs.python.org/issue34160">https://bugs.python.org/issue34160</a></li>
-<li>Integer elements in <tt class="docutils literal">lxml.objectify</tt> implement the <tt class="docutils literal">__index__()</tt> special method.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/269">GH#269</a>: Read-only elements in XSLT were missing the <tt class="docutils literal">nsmap</tt> property.
-Original patch by Jan Pazdziora.</li>
-<li>ElementInclude can now restrict the maximum inclusion depth via a <tt class="docutils literal">max_depth</tt>
-argument to prevent content explosion.  It is limited to 6 by default.</li>
-<li>The <tt class="docutils literal">target</tt> object of the XMLParser can have <tt class="docutils literal">start_ns()</tt> and <tt class="docutils literal">end_ns()</tt>
-callback methods to listen to namespace declarations.</li>
-<li>The <tt class="docutils literal">TreeBuilder</tt> has new arguments <tt class="docutils literal">comment_factory</tt> and <tt class="docutils literal">pi_factory</tt> to
-pass factories for creating comments and processing instructions, as well as
-flag arguments <tt class="docutils literal">insert_comments</tt> and <tt class="docutils literal">insert_pis</tt> to discard them from the
-tree when set to false.</li>
-<li>A <a class="reference external" href="https://www.w3.org/TR/xml-c14n2/">C14N 2.0</a> implementation was added as
-<tt class="docutils literal">etree.canonicalize()</tt>, a corresponding <tt class="docutils literal">C14NWriterTarget</tt> class, and
-a <tt class="docutils literal">c14n2</tt> serialisation method.</li>
-</ul>
-</div>
-<div class="section" id="id23">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When writing to file paths that contain the URL escape character '%', the file
-path could wrongly be mangled by URL unescaping and thus write to a different
-file or directory.  Code that writes to file paths that are provided by untrusted
-sources, but that must work with previous versions of lxml, should best either
-reject paths that contain '%' characters, or otherwise make sure that the path
-does not contain maliciously injected '%XX' URL hex escapes for paths like '../'.</li>
-<li>Assigning to Element child slices with negative step could insert the slice at
-the wrong position, starting too far on the left.</li>
-<li>Assigning to Element child slices with overly large step size could take very
-long, regardless of the length of the actual slice.</li>
-<li>Assigning to Element child slices of the wrong size could sometimes fail to
-raise a ValueError (like a list assignment would) and instead assign outside
-of the original slice bounds or leave parts of it unreplaced.</li>
-<li>The <tt class="docutils literal">comment</tt> and <tt class="docutils literal">pi</tt> events in <tt class="docutils literal">iterwalk()</tt> were never triggered, and
-instead, comments and processing instructions in the tree were reported as
-<tt class="docutils literal">start</tt> elements.  Also, when walking an ElementTree (as opposed to its root
-element), comments and PIs outside of the root element are now reported.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1827833">LP#1827833</a>: The RelaxNG compact syntax support was broken with recent versions
-of <tt class="docutils literal">rnc2rng</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1758553">LP#1758553</a>: The HTML elements <tt class="docutils literal">source</tt> and <tt class="docutils literal">track</tt> were added to the list
-of empty tags in <tt class="docutils literal">lxml.html.defs</tt>.</li>
-<li>Registering a prefix other than &quot;xml&quot; for the XML namespace is now rejected.</li>
-<li>Failing to write XSLT output to a file could raise a misleading exception.
-It now raises <tt class="docutils literal">IOError</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id24">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Support for Python 3.4 was removed.</li>
-<li>When using <tt class="docutils literal"><span class="pre">Element.find*()</span></tt> with prefix-namespace mappings, the empty string
-is now accepted to define a default namespace, in addition to the previously
-supported <tt class="docutils literal">None</tt> prefix.  Empty strings are more convenient since they keep
-all prefix keys in a namespace dict strings, which simplifies sorting etc.</li>
-<li>The <tt class="docutils literal">ElementTree.write_c14n()</tt> method has been deprecated in favour of the
-long preferred <tt class="docutils literal">ElementTree.write(f, <span class="pre">method=&quot;c14n&quot;)</span></tt>.  It will be removed
-in a future release.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id25">
-<h1>4.3.5 (2019-07-27)</h1>
-<ul class="simple">
-<li>Rebuilt with Cython 0.29.13 to support Python 3.8.</li>
-</ul>
-</div>
-<div class="section" id="id26">
-<h1>4.3.4 (2019-06-10)</h1>
-<ul class="simple">
-<li>Rebuilt with Cython 0.29.10 to support Python 3.8.</li>
-</ul>
-</div>
-<div class="section" id="id27">
-<h1>4.3.3 (2019-03-26)</h1>
-<div class="section" id="id28">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fix leak of output buffer and unclosed files in <tt class="docutils literal">_XSLTResultTree.write_output()</tt>.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id29">
-<h1>4.3.2 (2019-02-29)</h1>
-<div class="section" id="id30">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in 4.3.1 when appending a child subtree with certain text nodes.</li>
-</ul>
-</div>
-<div class="section" id="id31">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.29.6.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id32">
-<h1>4.3.1 (2019-02-08)</h1>
-<div class="section" id="id33">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1814522">LP#1814522</a>: Crash when appending a child subtree that contains unsubstituted
-entity references.</li>
-</ul>
-</div>
-<div class="section" id="id34">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.29.5.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id35">
-<h1>4.3.0 (2019-01-04)</h1>
-<div class="section" id="id36">
-<h2>Features added</h2>
-<ul class="simple">
-<li>The module <tt class="docutils literal">lxml.sax</tt> is compiled using Cython in order to speed it up.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/267">GH#267</a>: <tt class="docutils literal">lxml.sax.ElementTreeProducer</tt> now preserves the namespace prefixes.
-If two prefixes point to the same URI, the first prefix in alphabetical order
-is used.  Patch by Lennart Regebro.</li>
-<li>Updated ISO-Schematron implementation to 2013 version (now MIT licensed)
-and the corresponding schema to the 2016 version (with optional &quot;properties&quot;).</li>
-</ul>
-</div>
-<div class="section" id="id37">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/270">GH#270</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/271">GH#271</a>: Support for Python 2.6 and 3.3 was removed.
-Patch by hugovk.</li>
-<li>The minimum dependency versions were raised to libxml2 2.9.2 and libxslt 1.1.27,
-which were released in 2014 and 2012 respectively.</li>
-<li>Built with Cython 0.29.2.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id38">
-<h1>4.2.6 (2019-01-02)</h1>
-<div class="section" id="id39">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1799755">LP#1799755</a>: Fix a DeprecationWarning in Py3.7+.</li>
-<li>Import warnings in Python 3.6+ were resolved.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id40">
-<h1>4.2.5 (2018-09-09)</h1>
-<div class="section" id="id41">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Javascript URLs that used URL escaping were not removed by the HTML cleaner.
-Security problem found by Omar Eissa.  (CVE-2018-19787)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id42">
-<h1>4.2.4 (2018-08-03)</h1>
-<div class="section" id="id43">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/259">GH#259</a>: Allow using <tt class="docutils literal"><span class="pre">pkg-config</span></tt> for build configuration.
-Patch by Patrick Griffis.</li>
-</ul>
-</div>
-<div class="section" id="id44">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1773749">LP#1773749</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/268">GH#268</a>: Crash when moving an element to another document with
-<tt class="docutils literal">Element.insert()</tt>.
-Patch by Alexander Weggerle.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id45">
-<h1>4.2.3 (2018-06-27)</h1>
-<div class="section" id="id46">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Reverted <a class="reference external" href="https://github.com/lxml/lxml/issues/265">GH#265</a>: lxml links against zlib as a shared library again.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id47">
-<h1>4.2.2 (2018-06-22)</h1>
-<div class="section" id="id48">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/266">GH#266</a>: Fix sporadic crash during GC when parse-time schema validation is used
-and the parser participates in a reference cycle.
-Original patch by Julien Greard.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/265">GH#265</a>: lxml no longer links against zlib as a shared library, only on static builds.
-Patch by Nehal J Wani.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id50">
-<h1>4.2.1 (2018-03-21)</h1>
-<div class="section" id="id51">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1755825">LP#1755825</a>: <tt class="docutils literal">iterwalk()</tt> failed to return the 'start' event for the initial
-element if a tag selector is used.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1756314">LP#1756314</a>: Failure to import 4.2.0 into PyPy due to a missing library symbol.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1727864">LP#1727864</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/258">GH#258</a>: Add &quot;-isysroot&quot; linker option on MacOS as needed by XCode 9.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id52">
-<h1>4.2.0 (2018-03-13)</h1>
-<div class="section" id="id53">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/255">GH#255</a>: <tt class="docutils literal">SelectElement.value</tt> returns more standard-compliant and
-browser-like defaults for non-multi-selects.  If no option is selected, the
-value of the first option is returned (instead of None).  If multiple options
-are selected, the value of the last one is returned (instead of that of the
-first one).  If no options are present (not standard-compliant)
-<tt class="docutils literal">SelectElement.value</tt> still returns <tt class="docutils literal">None</tt>.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/261">GH#261</a>: The <tt class="docutils literal">HTMLParser()</tt> now supports the <tt class="docutils literal">huge_tree</tt> option.
-Patch by stranac.</li>
-</ul>
-</div>
-<div class="section" id="id54">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: Some XSLT messages were not captured by the transform error log.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1737825">LP#1737825</a>: Crash at shutdown after an interrupted iterparse run with XMLSchema
-validation.</li>
-</ul>
-</div>
-<div class="section" id="id55">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id56">
-<h1>4.1.1 (2017-11-04)</h1>
-<ul class="simple">
-<li>Rebuild with Cython 0.27.3 to improve support for Py3.7.</li>
-</ul>
-</div>
-<div class="section" id="id57">
-<h1>4.1.0 (2017-10-13)</h1>
-<div class="section" id="id58">
-<h2>Features added</h2>
-<ul class="simple">
-<li>ElementPath supports text predicates for current node, like &quot;[.='text']&quot;.</li>
-<li>ElementPath allows spaces in predicates.</li>
-<li>Custom Element classes and XPath functions can now be registered with a
-decorator rather than explicit dict assignments.</li>
-<li>Static Linux wheels are now built with link time optimisation (LTO) enabled.
-This should have a beneficial impact on the overall performance by providing
-a tighter compiler integration between lxml and libxml2/libxslt.</li>
-</ul>
-</div>
-<div class="section" id="id59">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1722776">LP#1722776</a>: Requesting non-Element objects like comments from a document with
-<tt class="docutils literal">PythonElementClassLookup</tt> could fail with a TypeError.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id60">
-<h1>4.0.0 (2017-09-17)</h1>
-<div class="section" id="id61">
-<h2>Features added</h2>
-<ul class="simple">
-<li>The ElementPath implementation is now compiled using Cython,
-which speeds up the <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods quite significantly.</li>
-<li>The modules <tt class="docutils literal">lxml.builder</tt>, <tt class="docutils literal">lxml.html.diff</tt> and <tt class="docutils literal">lxml.html.clean</tt>
-are also compiled using Cython in order to speed them up.</li>
-<li><tt class="docutils literal">xmlfile()</tt> supports async coroutines using <tt class="docutils literal">async with</tt> and <tt class="docutils literal">await</tt>.</li>
-<li><tt class="docutils literal">iterwalk()</tt> has a new method <tt class="docutils literal">skip_subtree()</tt> that prevents walking into
-the descendants of the current element.</li>
-<li><tt class="docutils literal">RelaxNG.from_rnc_string()</tt> accepts a <tt class="docutils literal">base_url</tt> argument to
-allow relative resource lookups.</li>
-<li>The XSLT result object has a new method <tt class="docutils literal">.write_output(file)</tt> that serialises
-output data into a file according to the <tt class="docutils literal">&lt;xsl:output&gt;</tt> configuration.</li>
-</ul>
-</div>
-<div class="section" id="id62">
-<h2>Bugs fixed</h2>
-<ul>
-<li><p class="first"><a class="reference external" href="https://github.com/lxml/lxml/issues/251">GH#251</a>: HTML comments were handled incorrectly by the soupparser.
-Patch by mozbugbox.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1654544">LP#1654544</a>: The html5parser no longer passes the <tt class="docutils literal">useChardet</tt> option
-if the input is a Unicode string, unless explicitly requested.  When parsing
-files, the default is to enable it when a URL or file path is passed (because
-the file is then opened in binary mode), and to disable it when reading from
-a file(-like) object.</p>
-<p>Note: This is a backwards incompatible change of the default configuration.
-If your code parses byte strings/streams and depends on character detection,
-please pass the option <tt class="docutils literal">guess_charset=True</tt> explicitly, which already worked
-in older lxml versions.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1703810">LP#1703810</a>: <tt class="docutils literal">etree.fromstring()</tt> failed to parse UTF-32 data with BOM.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1526522">LP#1526522</a>: Some RelaxNG errors were not reported in the error log.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1567526">LP#1567526</a>: Empty and plain text input raised a TypeError in soupparser.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1710429">LP#1710429</a>: Uninitialised variable usage in HTML diff.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1415643">LP#1415643</a>: The closing tags context manager in <tt class="docutils literal">xmlfile()</tt> could continue
-to output end tags even after writing failed with an exception.</p>
-</li>
-<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1465357">LP#1465357</a>: <tt class="docutils literal">xmlfile.write()</tt> now accepts and ignores None as input argument.</p>
-</li>
-<li><p class="first">Compilation under Py3.7-pre failed due to a modified function signature.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="id63">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The main module source files were renamed from <tt class="docutils literal"><span class="pre">lxml.*.pyx</span></tt> to plain
-<tt class="docutils literal">*.pyx</tt> (e.g. <tt class="docutils literal">etree.pyx</tt>) to simplify their handling in the build
-process.  Care was taken to keep the old header files as fallbacks for
-code that compiles against the public C-API of lxml, but it might still
-be worth validating that third-party code does not notice this change.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id64">
-<h1>3.8.0 (2017-06-03)</h1>
-<div class="section" id="id65">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">ElementTree.write()</tt> has a new option <tt class="docutils literal">doctype</tt> that writes out a
-doctype string before the serialisation, in the same way as <tt class="docutils literal">tostring()</tt>.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/220">GH#220</a>: <tt class="docutils literal">xmlfile</tt> allows switching output methods at an element level.
-Patch by Burak Arslan.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1595781">LP#1595781</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/240">GH#240</a>: added a PyCapsule Python API and C-level API for
-passing externally generated libxml2 documents into lxml.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/244">GH#244</a>: error log entries have a new property <tt class="docutils literal">path</tt> with an XPath
-expression (if known, None otherwise) that points to the tree element
-responsible for the error. Patch by Bob Kline.</li>
-<li>The namespace prefix mapping that can be used in ElementPath now injects
-a default namespace when passing a None prefix.</li>
-</ul>
-</div>
-<div class="section" id="id66">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/238">GH#238</a>: Character escapes were not hex-encoded in the <tt class="docutils literal">xmlfile</tt> serialiser.
-Patch by matejcik.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/229">GH#229</a>: fix for externally created XML documents.  Patch by Theodore Dubois.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1665241">LP#1665241</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/228">GH#228</a>: Form data handling in lxml.html no longer strips the
-option values specified in form attributes but only the text values.
-Patch by Ashish Kulkarni.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: revert previous fix for XSLT error logging as it breaks
-multi-threaded XSLT processing.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1673355">LP#1673355</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/233">GH#233</a>: <tt class="docutils literal">fromstring()</tt> html5parser failed to parse byte strings.</li>
-</ul>
-</div>
-<div class="section" id="id68">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The previously undocumented <tt class="docutils literal">docstring</tt> option in <tt class="docutils literal">ElementTree.write()</tt>
-produces a deprecation warning and will eventually be removed.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id69">
-<h1>3.7.4 (2017-??-??)</h1>
-<div class="section" id="id70">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: revert previous fix for XSLT error logging as it breaks
-multi-threaded XSLT processing.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1673355">LP#1673355</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/233">GH#233</a>: <tt class="docutils literal">fromstring()</tt> html5parser failed to parse byte strings.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id74">
-<h1>3.7.3 (2017-02-18)</h1>
-<div class="section" id="id75">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/218">GH#218</a> was ineffective in Python 3.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/222">GH#222</a>: <tt class="docutils literal">lxml.html.submit_form()</tt> failed in Python 3.
-Patch by Jakub Wilk.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id76">
-<h1>3.7.2 (2017-01-08)</h1>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/220">GH#220</a>: <tt class="docutils literal">xmlfile</tt> allows switching output methods at an element level.
-Patch by Burak Arslan.</li>
-</ul>
-<div class="section" id="id78">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Work around installation problems in recent Python 2.7 versions
-due to FTP download failures.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/219">GH#219</a>: <tt class="docutils literal">xmlfile.element()</tt> was not properly quoting attribute values.
-Patch by Burak Arslan.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/218">GH#218</a>: <tt class="docutils literal">xmlfile.element()</tt> was not properly escaping text content of
-script/style tags.  Patch by Burak Arslan.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id80">
-<h1>3.7.1 (2016-12-23)</h1>
-<ul class="simple">
-<li>No source changes, issued only to solve problems with the
-binary packages released for 3.7.0.</li>
-</ul>
-</div>
-<div class="section" id="id81">
-<h1>3.7.0 (2016-12-10)</h1>
-<div class="section" id="id82">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/217">GH#217</a>: <tt class="docutils literal">XMLSyntaxError</tt> now behaves more like its <tt class="docutils literal">SyntaxError</tt>
-baseclass.  Patch by Philipp A.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/216">GH#216</a>: <tt class="docutils literal">HTMLParser()</tt> now supports the same <tt class="docutils literal">collect_ids</tt> parameter
-as <tt class="docutils literal">XMLParser()</tt>.  Patch by Burak Arslan.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/210">GH#210</a>: Allow specifying a serialisation method in <tt class="docutils literal">xmlfile.write()</tt>.
-Patch by Burak Arslan.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/203">GH#203</a>: New option <tt class="docutils literal">default_doctype</tt> in <tt class="docutils literal">HTMLParser</tt> that allows
-disabling the automatic doctype creation.  Patch by Shadab Zafar.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/201">GH#201</a>: Calling the method <tt class="docutils literal"><span class="pre">.set('attrname')</span></tt> without value argument
-(or <tt class="docutils literal">None</tt>) on HTML elements creates an attribute without value that
-serialises like <tt class="docutils literal">&lt;div <span class="pre">attrname&gt;&lt;/div&gt;</span></tt>.  Patch by Daniel Holth.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/197">GH#197</a>: Ignore form input fields in <tt class="docutils literal">form_values()</tt> when they are
-marked as <tt class="docutils literal">disabled</tt> in HTML.  Patch by Kristian Klemon.</li>
-</ul>
-</div>
-<div class="section" id="id83">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/206">GH#206</a>: File name and line number were missing from XSLT error messages.
-Patch by Marcus Brinkmann.</li>
-</ul>
-</div>
-<div class="section" id="id84">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Log entries no longer allow anything but plain string objects as message text
-and file name.</li>
-<li><tt class="docutils literal">zlib</tt> is included in the list of statically built libraries.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id85">
-<h1>3.6.4 (2016-08-20)</h1>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/204">GH#204</a>, <a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1614693">LP#1614693</a>: build fix for MacOS-X.</li>
-</ul>
-</div>
-<div class="section" id="id86">
-<h1>3.6.3 (2016-08-18)</h1>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1614603">LP#1614603</a>: change linker flags to build multi-linux wheels</li>
-</ul>
-</div>
-<div class="section" id="id87">
-<h1>3.6.2 (2016-08-18)</h1>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1614603">LP#1614603</a>: release without source changes to provide cleanly built Linux wheels</li>
-</ul>
-</div>
-<div class="section" id="id89">
-<h1>3.6.1 (2016-07-24)</h1>
-<div class="section" id="id90">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/180">GH#180</a>: Separate option <tt class="docutils literal">inline_style</tt> for Cleaner that only removes <tt class="docutils literal">style</tt>
-attributes instead of all styles.  Patch by Christian Pedersen.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/196">GH#196</a>: Windows build support for Python 3.5.  Contribution by Maximilian Hils.</li>
-</ul>
-</div>
-<div class="section" id="id91">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/199">GH#199</a>: Exclude <tt class="docutils literal">file</tt> fields from <tt class="docutils literal">FormElement.form_values</tt> (as browsers do).
-Patch by Tomas Divis.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/198">GH#198</a>, <a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1568167">LP#1568167</a>: Try to provide base URL from <tt class="docutils literal">Resolver.resolve_string()</tt>.
-Patch by Michael van Tellingen.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/191">GH#191</a>: More accurate float serialisation in <tt class="docutils literal">objectify.FloatElement</tt>.
-Patch by Holger Joukl.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: Repair XSLT error logging. Patch by Marcus Brinkmann.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id93">
-<h1>3.6.0 (2016-03-17)</h1>
-<div class="section" id="id94">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/187">GH#187</a>: Now supports (only) version 5.x and later of PyPy.
-Patch by Armin Rigo.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/181">GH#181</a>: Direct support for <tt class="docutils literal">.rnc</tt> files in <cite>RelaxNG()</cite> if <tt class="docutils literal">rnc2rng</tt>
-is installed.  Patch by Dirkjan Ochtman.</li>
-</ul>
-</div>
-<div class="section" id="id95">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/189">GH#189</a>: Static builds honour FTP proxy configurations when downloading
-the external libs.  Patch by Youhei Sakurai.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/186">GH#186</a>: Soupparser failed to process entities in Python 3.x.
-Patch by Duncan Morris.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/185">GH#185</a>: Rare encoding related <tt class="docutils literal">TypeError</tt> on import was fixed.
-Patch by Petr Demin.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id96">
-<h1>3.5.0 (2015-11-13)</h1>
-<div class="section" id="id97">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Unicode string results failed XPath queries in PyPy.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1497051">LP#1497051</a>: HTML target parser failed to terminate on exceptions
-and continued parsing instead.</li>
-<li>Deprecated API usage in doctestcompare.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="b1-2015-09-18">
-<h1>3.5.0b1 (2015-09-18)</h1>
-<div class="section" id="id98">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">cleanup_namespaces()</tt> accepts a new argument <tt class="docutils literal">keep_ns_prefixes</tt>
-that does not remove definitions of the provided prefix-namespace
-mapping from the tree.</li>
-<li><tt class="docutils literal">cleanup_namespaces()</tt> accepts a new argument <tt class="docutils literal">top_nsmap</tt> that
-moves definitions of the provided prefix-namespace mapping to the
-top of the tree.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1490451">LP#1490451</a>: <tt class="docutils literal">Element</tt> objects gained a <tt class="docutils literal">cssselect()</tt> method as
-known from <tt class="docutils literal">lxml.html</tt>.  Patch by Simon Sapin.</li>
-<li>API functions and methods behave and look more like Python functions,
-which allows introspection on them etc.  One side effect to be aware of
-is that the functions now bind as methods when assigned to a class
-variable.  A quick fix is to wrap them in <tt class="docutils literal">staticmethod()</tt> (as for
-normal Python functions).</li>
-<li>ISO-Schematron support gained an option <tt class="docutils literal">error_finder</tt> that allows
-passing a filter function for picking validation errors from reports.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1243600">LP#1243600</a>: Elements in <tt class="docutils literal">lxml.html</tt> gained a <tt class="docutils literal">classes</tt> property
-that provides a set-like interface to the <tt class="docutils literal">class</tt> attribute.
-Original patch by masklinn.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1341964">LP#1341964</a>: The soupparser now handles DOCTYPE declarations, comments
-and processing instructions outside of the root element.
-Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1421512">LP#1421512</a>: The <tt class="docutils literal">docinfo</tt> of a tree was made editable to allow
-setting and removing the public ID and system ID of the DOCTYPE.
-Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1442427">LP#1442427</a>: More work-arounds for quirks and bugs in pypy and pypy3.</li>
-<li><tt class="docutils literal">lxml.html.soupparser</tt> now uses BeautifulSoup version 4 instead
-of version 3 if available.</li>
-</ul>
-</div>
-<div class="section" id="id99">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory errors that occur during tree adaptations (e.g. moving subtrees
-to foreign documents) could leave the tree in a crash prone state.</li>
-<li>Calling <tt class="docutils literal">process_children()</tt> in an XSLT extension element without
-an <tt class="docutils literal">output_parent</tt> argument failed with a <tt class="docutils literal">TypeError</tt>.
-Fix by Jens Tröger.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/162">GH#162</a>: Image data in HTML <tt class="docutils literal">data</tt> URLs is considered safe and
-no longer removed by <tt class="docutils literal">lxml.html.clean</tt> JavaScript cleaner.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/166">GH#166</a>: Static build could link libraries in wrong order.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/172">GH#172</a>: Rely a bit more on libxml2 for encoding detection rather than
-rolling our own in some cases.  Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/159">GH#159</a>: Validity checks for names and string content were tightened
-to detect the use of illegal characters early.  Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1421921">LP#1421921</a>: Comments/PIs before the DOCTYPE declaration were not
-serialised.  Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/659367">LP#659367</a>: Some HTML DOCTYPE declarations were not serialised.
-Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1238503">LP#1238503</a>: lxml.doctestcompare is now consistent with stdlib's doctest
-in how it uses <tt class="docutils literal">+</tt> and <tt class="docutils literal">-</tt> to refer to unexpected and missing output.</li>
-<li>Empty prefixes are explicitly rejected when a namespace mapping is used
-with ElementPath to avoid hiding bugs in user code.</li>
-<li>Several problems with PyPy were fixed by switching to Cython 0.23.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id100">
-<h1>3.4.4 (2015-04-25)</h1>
-<div class="section" id="id101">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>An ElementTree compatibility test added in lxml 3.4.3 that failed in
-Python 3.4+ was removed again.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id102">
-<h1>3.4.3 (2015-04-15)</h1>
-<div class="section" id="id103">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Expression cache in ElementPath was ignored.  Fix by Changaco.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1426868">LP#1426868</a>: Passing a default namespace and a prefixed namespace mapping
-as nsmap into <tt class="docutils literal">xmlfile.element()</tt> raised a <tt class="docutils literal">TypeError</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1421927">LP#1421927</a>: DOCTYPE system URLs were incorrectly quoted when containing
-double quotes.  Patch by Olli Pottonen.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1419354">LP#1419354</a>: meta-redirect URLs were incorrectly processed by
-<tt class="docutils literal">iterlinks()</tt> if preceded by whitespace.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id104">
-<h1>3.4.2 (2015-02-07)</h1>
-<div class="section" id="id105">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1415907">LP#1415907</a>: Crash when creating an XMLSchema from a non-root element
-of an XML document.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1369362">LP#1369362</a>: HTML cleaning failed when hitting processing instructions
-with pseudo-attributes.</li>
-<li><tt class="docutils literal">CDATA()</tt> wrapped content was rejected for tail text.</li>
-<li>CDATA sections were not serialised as tail text of the top-level element.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id106">
-<h1>3.4.1 (2014-11-20)</h1>
-<div class="section" id="id107">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New <tt class="docutils literal">htmlfile</tt> HTML generator to accompany the incremental <tt class="docutils literal">xmlfile</tt>
-serialisation API.  Patch by Burak Arslan.</li>
-</ul>
-</div>
-<div class="section" id="id108">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.sax.ElementTreeContentHandler</tt> did not initialise its superclass.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id109">
-<h1>3.4.0 (2014-09-10)</h1>
-<div class="section" id="id110">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">xmlfile(buffered=False)</tt> disables output buffering and flushes the
-content after each API operation (starting/ending element blocks or writes).
-A new method <tt class="docutils literal">xf.flush()</tt> can alternatively be used to explicitly flush
-the output.</li>
-<li><tt class="docutils literal">lxml.html.document_fromstring</tt> has a new option <tt class="docutils literal">ensure_head_body=True</tt>
-which will add an empty head and/or body element to the result document if
-missing.</li>
-<li><tt class="docutils literal">lxml.html.iterlinks</tt> now returns links inside meta refresh tags.</li>
-<li>New <tt class="docutils literal">XMLParser</tt> option <tt class="docutils literal">collect_ids=False</tt> to disable ID hash table
-creation.  This can substantially speed up parsing of documents with many
-different IDs that are not used.</li>
-<li>The parser uses per-document hash tables for XML IDs.  This reduces the
-load of the global parser dict and speeds up parsing for documents with
-many different IDs.</li>
-<li><tt class="docutils literal">ElementTree.getelementpath(element)</tt> returns a structural ElementPath
-expression for the given element, which can be used for lookups later.</li>
-<li><tt class="docutils literal">xmlfile()</tt> accepts a new argument <tt class="docutils literal">close=True</tt> to close file(-like)
-objects after writing to them.  Before, <tt class="docutils literal">xmlfile()</tt> only closed the file
-if it had opened it internally.</li>
-<li>Allow &quot;bytearray&quot; type for ASCII text input.</li>
-</ul>
-</div>
-<div class="section" id="id111">
-<h2>Bugs fixed</h2>
-</div>
-<div class="section" id="id112">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/400588">LP#400588</a>: decoding errors have become hard errors even in recovery mode.
-Previously, they could lead to an internal tree representation in a mixed
-encoding state, which lead to very late errors or even silently incorrect
-behaviour during tree traversal or serialisation.</li>
-<li>Requires Python 2.6, 2.7, 3.2 or later. No longer supports
-Python 2.4, 2.5 and 3.1, use lxml 3.3.x for those.</li>
-<li>Requires libxml2 2.7.0 or later and libxslt 1.1.23 or later,
-use lxml 3.3.x with older versions.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id113">
-<h1>3.3.6 (2014-08-28)</h1>
-<div class="section" id="id114">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Prevent tree cycle creation when adding Elements as siblings.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1361948">LP#1361948</a>: crash when deallocating Element siblings without parent.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1354652">LP#1354652</a>: crash when traversing internally loaded documents in XSLT
-extension functions.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id115">
-<h1>3.3.5 (2014-04-18)</h1>
-<div class="section" id="id116">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>HTML cleaning could fail to strip javascript links that mix control
-characters into the link scheme.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id117">
-<h1>3.3.4 (2014-04-03)</h1>
-<div class="section" id="id118">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Source line numbers above 65535 are available on Elements when
-using libxml2 2.9 or later.</li>
-</ul>
-</div>
-<div class="section" id="id119">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.fragment_fromstring()</tt> failed for bytes input in Py3.</li>
-</ul>
-</div>
-<div class="section" id="id120">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id121">
-<h1>3.3.3 (2014-03-04)</h1>
-<div class="section" id="id122">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1287118">LP#1287118</a>: Crash when using Element subtypes with <tt class="docutils literal">__slots__</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id123">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The internal classes <tt class="docutils literal">_LogEntry</tt> and <tt class="docutils literal">_Attrib</tt> can no longer be
-subclassed from Python code.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id124">
-<h1>3.3.2 (2014-02-26)</h1>
-<div class="section" id="id125">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The properties <tt class="docutils literal">resolvers</tt> and <tt class="docutils literal">version</tt>, as well as the methods
-<tt class="docutils literal">set_element_class_lookup()</tt> and <tt class="docutils literal">makeelement()</tt>, were lost from
-<tt class="docutils literal">iterparse</tt> objects in 3.3.0.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1222132">LP#1222132</a>: instances of <tt class="docutils literal">XMLSchema</tt>, <tt class="docutils literal">Schematron</tt> and <tt class="docutils literal">RelaxNG</tt>
-did not clear their local <tt class="docutils literal">error_log</tt> before running a validation.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1238500">LP#1238500</a>: lxml.doctestcompare mixed up &quot;expected&quot; and &quot;actual&quot; in
-attribute values.</li>
-<li>Some file I/O tests were failing in MS-Windows due to non-portable temp
-file usage.  Initial patch by Gabi Davar.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/910014">LP#910014</a>: duplicate IDs in a document were not reported by DTD validation.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1185332">LP#1185332</a>: <tt class="docutils literal"><span class="pre">tostring(method=&quot;html&quot;)</span></tt> did not use HTML serialisation
-semantics for trailing tail text.  Initial patch by Sylvain Viollon.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1281139">LP#1281139</a>: <tt class="docutils literal">.attrib</tt> value of Comments lost its mutation methods
-in 3.3.0.  Even though it is empty and immutable, it should still
-provide the same interface as that returned for Elements.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id126">
-<h1>3.3.1 (2014-02-12)</h1>
-<div class="section" id="id127">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id128">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1014290">LP#1014290</a>: HTML documents parsed with <tt class="docutils literal">parser.feed()</tt> failed to find
-elements during tag iteration.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1273709">LP#1273709</a>: Building in PyPy failed due to missing support for
-<tt class="docutils literal">PyUnicode_Compare()</tt> and <tt class="docutils literal"><span class="pre">PyByteArray_*()</span></tt> in PyPy's C-API.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1274413">LP#1274413</a>: Compilation in MSVC failed due to missing &quot;stdint.h&quot; standard
-header file.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1274118">LP#1274118</a>: iterparse() failed to parse BOM prefixed files.</li>
-</ul>
-</div>
-<div class="section" id="id129">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id130">
-<h1>3.3.0 (2014-01-26)</h1>
-<div class="section" id="id131">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id132">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The heuristic that distinguishes file paths from URLs was tightened
-to produce less false negatives.</li>
-</ul>
-</div>
-<div class="section" id="id133">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="beta5-2014-01-18">
-<h1>3.3.0beta5 (2014-01-18)</h1>
-<div class="section" id="id134">
-<h2>Features added</h2>
-<ul class="simple">
-<li>The PEP 393 unicode parsing support gained a fallback for wchar strings
-which might still be somewhat common on Windows systems.</li>
-</ul>
-</div>
-<div class="section" id="id135">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Several error handling problems were fixed throughout the code base that
-could previously lead to exceptions being silently swallowed or not
-properly reported.</li>
-<li>The C-API function <tt class="docutils literal">appendChild()</tt> is now deprecated as it does not
-propagate exceptions (its return type is <tt class="docutils literal">void</tt>).  The new function
-<tt class="docutils literal">appendChildToElement()</tt> was added as a safe replacement.</li>
-<li>Passing a string into <tt class="docutils literal">fromstringlist()</tt> raises an exception instead of
-parsing the string character by character.</li>
-</ul>
-</div>
-<div class="section" id="id136">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Document cleanup code was simplified using the new GC features in
-Cython 0.20.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta4-2014-01-12">
-<h1>3.3.0beta4 (2014-01-12)</h1>
-<div class="section" id="id137">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id138">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The (empty) value returned by the <tt class="docutils literal">attrib</tt> property of Entity and Comment
-objects was mutable.</li>
-<li>Element class lookup wasn't available for the new pull parsers or when using
-a custom parser target.</li>
-<li>Setting Element attributes on instantiation with both the <tt class="docutils literal">attrib</tt> argument
-and keyword arguments could modify the mapping passed as <tt class="docutils literal">attrib</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1266171">LP#1266171</a>: DTDs instantiated from internal/external subsets (i.e. through
-the docinfo property) lost their attribute declarations.</li>
-</ul>
-</div>
-<div class="section" id="id139">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.20pre (gitrev 012ae82eb) to prepare support for
-Python 3.4.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta3-2014-01-02">
-<h1>3.3.0beta3 (2014-01-02)</h1>
-<div class="section" id="id140">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Unicode string parsing was optimised for Python 3.3 (PEP 393).</li>
-</ul>
-</div>
-<div class="section" id="id141">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>HTML parsing of Unicode strings could misdecode the input on some platforms.</li>
-<li>Crash in xmlfile() when closing open elements out of order in an error case.</li>
-</ul>
-</div>
-<div class="section" id="id142">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="beta2-2013-12-20">
-<h1>3.3.0beta2 (2013-12-20)</h1>
-<div class="section" id="id143">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">iterparse()</tt> supports the <tt class="docutils literal">recover</tt> option.</li>
-</ul>
-</div>
-<div class="section" id="id144">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in <tt class="docutils literal">iterparse()</tt> for HTML parsing.</li>
-<li>Crash in target parsing with attributes.</li>
-</ul>
-</div>
-<div class="section" id="id145">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The safety check in the read-only tree implementation (e.g. used by
-<tt class="docutils literal">PythonElementClassLookup</tt>) raises a more appropriate <tt class="docutils literal">ReferenceError</tt>
-for illegal access after tree disposal instead of an <tt class="docutils literal">AssertionError</tt>.
-This should only impact test code that specifically checks the original
-behaviour.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2013-12-12">
-<h1>3.3.0beta1 (2013-12-12)</h1>
-<div class="section" id="id146">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New option <tt class="docutils literal">handle_failures</tt> in <tt class="docutils literal">make_links_absolute()</tt> and
-<tt class="docutils literal">resolve_base_href()</tt> (lxml.html) that enables ignoring or
-discarding links that fail to parse as URLs.</li>
-<li>New parser classes <tt class="docutils literal">XMLPullParser</tt> and <tt class="docutils literal">HTMLPullParser</tt> for
-incremental parsing, as implemented for ElementTree in Python 3.4.</li>
-<li><tt class="docutils literal">iterparse()</tt> enables recovery mode by default for HTML parsing
-(<tt class="docutils literal">html=True</tt>).</li>
-</ul>
-</div>
-<div class="section" id="id147">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1255132">LP#1255132</a>: crash when trying to run validation over non-Element (e.g.
-comment or PI).</li>
-<li>Error messages in the log and in exception messages that originated
-from libxml2 could accidentally be picked up from preceding warnings
-instead of the actual error.</li>
-<li>The <tt class="docutils literal">ElementMaker</tt> in lxml.objectify did not accept a dict as
-argument for adding attributes to the element it's building. This
-works as in lxml.builder now.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1228881">LP#1228881</a>: <tt class="docutils literal">repr(XSLTAccessControl)</tt> failed in Python 3.</li>
-<li>Raise <tt class="docutils literal">ValueError</tt> when trying to append an Element to itself or
-to one of its own descendants, instead of running into an infinite
-loop.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1206077">LP#1206077</a>: htmldiff discarded whitespace from the output.</li>
-<li>Compressed plain-text serialisation to file-like objects was broken.</li>
-<li>lxml.html.formfill: Fix textarea form filling.
-The textarea used to be cleared before the new content was set,
-which removed the name attribute.</li>
-</ul>
-</div>
-<div class="section" id="id148">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Some basic API classes use freelists internally for faster
-instantiation.  This can speed up some <tt class="docutils literal">iterparse()</tt> scenarios,
-for example.</li>
-<li><tt class="docutils literal">iterparse()</tt> was rewritten to use the new <tt class="docutils literal">*PullParser</tt>
-classes internally instead of being a parser itself.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id149">
-<h1>3.2.5 (2014-01-02)</h1>
-<div class="section" id="id150">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id151">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in xmlfile() when closing open elements out of order in an error case.</li>
-<li>Crash in target parsing with attributes.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1255132">LP#1255132</a>: crash when trying to run validation over non-Element (e.g.
-comment or PI).</li>
-</ul>
-</div>
-<div class="section" id="id153">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id154">
-<h1>3.2.4 (2013-11-07)</h1>
-<div class="section" id="id155">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id156">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory leak when creating an XPath evaluator in a thread.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1228881">LP#1228881</a>: <tt class="docutils literal">repr(XSLTAccessControl)</tt> failed in Python 3.</li>
-<li>Raise <tt class="docutils literal">ValueError</tt> when trying to append an Element to itself or
-to one of its own descendants.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1206077">LP#1206077</a>: htmldiff discarded whitespace from the output.</li>
-<li>Compressed plain-text serialisation to file-like objects was broken.</li>
-</ul>
-</div>
-<div class="section" id="id159">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id160">
-<h1>3.2.3 (2013-07-28)</h1>
-<div class="section" id="id161">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fix support for Python 2.4 which was lost in 3.2.2.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id162">
-<h1>3.2.2 (2013-07-28)</h1>
-<div class="section" id="id163">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id164">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1185701">LP#1185701</a>: spurious XMLSyntaxError after finishing iterparse().</li>
-<li>Crash in lxml.objectify during xsi annotation.</li>
-</ul>
-</div>
-<div class="section" id="id165">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Return values of user provided element class lookup methods are now
-validated against the type of the XML node they represent to prevent
-API class mismatches.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id166">
-<h1>3.2.1 (2013-05-11)</h1>
-<div class="section" id="id167">
-<h2>Features added</h2>
-<ul class="simple">
-<li>The methods <tt class="docutils literal">apply_templates()</tt> and <tt class="docutils literal">process_children()</tt> of XSLT
-extension elements have gained two new boolean options <tt class="docutils literal">elements_only</tt>
-and <tt class="docutils literal">remove_blank_text</tt> that discard either all strings or whitespace-only
-strings from the result list.</li>
-</ul>
-</div>
-<div class="section" id="id168">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When moving Elements to another tree, the namespace cleanup mechanism
-no longer drops namespace prefixes from attributes for which it finds
-a default namespace declaration, to prevent them from appearing as
-unnamespaced attributes after serialisation.</li>
-<li>Returning non-type objects from a custom class lookup method could lead
-to a crash.</li>
-<li>Instantiating and using subtypes of Comments and ProcessingInstructions
-crashed.</li>
-</ul>
-</div>
-<div class="section" id="id169">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id170">
-<h1>3.2.0 (2013-04-28)</h1>
-<div class="section" id="id171">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id172">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/690319">LP#690319</a>: Leading whitespace could change the behaviour of the string
-parsing functions in <tt class="docutils literal">lxml.html</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/599318">LP#599318</a>: The string parsing functions in <tt class="docutils literal">lxml.html</tt> are more robust
-in the face of uncommon HTML content like framesets or missing body tags.
-Patch by Stefan Seelmann.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/712941">LP#712941</a>: I/O errors while trying to access files with paths that contain
-non-ASCII characters could raise <tt class="docutils literal">UnicodeDecodeError</tt> instead of properly
-reporting the <tt class="docutils literal">IOError</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/673205">LP#673205</a>: Parsing from in-memory strings disabled network access in the
-default parser and made subsequent attempts to parse from a URL fail.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/971754">LP#971754</a>: lxml.html.clean appends 'nofollow' to 'rel' attributes instead
-of overwriting the current value.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/715687">LP#715687</a>: lxml.html.clean no longer discards scripts that are explicitly
-allowed by the user provided whitelist.  Patch by Christine Koppelt.</li>
-</ul>
-</div>
-<div class="section" id="id173">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id174">
-<h1>3.1.2 (2013-04-12)</h1>
-<div class="section" id="id175">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id176">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1136509">LP#1136509</a>: Passing attributes through the namespace-unaware API of
-the sax bridge (i.e. the <tt class="docutils literal">handler.startElement()</tt> method) failed
-with a <tt class="docutils literal">TypeError</tt>.  Patch by Mike Bayer.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1123074">LP#1123074</a>: Fix serialisation error in XSLT output when converting
-the result tree to a Unicode string.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/105">GH#105</a>: Replace illegal usage of <tt class="docutils literal">xmlBufLength()</tt> in libxml2 2.9.0
-by properly exported API function <tt class="docutils literal">xmlBufUse()</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id177">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id178">
-<h1>3.1.1 (2013-03-29)</h1>
-<div class="section" id="id179">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id180">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1160386">LP#1160386</a>: Write access to <tt class="docutils literal">lxml.html.FormElement.fields</tt> raised
-an AttributeError in Py3.</li>
-<li>Illegal memory access during cleanup in incremental xmlfile writer.</li>
-</ul>
-</div>
-<div class="section" id="id181">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The externally useless class <tt class="docutils literal">lxml.etree._BaseParser</tt> was removed
-from the module dict.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id182">
-<h1>3.1.0 (2013-02-10)</h1>
-<div class="section" id="id183">
-<h2>Features added</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/89">GH#89</a>: lxml.html.clean allows overriding the set of attributes that it
-considers 'safe'.  Patch by Francis Devereux.</li>
-</ul>
-</div>
-<div class="section" id="id184">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1104370">LP#1104370</a>: <tt class="docutils literal">copy.copy(el.attrib)</tt> raised an exception.  It now returns
-a copy of the attributes as a plain Python dict.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/95">GH#95</a>: When used with namespace prefixes, the  <tt class="docutils literal"><span class="pre">el.find*()</span></tt> methods
-always used the first namespace mapping that was provided for each
-path expression instead of using the one that was actually passed
-in for the current run.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1092521">LP#1092521</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/91">GH#91</a>: Fix undefined C symbol in Python runtimes compiled
-without threading support.  Patch by Ulrich Seidl.</li>
-</ul>
-</div>
-<div class="section" id="id185">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="beta1-2012-12-21">
-<h1>3.1beta1 (2012-12-21)</h1>
-<div class="section" id="id186">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New build-time option <tt class="docutils literal"><span class="pre">--with-unicode-strings</span></tt> for Python 2 that
-makes the API always return Unicode strings for names and text
-instead of byte strings for plain ASCII content.</li>
-<li>New incremental XML file writing API <tt class="docutils literal">etree.xmlfile()</tt>.</li>
-<li>E factory in lxml.objectify is callable to simplify the creation of
-tags with non-identifier names without having to resort to getattr().</li>
-</ul>
-</div>
-<div class="section" id="id187">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When starting from a non-namespaced element in lxml.objectify, searching
-for a child without explicitly specifying a namespace incorrectly found
-namespaced elements with the requested local name, instead of restricting
-the search to non-namespaced children.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/85">GH#85</a>: Deprecation warnings were fixed for Python 3.x.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/33">GH#33</a>: lxml.html.fromstring() failed to accept bytes input in Py3.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1080792">LP#1080792</a>: Static build of libxml2 2.9.0 failed due to missing file.</li>
-</ul>
-</div>
-<div class="section" id="id188">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The externally useless class <tt class="docutils literal">_ObjectifyElementMakerCaller</tt> was
-removed from the module API of lxml.objectify.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1075622">LP#1075622</a>: lxml.builder is faster for adding text to elements with
-many children.  Patch by Anders Hammarquist.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id189">
-<h1>3.0.2 (2012-12-14)</h1>
-<div class="section" id="id190">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id191">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fix crash during interpreter shutdown by switching to Cython 0.17.3 for building.</li>
-</ul>
-</div>
-<div class="section" id="id192">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id193">
-<h1>3.0.1 (2012-10-14)</h1>
-<div class="section" id="id194">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id195">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1065924">LP#1065924</a>: Element proxies could disappear during garbage collection
-in PyPy without proper cleanup.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/71">GH#71</a>: Failure to work with libxml2 2.6.x.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1065139">LP#1065139</a>: static MacOS-X build failed in Py3.</li>
-</ul>
-</div>
-<div class="section" id="id196">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id197">
-<h1>3.0 (2012-10-08)</h1>
-<div class="section" id="id198">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id199">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>End-of-file handling was incorrect in iterparse() when reading from
-a low-level C file stream and failed in libxml2 2.9.0 due to its
-improved consistency checks.</li>
-</ul>
-</div>
-<div class="section" id="id200">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The build no longer uses Cython by default unless the generated C files
-are missing.  To use Cython, pass the option &quot;--with-cython&quot;.  To ignore
-the fatal build error when Cython is required but not available (e.g. to
-run special setup.py commands that do not actually run a build), pass
-&quot;--without-cython&quot;.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2012-09-26">
-<h1>3.0beta1 (2012-09-26)</h1>
-<div class="section" id="id201">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Python level access to (optional) libxml2 memory debugging features
-to simplify debugging of memory leaks etc.</li>
-</ul>
-</div>
-<div class="section" id="id202">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fix a memory leak in XPath by switching to Cython 0.17.1.</li>
-<li>Some tests were adapted to work with PyPy.</li>
-</ul>
-</div>
-<div class="section" id="id203">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The code was adapted to work with the upcoming libxml2 2.9.0 release.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="alpha2-2012-08-23">
-<h1>3.0alpha2 (2012-08-23)</h1>
-<div class="section" id="id204">
-<h2>Features added</h2>
-<ul class="simple">
-<li>The <tt class="docutils literal">.iter()</tt> method of elements now accepts <tt class="docutils literal">tag</tt> arguments like
-<tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt> to search for elements with a given local name in any
-namespace. With this addition, all combinations of wildcards now work
-as expected:
-<tt class="docutils literal">&quot;{ns}name&quot;</tt>, <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{ns}*&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{}*&quot;</span></tt>
-and <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.  Note that <tt class="docutils literal">&quot;name&quot;</tt> is equivalent to <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>,
-but <tt class="docutils literal">&quot;*&quot;</tt> is <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.
-The same change applies to the <tt class="docutils literal">.getiterator()</tt>, <tt class="docutils literal">.itersiblings()</tt>,
-<tt class="docutils literal">.iterancestors()</tt>, <tt class="docutils literal">.iterdescendants()</tt>, <tt class="docutils literal">.iterchildren()</tt>
-and <tt class="docutils literal">.itertext()</tt> methods;the <tt class="docutils literal">strip_attributes()</tt>,
-<tt class="docutils literal">strip_elements()</tt> and <tt class="docutils literal">strip_tags()</tt> functions as well as the
-<tt class="docutils literal">iterparse()</tt> class.  Patch by Simon Sapin.</li>
-<li>C14N allows specifying the inclusive prefixes to be promoted
-to top-level during exclusive serialisation.</li>
-</ul>
-</div>
-<div class="section" id="id205">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Passing long Unicode strings into the <tt class="docutils literal">feed()</tt> parser interface
-failed to read the entire string.</li>
-</ul>
-</div>
-<div class="section" id="id206">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="alpha1-2012-07-31">
-<h1>3.0alpha1 (2012-07-31)</h1>
-<div class="section" id="id207">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Initial support for building in PyPy (through cpyext).</li>
-<li>DTD objects gained an API that allows read access to their
-declarations.</li>
-<li><tt class="docutils literal">xpathgrep.py</tt> gained support for parsing line-by-line (e.g.
-from grep output) and for surrounding the output with a new root
-tag.</li>
-<li><tt class="docutils literal"><span class="pre">E-factory</span></tt> in <tt class="docutils literal">lxml.builder</tt> accepts subtypes of known data
-types (such as string subtypes) when building elements around them.</li>
-<li>Tree iteration and <tt class="docutils literal">iterparse()</tt> with a selective <tt class="docutils literal">tag</tt>
-argument supports passing a set of tags.  Tree nodes will be
-returned by the iterators if they match any of the tags.</li>
-</ul>
-</div>
-<div class="section" id="id208">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods in <tt class="docutils literal">lxml.objectify</tt> no longer use XPath
-internally, which makes them faster in many cases (especially when
-short circuiting after a single or couple of elements) and fixes
-some behavioural differences compared to <tt class="docutils literal">lxml.etree</tt>.  Note that
-this means that they no longer support arbitrary XPath expressions
-but only the subset that the <tt class="docutils literal">ElementPath</tt> language supports.
-The previous implementation was also redundant with the normal
-XPath support, which can be used as a replacement.</li>
-<li><tt class="docutils literal"><span class="pre">el.find('*')</span></tt> could accidentally return a comment or processing
-instruction that happened to be in the wrong spot.  (Same for the
-other <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods.)</li>
-<li>The error logging is less intrusive and avoids a global setup where
-possible.</li>
-<li>Fixed undefined names in html5lib parser.</li>
-<li><tt class="docutils literal">xpathgrep.py</tt> did not work in Python 3.</li>
-<li><tt class="docutils literal">Element.attrib.update()</tt> did not accept an <tt class="docutils literal">attrib</tt> of
-another Element as parameter.</li>
-<li>For subtypes of <tt class="docutils literal">ElementBase</tt> that make the <tt class="docutils literal">.text</tt> or <tt class="docutils literal">.tail</tt>
-properties immutable (as in objectify, for example), inserting text
-when creating Elements through the E-Factory feature of the class
-constructor would fail with an exception, stating that the text
-cannot be modified.</li>
-</ul>
-</div>
-<div class="section" id="id209">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The code base was overhauled to properly use 'const' where the API
-of libxml2 and libxslt requests it.  This also has an impact on the
-public C-API of lxml itself, as defined in <tt class="docutils literal">etreepublic.pxd</tt>, as
-well as the provided declarations in the <tt class="docutils literal">lxml/includes/</tt> directory.
-Code that uses these declarations may have to be adapted.  On the
-plus side, this fixes several C compiler warnings, also for user
-code, thus making it easier to spot real problems again.</li>
-<li>The functionality of &quot;lxml.cssselect&quot; was moved into a separate PyPI
-package called &quot;cssselect&quot;.  To continue using it, you must install
-that package separately.  The &quot;lxml.cssselect&quot; module is still
-available and provides the same interface, provided the &quot;cssselect&quot;
-package can be imported at runtime.</li>
-<li>Element attributes passed in as an <tt class="docutils literal">attrib</tt> dict or as keyword
-arguments are now sorted by (namespaced) name before being created
-to make their order predictable for serialisation and iteration.
-Note that adding or deleting attributes afterwards does not take
-that order into account, i.e. setting a new attribute appends it
-after the existing ones.</li>
-<li>Several classes that are for internal use only were removed
-from the <tt class="docutils literal">lxml.etree</tt> module dict:
-<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ResolverContext, _BaseContext,
-_ExsltRegExp, _IterparseContext, _TempStore, _ExceptionContext,
-__ContentOnlyElement, _AttribIterator, _NamespaceRegistry,
-_ClassNamespaceRegistry, _FunctionNamespaceRegistry,
-_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
-_FileReaderContext, _ParserContext, _PythonSaxParserTarget,
-_TargetParserContext, _ReadOnlyProxy, _ReadOnlyPIProxy,
-_ReadOnlyEntityProxy, _ReadOnlyElementProxy, _OpaqueNodeWrapper,
-_OpaqueDocumentWrapper, _ModifyContentOnlyProxy,
-_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
-_AppendOnlyElementProxy, _SaxParserContext, _FilelikeWriter,
-_ParserSchemaValidationContext, _XPathContext,
-_XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam</tt></li>
-<li>Several internal classes can no longer be inherited from:
-<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ExsltRegExp, _ElementUnicodeResult,
-_IterparseContext, _TempStore, _AttribIterator, _ClassNamespaceRegistry,
-_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
-_FileReaderContext, _PythonSaxParserTarget, _TargetParserContext,
-_ReadOnlyPIProxy, _ReadOnlyEntityProxy, _OpaqueDocumentWrapper,
-_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
-_AppendOnlyElementProxy, _FilelikeWriter, _ParserSchemaValidationContext,
-_XPathContext, _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam,
-_XSLTResultTree, _XSLTProcessingInstruction</tt></li>
-</ul>
-</div>
-</div>
-<div class="section" id="id210">
-<h1>2.3.6 (2012-09-28)</h1>
-<div class="section" id="id211">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id212">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Passing long Unicode strings into the <tt class="docutils literal">feed()</tt> parser interface
-failed to read the entire string.</li>
-</ul>
-</div>
-<div class="section" id="id213">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id214">
-<h1>2.3.5 (2012-07-31)</h1>
-<div class="section" id="id215">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id216">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when merging text nodes in <tt class="docutils literal">element.remove()</tt>.</li>
-<li>Crash in sax/target parser when reporting empty doctype.</li>
-</ul>
-</div>
-<div class="section" id="id217">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id218">
-<h1>2.3.4 (2012-03-26)</h1>
-<div class="section" id="id219">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id220">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when building an nsmap (Element property) with empty
-namespace URIs.</li>
-<li>Crash due to race condition when errors (or user messages) occur
-during threaded XSLT processing.</li>
-<li>XSLT stylesheet compilation could ignore compilation errors.</li>
-</ul>
-</div>
-<div class="section" id="id221">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id222">
-<h1>2.3.3 (2012-01-04)</h1>
-<div class="section" id="id223">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.tostring()</tt> gained new serialisation options
-<tt class="docutils literal">with_tail</tt> and <tt class="docutils literal">doctype</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id224">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fixed a crash when using <tt class="docutils literal">iterparse()</tt> for HTML parsing and
-requesting start events.</li>
-<li>Fixed parsing of more selectors in cssselect.  Whitespace before
-pseudo-elements and pseudo-classes is significant as it is a
-descendant combinator.
-&quot;E :pseudo&quot; should parse the same as &quot;E *:pseudo&quot;, not &quot;E:pseudo&quot;.
-Patch by Simon Sapin.</li>
-<li>lxml.html.diff no longer raises an exception when hitting
-'img' tags without 'src' attribute.</li>
-</ul>
-</div>
-<div class="section" id="id225">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id226">
-<h1>2.3.2 (2011-11-11)</h1>
-<div class="section" id="id227">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.objectify.deannotate()</tt> has a new boolean option
-<tt class="docutils literal">cleanup_namespaces</tt> to remove the objectify namespace
-declarations (and generally clean up the namespace declarations)
-after removing the type annotations.</li>
-<li><tt class="docutils literal">lxml.objectify</tt> gained its own <tt class="docutils literal">SubElement()</tt> function as a
-copy of <tt class="docutils literal">etree.SubElement</tt> to avoid an otherwise redundant import
-of <tt class="docutils literal">lxml.etree</tt> on the user side.</li>
-</ul>
-</div>
-<div class="section" id="id228">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fixed the &quot;descendant&quot; bug in cssselect a second time (after a first
-fix in lxml 2.3.1).  The previous change resulted in a serious
-performance regression for the XPath based evaluation of the
-translated expression.  Note that this breaks the usage of some of
-the generated XPath expressions as XSLT location paths that
-previously worked in 2.3.1.</li>
-<li>Fixed parsing of some selectors in cssselect. Whitespace after combinators
-&quot;&gt;&quot;, &quot;+&quot; and &quot;~&quot; is now correctly ignored. Previously it was parsed as
-a descendant combinator. For example, &quot;div&gt; .foo&quot; was parsed the same as
-&quot;div&gt;* .foo&quot; instead of &quot;div&gt;.foo&quot;. Patch by Simon Sapin.</li>
-</ul>
-</div>
-<div class="section" id="id229">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id230">
-<h1>2.3.1 (2011-09-25)</h1>
-<div class="section" id="id231">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New option <tt class="docutils literal">kill_tags</tt> in <tt class="docutils literal">lxml.html.clean</tt> to remove specific
-tags and their content (i.e. their whole subtree).</li>
-<li><tt class="docutils literal">pi.get()</tt> and <tt class="docutils literal">pi.attrib</tt> on processing instructions to parse
-pseudo-attributes from the text content of processing instructions.</li>
-<li><tt class="docutils literal">lxml.get_include()</tt> returns a list of include paths that can be
-used to compile external C code against lxml.etree.  This is
-specifically required for statically linked lxml builds when code
-needs to compile against the exact same header file versions as lxml
-itself.</li>
-<li><tt class="docutils literal">Resolver.resolve_file()</tt> takes an additional option
-<tt class="docutils literal">close_file</tt> that configures if the file(-like) object will be
-closed after reading or not.  By default, the file will be closed,
-as the user is not expected to keep a reference to it.</li>
-</ul>
-</div>
-<div class="section" id="id232">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>HTML cleaning didn't remove 'data:' links.</li>
-<li>The html5lib parser integration now uses the 'official'
-implementation in html5lib itself, which makes it work with newer
-releases of the library.</li>
-<li>In <tt class="docutils literal">lxml.sax</tt>, <tt class="docutils literal">endElementNS()</tt> could incorrectly reject a plain
-tag name when the corresponding start event inferred the same plain
-tag name to be in the default namespace.</li>
-<li>When an open file-like object is passed into <tt class="docutils literal">parse()</tt> or
-<tt class="docutils literal">iterparse()</tt>, the parser will no longer close it after use.  This
-reverts a change in lxml 2.3 where all files would be closed.  It is
-the users responsibility to properly close the file(-like) object,
-also in error cases.</li>
-<li>Assertion error in lxml.html.cleaner when discarding top-level elements.</li>
-<li>In lxml.cssselect, use the xpath 'A//B' (short for
-'A/descendant-or-self::node()/B') instead of 'A/descendant::B' for
-the css descendant selector ('A B').  This makes a few edge cases
-like <tt class="docutils literal">&quot;div <span class="pre">*:last-child&quot;</span></tt> consistent with the selector behavior in
-WebKit and Firefox, and makes more css expressions valid location
-paths (for use in xsl:template match).</li>
-<li>In lxml.html, non-selected <tt class="docutils literal">&lt;option&gt;</tt> tags no longer show up in the
-collected form values.</li>
-<li>Adding/removing <tt class="docutils literal">&lt;option&gt;</tt> values to/from a multiple select form
-field properly selects them and unselects them.</li>
-</ul>
-</div>
-<div class="section" id="id233">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Static builds can specify the download directory with the
-<tt class="docutils literal"><span class="pre">--download-dir</span></tt> option.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id234">
-<h1>2.3 (2011-02-06)</h1>
-<div class="section" id="id235">
-<h2>Features added</h2>
-<ul class="simple">
-<li>When looking for children, <tt class="docutils literal">lxml.objectify</tt> takes '{}tag' as
-meaning an empty namespace, as opposed to the parent namespace.</li>
-</ul>
-</div>
-<div class="section" id="id236">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When finished reading from a file-like object, the parser
-immediately calls its <tt class="docutils literal">.close()</tt> method.</li>
-<li>When finished parsing, <tt class="docutils literal">iterparse()</tt> immediately closes the input
-file.</li>
-<li>Work-around for libxml2 bug that can leave the HTML parser in a
-non-functional state after parsing a severely broken document (fixed
-in libxml2 2.7.8).</li>
-<li><tt class="docutils literal">marque</tt> tag in HTML cleanup code is correctly named <tt class="docutils literal">marquee</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id237">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Some public functions in the Cython-level C-API have more explicit
-return types.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2010-09-06">
-<h1>2.3beta1 (2010-09-06)</h1>
-<div class="section" id="id238">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id239">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in newer libxml2 versions when moving elements between
-documents that had attributes on replaced XInclude nodes.</li>
-<li><tt class="docutils literal">XMLID()</tt> function was missing the optional <tt class="docutils literal">parser</tt> and
-<tt class="docutils literal">base_url</tt> parameters.</li>
-<li>Searching for wildcard tags in <tt class="docutils literal">iterparse()</tt> was broken in Py3.</li>
-<li><tt class="docutils literal">lxml.html.open_in_browser()</tt> didn't work in Python 3 due to the
-use of os.tempnam.  It now takes an optional 'encoding' parameter.</li>
-</ul>
-</div>
-<div class="section" id="id240">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="alpha2-2010-07-24">
-<h1>2.3alpha2 (2010-07-24)</h1>
-<div class="section" id="id241">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id242">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in XSLT when generating text-only result documents with a
-stylesheet created in a different thread.</li>
-</ul>
-</div>
-<div class="section" id="id243">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><tt class="docutils literal">repr()</tt> of Element objects shows the hex ID with leading 0x
-(following ElementTree 1.3).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="alpha1-2010-06-19">
-<h1>2.3alpha1 (2010-06-19)</h1>
-<div class="section" id="id244">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Keyword argument <tt class="docutils literal">namespaces</tt> in <tt class="docutils literal">lxml.cssselect.CSSSelector()</tt>
-to pass a prefix-to-namespace mapping for the selector.</li>
-<li>New function <tt class="docutils literal">lxml.etree.register_namespace(prefix, uri)</tt> that
-globally registers a namespace prefix for a namespace that newly
-created Elements in that namespace will use automatically.  Follows
-ElementTree 1.3.</li>
-<li>Support 'unicode' string name as encoding parameter in
-<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
-<li>Support 'c14n' serialisation method in <tt class="docutils literal">ElementTree.write()</tt> and
-<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
-<li>The ElementPath expression syntax (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) was extended to
-match the upcoming ElementTree 1.3 that will ship in the standard
-library of Python 3.2/2.7.  This includes extended support for
-predicates as well as namespace prefixes (as known from XPath).</li>
-<li>During regular XPath evaluation, various ESXLT functions are
-available within their namespace when using libxslt 1.1.26 or later.</li>
-<li>Support passing a readily configured logger instance into
-<tt class="docutils literal">PyErrorLog</tt>, instead of a logger name.</li>
-<li>On serialisation, the new <tt class="docutils literal">doctype</tt> parameter can be used to
-override the DOCTYPE (internal subset) of the document.</li>
-<li>New parameter <tt class="docutils literal">output_parent</tt> to <tt class="docutils literal">XSLTExtension.apply_templates()</tt>
-to append the resulting content directly to an output element.</li>
-<li><tt class="docutils literal">XSLTExtension.process_children()</tt> to process the content of the
-XSLT extension element itself.</li>
-<li>ISO-Schematron support based on the de-facto Schematron reference
-'skeleton implementation'.</li>
-<li>XSLT objects now take XPath object as <tt class="docutils literal">__call__</tt> stylesheet
-parameters.</li>
-<li>Enable path caching in ElementPath (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) to avoid parsing
-overhead.</li>
-<li>Setting the value of a namespaced attribute always uses a prefixed
-namespace instead of the default namespace even if both declare the
-same namespace URI.  This avoids serialisation problems when an
-attribute from a default namespace is set on an element from a
-different namespace.</li>
-<li>XSLT extension elements: support for XSLT context nodes other than
-elements: document root, comments, processing instructions.</li>
-<li>Support for strings (in addition to Elements) in node-sets returned
-by extension functions.</li>
-<li>Forms that lack an <tt class="docutils literal">action</tt> attribute default to the base URL of
-the document on submit.</li>
-<li>XPath attribute result strings have an <tt class="docutils literal">attrname</tt> property.</li>
-<li>Namespace URIs get validated against RFC 3986 at the API level
-(required by the XML namespace specification).</li>
-<li>Target parsers show their target object in the <tt class="docutils literal">.target</tt> property
-(compatible with ElementTree).</li>
-</ul>
-</div>
-<div class="section" id="id245">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>API is hardened against invalid proxy instances to prevent crashes
-due to incorrectly instantiated Element instances.</li>
-<li>Prevent crash when instantiating <tt class="docutils literal">CommentBase</tt> and friends.</li>
-<li>Export ElementTree compatible XML parser class as
-<tt class="docutils literal">XMLTreeBuilder</tt>, as it is called in ET 1.2.</li>
-<li>ObjectifiedDataElements in lxml.objectify were not hashable.  They
-now use the hash value of the underlying Python value (string,
-number, etc.) to which they compare equal.</li>
-<li>Parsing broken fragments in lxml.html could fail if the fragment
-contained an orphaned closing '&lt;/div&gt;' tag.</li>
-<li>Using XSLT extension elements around the root of the output document
-crashed.</li>
-<li><tt class="docutils literal">lxml.cssselect</tt> did not distinguish between <tt class="docutils literal"><span class="pre">x[attr=&quot;val&quot;]</span></tt> and
-<tt class="docutils literal">x <span class="pre">[attr=&quot;val&quot;]</span></tt> (with a space).  The latter now matches the
-attribute independent of the element.</li>
-<li>Rewriting multiple links inside of HTML text content could end up
-replacing unrelated content as replacements could impact the
-reported position of subsequent matches.  Modifications are now
-simplified by letting the <tt class="docutils literal">iterlinks()</tt> generator in <tt class="docutils literal">lxml.html</tt>
-return links in reversed order if they appear inside the same text
-node.  Thus, replacements and link-internal modifications no longer
-change the position of links reported afterwards.</li>
-<li>The <tt class="docutils literal">.value</tt> attribute of <tt class="docutils literal">textarea</tt> elements in lxml.html did
-not represent the complete raw value (including child tags etc.). It
-now serialises the complete content on read and replaces the
-complete content by a string on write.</li>
-<li>Target parser didn't call <tt class="docutils literal">.close()</tt> on the target object if
-parsing failed.  Now it is guaranteed that <tt class="docutils literal">.close()</tt> will be
-called after parsing, regardless of the outcome.</li>
-</ul>
-</div>
-<div class="section" id="id246">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Official support for Python 3.1.2 and later.</li>
-<li>Static MS Windows builds can now download their dependencies
-themselves.</li>
-<li><tt class="docutils literal">Element.attrib</tt> no longer uses a cyclic reference back to its
-Element object.  It therefore no longer requires the garbage
-collector to clean up.</li>
-<li>Static builds include libiconv, in addition to libxml2 and libxslt.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id247">
-<h1>2.2.8 (2010-09-02)</h1>
-<div class="section" id="id248">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in newer libxml2 versions when moving elements between
-documents that had attributes on replaced XInclude nodes.</li>
-<li>Import fix for urljoin in Python 3.1+.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id249">
-<h1>2.2.7 (2010-07-24)</h1>
-<div class="section" id="id250">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in XSLT when generating text-only result documents with a
-stylesheet created in a different thread.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id251">
-<h1>2.2.6 (2010-03-02)</h1>
-<div class="section" id="id252">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fixed several Python 3 regressions by building with Cython 0.11.3.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id253">
-<h1>2.2.5 (2010-02-28)</h1>
-<div class="section" id="id254">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for running XSLT extension elements on the input root node
-(e.g. in a template matching on &quot;/&quot;).</li>
-</ul>
-</div>
-<div class="section" id="id255">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in XPath evaluation when reading smart strings from a document
-other than the original context document.</li>
-<li>Support recent versions of html5lib by not requiring its
-<tt class="docutils literal">XHTMLParser</tt> in <tt class="docutils literal">htmlparser.py</tt> anymore.</li>
-<li>Manually instantiating the custom element classes in
-<tt class="docutils literal">lxml.objectify</tt> could crash.</li>
-<li>Invalid XML text characters were not rejected by the API when they
-appeared in unicode strings directly after non-ASCII characters.</li>
-<li>lxml.html.open_http_urllib() did not work in Python 3.</li>
-<li>The functions <tt class="docutils literal">strip_tags()</tt> and <tt class="docutils literal">strip_elements()</tt> in
-<tt class="docutils literal">lxml.etree</tt> did not remove all occurrences of a tag in all cases.</li>
-<li>Crash in XSLT extension elements when the XSLT context node is not
-an element.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id256">
-<h1>2.2.4 (2009-11-11)</h1>
-<div class="section" id="id257">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Static build of libxml2/libxslt was broken.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id258">
-<h1>2.2.3 (2009-10-30)</h1>
-<div class="section" id="id259">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id260">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The <tt class="docutils literal">resolve_entities</tt> option did not work in the incremental feed
-parser.</li>
-<li>Looking up and deleting attributes without a namespace could hit a
-namespaced attribute of the same name instead.</li>
-<li>Late errors during calls to <tt class="docutils literal">SubElement()</tt> (e.g. attribute related
-ones) could leave a partially initialised element in the tree.</li>
-<li>Modifying trees that contain parsed entity references could result
-in an infinite loop.</li>
-<li>ObjectifiedElement.__setattr__ created an empty-string child element when the
-attribute value was rejected as a non-unicode/non-ascii string</li>
-<li>Syntax errors in <tt class="docutils literal">lxml.cssselect</tt> could result in misleading error
-messages.</li>
-<li>Invalid syntax in CSS expressions could lead to an infinite loop in
-the parser of <tt class="docutils literal">lxml.cssselect</tt>.</li>
-<li>CSS special character escapes were not properly handled in
-<tt class="docutils literal">lxml.cssselect</tt>.</li>
-<li>CSS Unicode escapes were not properly decoded in <tt class="docutils literal">lxml.cssselect</tt>.</li>
-<li>Select options in HTML forms that had no explicit <tt class="docutils literal">value</tt>
-attribute were not handled correctly.  The HTML standard dictates
-that their value is defined by their text content.  This is now
-supported by lxml.html.</li>
-<li>XPath raised a TypeError when finding CDATA sections.  This is now
-fully supported.</li>
-<li>Calling <tt class="docutils literal">help(lxml.objectify)</tt> didn't work at the prompt.</li>
-<li>The <tt class="docutils literal">ElementMaker</tt> in lxml.objectify no longer defines the default
-namespaces when annotation is disabled.</li>
-<li>Feed parser failed to honour the 'recover' option on parse errors.</li>
-<li>Diverting the error logging to Python's logging system was broken.</li>
-</ul>
-</div>
-<div class="section" id="id261">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id262">
-<h1>2.2.2 (2009-06-21)</h1>
-<div class="section" id="id263">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New helper functions <tt class="docutils literal">strip_attributes()</tt>, <tt class="docutils literal">strip_elements()</tt>,
-<tt class="docutils literal">strip_tags()</tt> in lxml.etree to remove attributes/subtrees/tags
-from a subtree.</li>
-</ul>
-</div>
-<div class="section" id="id264">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Namespace cleanup on subtree insertions could result in missing
-namespace declarations (and potentially crashes) if the element
-defining a namespace was deleted and the namespace was not used by
-the top element of the inserted subtree but only in deeper subtrees.</li>
-<li>Raising an exception from a parser target callback didn't always
-terminate the parser.</li>
-<li>Only {true, false, 1, 0} are accepted as the lexical representation for
-BoolElement ({True, False, T, F, t, f} not any more), restoring lxml &lt;= 2.0
-behaviour.</li>
-</ul>
-</div>
-<div class="section" id="id265">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id266">
-<h1>2.2.1 (2009-06-02)</h1>
-<div class="section" id="id267">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Injecting default attributes into a document during XML Schema
-validation (also at parse time).</li>
-<li>Pass <tt class="docutils literal">huge_tree</tt> parser option to disable parser security
-restrictions imposed by libxml2 2.7.</li>
-</ul>
-</div>
-<div class="section" id="id268">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The script for statically building libxml2 and libxslt didn't work
-in Py3.</li>
-<li><tt class="docutils literal">XMLSchema()</tt> also passes invalid schema documents on to libxml2
-for parsing (which could lead to a crash before release 2.6.24).</li>
-</ul>
-</div>
-<div class="section" id="id269">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id270">
-<h1>2.2 (2009-03-21)</h1>
-<div class="section" id="id271">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for <tt class="docutils literal">standalone</tt> flag in XML declaration through
-<tt class="docutils literal">tree.docinfo.standalone</tt> and by passing <tt class="docutils literal">standalone=True/False</tt>
-on serialisation.</li>
-</ul>
-</div>
-<div class="section" id="id272">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when parsing an XML Schema with external imports from a
-filename.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta4-2009-02-27">
-<h1>2.2beta4 (2009-02-27)</h1>
-<div class="section" id="id273">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support strings and instantiable Element classes as child arguments
-to the constructor of custom Element classes.</li>
-<li>GZip compression support for serialisation to files and file-like
-objects.</li>
-</ul>
-</div>
-<div class="section" id="id274">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Deep-copying an ElementTree copied neither its sibling PIs and
-comments nor its internal/external DTD subsets.</li>
-<li>Soupparser failed on broken attributes without values.</li>
-<li>Crash in XSLT when overwriting an already defined attribute using
-<tt class="docutils literal">xsl:attribute</tt>.</li>
-<li>Crash bug in exception handling code under Python 3.  This was due
-to a problem in Cython, not lxml itself.</li>
-<li><tt class="docutils literal">lxml.html.FormElement._name()</tt> failed for non top-level forms.</li>
-<li><tt class="docutils literal">TAG</tt> special attribute in constructor of custom Element classes
-was evaluated incorrectly.</li>
-</ul>
-</div>
-<div class="section" id="id275">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Official support for Python 3.0.1.</li>
-<li><tt class="docutils literal">Element.findtext()</tt> now returns an empty string instead of None
-for Elements without text content.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta3-2009-02-17">
-<h1>2.2beta3 (2009-02-17)</h1>
-<div class="section" id="id276">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">XSLT.strparam()</tt> class method to wrap quoted string parameters
-that require escaping.</li>
-</ul>
-</div>
-<div class="section" id="id277">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory leak in XPath evaluators.</li>
-<li>Crash when parsing indented XML in one thread and merging it with
-other documents parsed in another thread.</li>
-<li>Setting the <tt class="docutils literal">base</tt> attribute in <tt class="docutils literal">lxml.objectify</tt> from a unicode
-string failed.</li>
-<li>Fixes following changes in Python 3.0.1.</li>
-<li>Minor fixes for Python 3.</li>
-</ul>
-</div>
-<div class="section" id="id278">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The global error log (which is copied into the exception log) is now
-local to a thread, which fixes some race conditions.</li>
-<li>More robust error handling on serialisation.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta2-2009-01-25">
-<h1>2.2beta2 (2009-01-25)</h1>
-<div class="section" id="id279">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Potential memory leak on exception handling.  This was due to a
-problem in Cython, not lxml itself.</li>
-<li><tt class="docutils literal">iter_links</tt> (and related link-rewriting functions) in
-<tt class="docutils literal">lxml.html</tt> would interpret CSS like <tt class="docutils literal"><span class="pre">url(&quot;link&quot;)</span></tt> incorrectly
-(treating the quotation marks as part of the link).</li>
-<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id280">
-<h1>2.1.5 (2009-01-06)</h1>
-<div class="section" id="id281">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Potential memory leak on exception handling.  This was due to a
-problem in Cython, not lxml itself.</li>
-<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2008-12-12">
-<h1>2.2beta1 (2008-12-12)</h1>
-<div class="section" id="id282">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Allow <tt class="docutils literal">lxml.html.diff.htmldiff</tt> to accept Element objects, not
-just HTML strings.</li>
-</ul>
-</div>
-<div class="section" id="id283">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when using an XPath evaluator in multiple threads.</li>
-<li>Fixed missing whitespace before <tt class="docutils literal"><span class="pre">Link:...</span></tt> in <tt class="docutils literal">lxml.html.diff</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id284">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Export <tt class="docutils literal">lxml.html.parse</tt>.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id285">
-<h1>2.1.4 (2008-12-12)</h1>
-<div class="section" id="id286">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when using an XPath evaluator in multiple threads.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id287">
-<h1>2.0.11 (2008-12-12)</h1>
-<div class="section" id="id288">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when using an XPath evaluator in multiple threads.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="alpha1-2008-11-23">
-<h1>2.2alpha1 (2008-11-23)</h1>
-<div class="section" id="id289">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for XSLT result tree fragments in XPath/XSLT extension
-functions.</li>
-<li>QName objects have new properties <tt class="docutils literal">namespace</tt> and <tt class="docutils literal">localname</tt>.</li>
-<li>New options for exclusive C14N and C14N without comments.</li>
-<li>Instantiating a custom Element classes creates a new Element.</li>
-</ul>
-</div>
-<div class="section" id="id290">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>XSLT didn't inherit the parse options of the input document.</li>
-<li>0-bytes could slip through the API when used inside of Unicode
-strings.</li>
-<li>With <tt class="docutils literal">lxml.html.clean.autolink</tt>, links with balanced parenthesis,
-that end in a parenthesis, will be linked in their entirety (typical
-with Wikipedia links).</li>
-</ul>
-</div>
-<div class="section" id="id291">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id292">
-<h1>2.1.3 (2008-11-17)</h1>
-<div class="section" id="id293">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id294">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Ref-count leaks when lxml enters a try-except statement while an
-outside exception lives in sys.exc_*(). This was due to a problem in
-Cython, not lxml itself.</li>
-<li>Parser Unicode decoding errors could get swallowed by other
-exceptions.</li>
-<li>Name/import errors in some Python modules.</li>
-<li>Internal DTD subsets that did not specify a system or public ID were
-not serialised and did not appear in the docinfo property of
-ElementTrees.</li>
-<li>Fix a pre-Py3k warning when parsing from a gzip file in Py2.6.</li>
-<li>Test suite fixes for libxml2 2.7.</li>
-<li>Resolver.resolve_string() did not work for non-ASCII byte strings.</li>
-<li>Resolver.resolve_file() was broken.</li>
-<li>Overriding the parser encoding didn't work for many encodings.</li>
-</ul>
-</div>
-<div class="section" id="id295">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id296">
-<h1>2.0.10 (2008-11-17)</h1>
-<div class="section" id="id297">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Ref-count leaks when lxml enters a try-except statement while an
-outside exception lives in sys.exc_*(). This was due to a problem in
-Cython, not lxml itself.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id298">
-<h1>2.1.2 (2008-09-05)</h1>
-<div class="section" id="id299">
-<h2>Features added</h2>
-<ul class="simple">
-<li>lxml.etree now tries to find the absolute path name of files when
-parsing from a file-like object.  This helps custom resolvers when
-resolving relative URLs, as lixbml2 can prepend them with the path
-of the source document.</li>
-</ul>
-</div>
-<div class="section" id="id300">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory problem when passing documents between threads.</li>
-<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
-exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
-</ul>
-</div>
-<div class="section" id="id301">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id302">
-<h1>2.0.9 (2008-09-05)</h1>
-<div class="section" id="id303">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory problem when passing documents between threads.</li>
-<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
-exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id304">
-<h1>2.1.1 (2008-07-24)</h1>
-<div class="section" id="id305">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id306">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when parsing XSLT stylesheets in a thread and using them in
-another.</li>
-<li>Encoding problem when including text with ElementInclude under
-Python 3.</li>
-</ul>
-</div>
-<div class="section" id="id307">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id308">
-<h1>2.0.8 (2008-07-24)</h1>
-<div class="section" id="id309">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.rewrite_links()</tt> strips links to work around documents
-with whitespace in URL attributes.</li>
-</ul>
-</div>
-<div class="section" id="id310">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when parsing XSLT stylesheets in a thread and using them in
-another.</li>
-<li>CSS selector parser dropped remaining expression after a function
-with parameters.</li>
-</ul>
-</div>
-<div class="section" id="id311">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id312">
-<h1>2.1 (2008-07-09)</h1>
-<div class="section" id="id313">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Smart strings can be switched off in XPath (<tt class="docutils literal">smart_strings</tt>
-keyword option).</li>
-<li><tt class="docutils literal">lxml.html.rewrite_links()</tt> strips links to work around documents
-with whitespace in URL attributes.</li>
-</ul>
-</div>
-<div class="section" id="id314">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Custom resolvers were not used for XMLSchema includes/imports and
-XInclude processing.</li>
-<li>CSS selector parser dropped remaining expression after a function
-with parameters.</li>
-</ul>
-</div>
-<div class="section" id="id315">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><tt class="docutils literal">objectify.enableRecursiveStr()</tt> was removed, use
-<tt class="docutils literal">objectify.enable_recursive_str()</tt> instead</li>
-<li>Speed-up when running XSLTs on documents from other threads</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id316">
-<h1>2.0.7 (2008-06-20)</h1>
-<div class="section" id="id317">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
-</ul>
-</div>
-<div class="section" id="id318">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Descending dot-separated classes in CSS selectors were not resolved
-correctly.</li>
-<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
-<li>Potential threading problem in XInclude.</li>
-<li>Crash in Element class lookup classes when the __init__() method of
-the super class is not called from Python subclasses.</li>
-</ul>
-</div>
-<div class="section" id="id319">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Non-ASCII characters in attribute values are no longer escaped on
-serialisation.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta3-2008-06-19">
-<h1>2.1beta3 (2008-06-19)</h1>
-<div class="section" id="id320">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Major overhaul of <tt class="docutils literal">tools/xpathgrep.py</tt> script.</li>
-<li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
-<li>Support for parsing from file-like objects that return unicode
-strings.</li>
-<li>New function <tt class="docutils literal">etree.cleanup_namespaces(el)</tt> that removes unused
-namespace declarations from a (sub)tree (experimental).</li>
-<li>XSLT results support the buffer protocol in Python 3.</li>
-<li>Polymorphic functions in <tt class="docutils literal">lxml.html</tt> that accept either a tree or
-a parsable string will return either a UTF-8 encoded byte string, a
-unicode string or a tree, based on the type of the input.
-Previously, the result was always a byte string or a tree.</li>
-<li>Support for Python 2.6 and 3.0 beta.</li>
-<li>File name handling now uses a heuristic to convert between byte
-strings (usually filenames) and unicode strings (usually URLs).</li>
-<li>Parsing from a plain file object frees the GIL under Python 2.x.</li>
-<li>Running <tt class="docutils literal">iterparse()</tt> on a plain file (or filename) frees the GIL
-on reading under Python 2.x.</li>
-<li>Conversion functions <tt class="docutils literal">html_to_xhtml()</tt> and <tt class="docutils literal">xhtml_to_html()</tt> in
-lxml.html (experimental).</li>
-<li>Most features in lxml.html work for XHTML namespaced tag names
-(experimental).</li>
-</ul>
-</div>
-<div class="section" id="id321">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
-<li>Crash in Element class lookup classes when the __init__() method of
-the super class is not called from Python subclasses.</li>
-<li>A number of problems related to unicode/byte string conversion of
-filenames and error messages were fixed.</li>
-<li>Building on MacOS-X now passes the &quot;flat_namespace&quot; option to the C
-compiler, which reportedly prevents build quirks and crashes on this
-platform.</li>
-<li>Windows build was broken.</li>
-<li>Rare crash when serialising to a file object with certain encodings.</li>
-</ul>
-</div>
-<div class="section" id="id322">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Non-ASCII characters in attribute values are no longer escaped on
-serialisation.</li>
-<li>Passing non-ASCII byte strings or invalid unicode strings as .tag,
-namespaces, etc. will result in a ValueError instead of an
-AssertionError (just like the tag well-formedness check).</li>
-<li>Up to several times faster attribute access (i.e. tree traversal) in
-lxml.objectify.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id323">
-<h1>2.0.6 (2008-05-31)</h1>
-<div class="section" id="id324">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id325">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Incorrect evaluation of <tt class="docutils literal"><span class="pre">el.find(&quot;tag[child]&quot;)</span></tt>.</li>
-<li>Windows build was broken.</li>
-<li>Moving a subtree from a document created in one thread into a
-document of another thread could crash when the rest of the source
-document is deleted while the subtree is still in use.</li>
-<li>Rare crash when serialising to a file object with certain encodings.</li>
-</ul>
-</div>
-<div class="section" id="id326">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>lxml should now build without problems on MacOS-X.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta2-2008-05-02">
-<h1>2.1beta2 (2008-05-02)</h1>
-<div class="section" id="id327">
-<h2>Features added</h2>
-<ul class="simple">
-<li>All parse functions in lxml.html take a <tt class="docutils literal">parser</tt> keyword argument.</li>
-<li>lxml.html has a new parser class <tt class="docutils literal">XHTMLParser</tt> and a module
-attribute <tt class="docutils literal">xhtml_parser</tt> that provide XML parsers that are
-pre-configured for the lxml.html package.</li>
-</ul>
-</div>
-<div class="section" id="id328">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Moving a subtree from a document created in one thread into a
-document of another thread could crash when the rest of the source
-document is deleted while the subtree is still in use.</li>
-<li>Passing an nsmap when creating an Element will no longer strip
-redundantly defined namespace URIs.  This prevented the definition
-of more than one prefix for a namespace on the same Element.</li>
-</ul>
-</div>
-<div class="section" id="id329">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>If the default namespace is redundantly defined with a prefix on the
-same Element, the prefix will now be preferred for subelements and
-attributes.  This allows users to work around a problem in libxml2
-where attributes from the default namespace could serialise without
-a prefix even when they appear on an Element with a different
-namespace (i.e. they would end up in the wrong namespace).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id330">
-<h1>2.0.5 (2008-05-01)</h1>
-<div class="section" id="id331">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id332">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Resolving to a filename in custom resolvers didn't work.</li>
-<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
-let some XSLT errors pass silently.</li>
-<li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
-</ul>
-</div>
-<div class="section" id="id333">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="beta1-2008-04-15">
-<h1>2.1beta1 (2008-04-15)</h1>
-<div class="section" id="id334">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Error logging in Schematron (requires libxml2 2.6.32 or later).</li>
-<li>Parser option <tt class="docutils literal">strip_cdata</tt> for normalising or keeping CDATA
-sections.  Defaults to <tt class="docutils literal">True</tt> as before, thus replacing CDATA
-sections by their text content.</li>
-<li><tt class="docutils literal">CDATA()</tt> factory to wrap string content as CDATA section.</li>
-</ul>
-</div>
-<div class="section" id="id335">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Resolving to a filename in custom resolvers didn't work.</li>
-<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
-let some XSLT errors pass silently.</li>
-<li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
-<li>lxml.etree accepted non well-formed namespace prefix names.</li>
-</ul>
-</div>
-<div class="section" id="id336">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Major cleanup in internal <tt class="docutils literal">moveNodeToDocument()</tt> function, which
-takes care of namespace cleanup when moving elements between
-different namespace contexts.</li>
-<li>New Elements created through the <tt class="docutils literal">makeelement()</tt> method of an HTML
-parser or through lxml.html now end up in a new HTML document
-(doctype HTML 4.01 Transitional) instead of a generic XML document.
-This mostly impacts the serialisation and the availability of a DTD
-context.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id337">
-<h1>2.0.4 (2008-04-13)</h1>
-<div class="section" id="id338">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id339">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Hanging thread in conjunction with GTK threading.</li>
-<li>Crash bug in iterparse when moving elements into other documents.</li>
-<li>HTML elements' <tt class="docutils literal">.cssselect()</tt> method was broken.</li>
-<li><tt class="docutils literal"><span class="pre">ElementTree.find*()</span></tt> didn't accept QName objects.</li>
-</ul>
-</div>
-<div class="section" id="id340">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="alpha1-2008-03-27">
-<h1>2.1alpha1 (2008-03-27)</h1>
-<div class="section" id="id341">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New event types 'comment' and 'pi' in <tt class="docutils literal">iterparse()</tt>.</li>
-<li><tt class="docutils literal">XSLTAccessControl</tt> instances have a property <tt class="docutils literal">options</tt> that
-returns a dict of access configuration options.</li>
-<li>Constant instances <tt class="docutils literal">DENY_ALL</tt> and <tt class="docutils literal">DENY_WRITE</tt> on
-<tt class="docutils literal">XSLTAccessControl</tt> class.</li>
-<li>Extension elements for XSLT (experimental!)</li>
-<li><tt class="docutils literal">Element.base</tt> property returns the xml:base or HTML base URL of
-an Element.</li>
-<li><tt class="docutils literal">docinfo.URL</tt> property is writable.</li>
-</ul>
-</div>
-<div class="section" id="id342">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Default encoding for plain text serialisation was different from
-that of XML serialisation (UTF-8 instead of ASCII).</li>
-</ul>
-</div>
-<div class="section" id="id343">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Minor API speed-ups.</li>
-<li>The benchmark suite now uses tail text in the trees, which makes the
-absolute numbers incomparable to previous results.</li>
-<li>Generating the HTML documentation now requires <a class="reference external" href="http://pygments.org/">Pygments</a>, which is
-used to enable syntax highlighting for the doctest examples.</li>
-</ul>
-<p>Most long-time deprecated functions and methods were removed:</p>
-<ul>
-<li><p class="first"><tt class="docutils literal">etree.clearErrorLog()</tt>, use <tt class="docutils literal">etree.clear_error_log()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.useGlobalPythonLog()</tt>, use
-<tt class="docutils literal">etree.use_global_python_log()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.ElementClassLookup.setFallback()</tt>, use
-<tt class="docutils literal">etree.ElementClassLookup.set_fallback()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.getDefaultParser()</tt>, use <tt class="docutils literal">etree.get_default_parser()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.setDefaultParser()</tt>, use <tt class="docutils literal">etree.set_default_parser()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.setElementClassLookup()</tt>, use
-<tt class="docutils literal">etree.set_element_class_lookup()</tt></p>
-<p>Note that <tt class="docutils literal">parser.setElementClassLookup()</tt> has not been removed
-yet, although <tt class="docutils literal">parser.set_element_class_lookup()</tt> should be used
-instead.</p>
-</li>
-<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespace()</tt>, use
-<tt class="docutils literal">xpath_evaluator.register_namespace()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespaces()</tt>, use
-<tt class="docutils literal">xpath_evaluator.register_namespaces()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">objectify.setPytypeAttributeTag</tt>, use
-<tt class="docutils literal">objectify.set_pytype_attribute_tag</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">objectify.setDefaultParser()</tt>, use
-<tt class="docutils literal">objectify.set_default_parser()</tt></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id344">
-<h1>2.0.3 (2008-03-26)</h1>
-<div class="section" id="id345">
-<h2>Features added</h2>
-<ul class="simple">
-<li>soupparser.parse() allows passing keyword arguments on to
-BeautifulSoup.</li>
-<li><tt class="docutils literal">fromstring()</tt> method in <tt class="docutils literal">lxml.html.soupparser</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id346">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.diff</tt> didn't treat empty tags properly (e.g.,
-<tt class="docutils literal">&lt;br&gt;</tt>).</li>
-<li>Handle entity replacements correctly in target parser.</li>
-<li>Crash when using <tt class="docutils literal">iterparse()</tt> with XML Schema validation.</li>
-<li>The BeautifulSoup parser (soupparser.py) did not replace entities,
-which made them turn up in text content.</li>
-<li>Attribute assignment of custom PyTypes in objectify could fail to
-correctly serialise the value to a string.</li>
-</ul>
-</div>
-<div class="section" id="id347">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.ElementSoup</tt> was replaced by a new module
-<tt class="docutils literal">lxml.html.soupparser</tt> with a more consistent API.  The old module
-remains for compatibility with ElementTree's own ElementSoup module.</li>
-<li>Setting the XSLT_CONFIG and XML2_CONFIG environment variables at
-build time will let setup.py pick up the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> and
-<tt class="docutils literal"><span class="pre">xslt-config</span></tt> scripts from the supplied path name.</li>
-<li>Passing <tt class="docutils literal"><span class="pre">--with-xml2-config=/path/to/xml2-config</span></tt> to setup.py will
-override the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> script that is used to determine the C
-compiler options.  The same applies for the <tt class="docutils literal"><span class="pre">--with-xslt-config</span></tt>
-option.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id348">
-<h1>2.0.2 (2008-02-22)</h1>
-<div class="section" id="id349">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support passing <tt class="docutils literal">base_url</tt> to file parser functions to override
-the filename of the file(-like) object.</li>
-</ul>
-</div>
-<div class="section" id="id350">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The prefix for objectify's pytype namespace was missing from the set
-of default prefixes.</li>
-<li>Memory leak in Schematron (fixed only for libxml2 2.6.31+).</li>
-<li>Error type names in RelaxNG were reported incorrectly.</li>
-<li>Slice deletion bug fixed in objectify.</li>
-</ul>
-</div>
-<div class="section" id="id351">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Enabled doctests for some Python modules (especially <tt class="docutils literal">lxml.html</tt>).</li>
-<li>Add a <tt class="docutils literal">method</tt> argument to <tt class="docutils literal">lxml.html.tostring()</tt>
-(<tt class="docutils literal"><span class="pre">method=&quot;xml&quot;</span></tt> for XHTML output).</li>
-<li>Make it clearer that methods like <tt class="docutils literal">lxml.html.fromstring()</tt> take a
-<tt class="docutils literal">base_url</tt> argument.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id352">
-<h1>2.0.1 (2008-02-13)</h1>
-<div class="section" id="id353">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Child iteration in <tt class="docutils literal">lxml.pyclasslookup</tt>.</li>
-<li>Loads of new docstrings reflect the signature of functions and
-methods to make them visible in API docs and <tt class="docutils literal">help()</tt></li>
-</ul>
-</div>
-<div class="section" id="id354">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The module <tt class="docutils literal">lxml.html.builder</tt> was duplicated as
-<tt class="docutils literal">lxml.htmlbuilder</tt></li>
-<li>Form elements would return None for <tt class="docutils literal">form.fields.keys()</tt> if there
-was an unnamed input field.  Now unnamed input fields are completely
-ignored.</li>
-<li>Setting an element slice in objectify could insert slice-overlapping
-elements at the wrong position.</li>
-</ul>
-</div>
-<div class="section" id="id355">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The generated API documentation was cleaned up and disburdened from
-non-public classes etc.</li>
-<li>The previously public module <tt class="docutils literal">lxml.html.setmixin</tt> was renamed to
-<tt class="docutils literal">lxml.html._setmixin</tt> as it is not an official part of lxml.  If
-you want to use it, feel free to copy it over to your own source
-base.</li>
-<li>Passing <tt class="docutils literal"><span class="pre">--with-xslt-config=/path/to/xslt-config</span></tt> to setup.py will
-override the <tt class="docutils literal"><span class="pre">xslt-config</span></tt> script that is used to determine the C
-compiler options.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id356">
-<h1>2.0 (2008-02-01)</h1>
-<div class="section" id="id357">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Passing the <tt class="docutils literal">unicode</tt> type as <tt class="docutils literal">encoding</tt> to <tt class="docutils literal">tostring()</tt> will
-serialise to unicode.  The <tt class="docutils literal">tounicode()</tt> function is now
-deprecated.</li>
-<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> can parse from StringIO.</li>
-<li><tt class="docutils literal">makeparser()</tt> function in <tt class="docutils literal">lxml.objectify</tt> to create a new
-parser with the usual objectify setup.</li>
-<li>Plain ASCII XPath string results are no longer forced into unicode
-objects as in 2.0beta1, but are returned as plain strings as before.</li>
-<li>All XPath string results are 'smart' objects that have a
-<tt class="docutils literal">getparent()</tt> method to retrieve their parent Element.</li>
-<li><tt class="docutils literal">with_tail</tt> option in serialiser functions.</li>
-<li>More accurate exception messages in validator creation.</li>
-<li>Parse-time XML schema validation (<tt class="docutils literal">schema</tt> parser keyword).</li>
-<li>XPath string results of the <tt class="docutils literal">text()</tt> function and attribute
-selection make their Element container accessible through a
-<tt class="docutils literal">getparent()</tt> method.  As a side-effect, they are now always
-unicode objects (even ASCII strings).</li>
-<li><tt class="docutils literal">XSLT</tt> objects are usable in any thread - at the cost of a deep
-copy if they were not created in that thread.</li>
-<li>Invalid entity names and character references will be rejected by
-the <tt class="docutils literal">Entity()</tt> factory.</li>
-<li><tt class="docutils literal">entity.text</tt> returns the textual representation of the entity,
-e.g. <tt class="docutils literal">&amp;amp;</tt>.</li>
-<li>New properties <tt class="docutils literal">position</tt> and <tt class="docutils literal">code</tt> on ParseError exception (as
-in ET 1.3)</li>
-<li>Rich comparison of <tt class="docutils literal">element.attrib</tt> proxies.</li>
-<li>ElementTree compatible TreeBuilder class.</li>
-<li>Use default prefixes for some common XML namespaces.</li>
-<li><tt class="docutils literal">lxml.html.clean.Cleaner</tt> now allows for a <tt class="docutils literal">host_whitelist</tt>, and
-two overridable methods: <tt class="docutils literal">allow_embedded_url(el, url)</tt> and the
-more general <tt class="docutils literal">allow_element(el)</tt>.</li>
-<li>Extended slicing of Elements as in <tt class="docutils literal"><span class="pre">element[1:-1:2]</span></tt>, both in
-etree and in objectify</li>
-<li>Resolvers can now provide a <tt class="docutils literal">base_url</tt> keyword argument when
-resolving a document as string data.</li>
-<li>When using <tt class="docutils literal">lxml.doctestcompare</tt> you can give the doctest option
-<tt class="docutils literal">NOPARSE_MARKUP</tt> (like <tt class="docutils literal"># doctest: +NOPARSE_MARKUP</tt>) to suppress
-the special checking for one test.</li>
-<li>Separate <tt class="docutils literal">feed_error_log</tt> property for the feed parser interface.
-The normal parser interface and <tt class="docutils literal">iterparse</tt> continue to use
-<tt class="docutils literal">error_log</tt>.</li>
-<li>The normal parsers and the feed parser interface are now separated
-and can be used concurrently on the same parser instance.</li>
-<li><tt class="docutils literal">fromstringlist()</tt> and <tt class="docutils literal">tostringlist()</tt> functions as in
-ElementTree 1.3</li>
-<li><tt class="docutils literal">iterparse()</tt> accepts an <tt class="docutils literal">html</tt> boolean keyword argument for
-parsing with the HTML parser (note that this interface may be
-subject to change)</li>
-<li>Parsers accept an <tt class="docutils literal">encoding</tt> keyword argument that overrides the encoding
-of the parsed documents.</li>
-<li>New C-API function <tt class="docutils literal">hasChild()</tt> to test for children</li>
-<li><tt class="docutils literal">annotate()</tt> function in objectify can annotate with Python types and XSI
-types in one step.  Accompanied by <tt class="docutils literal">xsiannotate()</tt> and <tt class="docutils literal">pyannotate()</tt>.</li>
-<li><tt class="docutils literal">ET.write()</tt>, <tt class="docutils literal">tostring()</tt> and <tt class="docutils literal">tounicode()</tt> now accept a keyword
-argument <tt class="docutils literal">method</tt> that can be one of 'xml' (or None), 'html' or 'text' to
-serialise as XML, HTML or plain text content.</li>
-<li><tt class="docutils literal">iterfind()</tt> method on Elements returns an iterator equivalent to
-<tt class="docutils literal">findall()</tt></li>
-<li><tt class="docutils literal">itertext()</tt> method on Elements</li>
-<li>Setting a QName object as value of the .text property or as an attribute
-will resolve its prefix in the respective context</li>
-<li>ElementTree-like parser target interface as described in
-<a class="reference external" href="http://effbot.org/elementtree/elementtree-xmlparser.htm">http://effbot.org/elementtree/elementtree-xmlparser.htm</a></li>
-<li>ElementTree-like feed parser interface on XMLParser and HTMLParser
-(<tt class="docutils literal">feed()</tt> and <tt class="docutils literal">close()</tt> methods)</li>
-<li>Reimplemented <tt class="docutils literal">objectify.E</tt> for better performance and improved
-integration with objectify.  Provides extended type support based on
-registered PyTypes.</li>
-<li>XSLT objects now support deep copying</li>
-<li>New <tt class="docutils literal">makeSubElement()</tt> C-API function that allows creating a new
-subelement straight with text, tail and attributes.</li>
-<li>XPath extension functions can now access the current context node
-(<tt class="docutils literal">context.context_node</tt>) and use a context dictionary
-(<tt class="docutils literal">context.eval_context</tt>) from the context provided in their first
-parameter</li>
-<li>HTML tag soup parser based on BeautifulSoup in <tt class="docutils literal">lxml.html.ElementSoup</tt></li>
-<li>New module <tt class="docutils literal">lxml.doctestcompare</tt> by Ian Bicking for writing simplified
-doctests based on XML/HTML output.  Use by importing <tt class="docutils literal">lxml.usedoctest</tt> or
-<tt class="docutils literal">lxml.html.usedoctest</tt> from within a doctest.</li>
-<li>New module <tt class="docutils literal">lxml.cssselect</tt> by Ian Bicking for selecting Elements with CSS
-selectors.</li>
-<li>New package <tt class="docutils literal">lxml.html</tt> written by Ian Bicking for advanced HTML
-treatment.</li>
-<li>Namespace class setup is now local to the <tt class="docutils literal">ElementNamespaceClassLookup</tt>
-instance and no longer global.</li>
-<li>Schematron validation (incomplete in libxml2)</li>
-<li>Additional <tt class="docutils literal">stringify</tt> argument to <tt class="docutils literal">objectify.PyType()</tt> takes a
-conversion function to strings to support setting text values from arbitrary
-types.</li>
-<li>Entity support through an <tt class="docutils literal">Entity</tt> factory and element classes.  XML
-parsers now have a <tt class="docutils literal">resolve_entities</tt> keyword argument that can be set to
-False to keep entities in the document.</li>
-<li><tt class="docutils literal">column</tt> field on error log entries to accompany the <tt class="docutils literal">line</tt> field</li>
-<li>Error specific messages in XPath parsing and evaluation
-NOTE: for evaluation errors, you will now get an XPathEvalError instead of
-an XPathSyntaxError.  To catch both, you can except on <tt class="docutils literal">XPathError</tt></li>
-<li>The regular expression functions in XPath now support passing a node-set
-instead of a string</li>
-<li>Extended type annotation in objectify: new <tt class="docutils literal">xsiannotate()</tt> function</li>
-<li>EXSLT RegExp support in standard XPath (not only XSLT)</li>
-</ul>
-</div>
-<div class="section" id="id358">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Missing import in <tt class="docutils literal">lxml.html.clean</tt>.</li>
-<li>Some Python 2.4-isms prevented lxml from building/running under
-Python 2.3.</li>
-<li>XPath on ElementTrees could crash when selecting the virtual root
-node of the ElementTree.</li>
-<li>Compilation <tt class="docutils literal"><span class="pre">--without-threading</span></tt> was buggy in alpha5/6.</li>
-<li>Memory leak in the <tt class="docutils literal">parse()</tt> function.</li>
-<li>Minor bugs in XSLT error message formatting.</li>
-<li>Result document memory leak in target parser.</li>
-<li>Target parser failed to report comments.</li>
-<li>In the <tt class="docutils literal">lxml.html</tt> <tt class="docutils literal">iter_links</tt> method, links in <tt class="docutils literal">&lt;object&gt;</tt>
-tags weren't recognized.  (Note: plugin-specific link parameters
-still aren't recognized.)  Also, the <tt class="docutils literal">&lt;embed&gt;</tt> tag, though not
-standard, is now included in <tt class="docutils literal">lxml.html.defs.special_inline_tags</tt>.</li>
-<li>Using custom resolvers on XSLT stylesheets parsed from a string
-could request ill-formed URLs.</li>
-<li>With <tt class="docutils literal">lxml.doctestcompare</tt> if you do <tt class="docutils literal">&lt;tag <span class="pre">xmlns=&quot;...&quot;&gt;</span></tt> in your
-output, it will then be namespace-neutral (before the ellipsis was
-treated as a real namespace).</li>
-<li>AttributeError in feed parser on parse errors</li>
-<li>XML feed parser setup problem</li>
-<li>Type annotation for unicode strings in <tt class="docutils literal">DataElement()</tt></li>
-<li>lxml failed to serialise namespace declarations of elements other than the
-root node of a tree</li>
-<li>Race condition in XSLT where the resolver context leaked between concurrent
-XSLT calls</li>
-<li>lxml.etree did not check tag/attribute names</li>
-<li>The XML parser did not report undefined entities as error</li>
-<li>The text in exceptions raised by XML parsers, validators and XPath
-evaluators now reports the first error that occurred instead of the last</li>
-<li>Passing '' as XPath namespace prefix did not raise an error</li>
-<li>Thread safety in XPath evaluators</li>
-</ul>
-</div>
-<div class="section" id="id359">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Exceptions carry only the part of the error log that is related to
-the operation that caused the error.</li>
-<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> now enforce passing the source
-file/filename through the <tt class="docutils literal">file</tt> keyword argument.</li>
-<li>The test suite now skips most doctests under Python 2.3.</li>
-<li><tt class="docutils literal">make clean</tt> no longer removes the .c files (use <tt class="docutils literal">make
-realclean</tt> instead)</li>
-<li>Minor performance tweaks for Element instantiation and subelement
-creation</li>
-<li>Various places in the XPath, XSLT and iteration APIs now require
-keyword-only arguments.</li>
-<li>The argument order in <tt class="docutils literal">element.itersiblings()</tt> was changed to
-match the order used in all other iteration methods.  The second
-argument ('preceding') is now a keyword-only argument.</li>
-<li>The <tt class="docutils literal">getiterator()</tt> method on Elements and ElementTrees was
-reverted to return an iterator as it did in lxml 1.x.  The ET API
-specification allows it to return either a sequence or an iterator,
-and it traditionally returned a sequence in ET and an iterator in
-lxml.  However, it is now deprecated in favour of the <tt class="docutils literal">iter()</tt>
-method, which should be used in new code wherever possible.</li>
-<li>The 'pretty printed' serialisation of ElementTree objects now
-inserts newlines at the root level between processing instructions,
-comments and the root tag.</li>
-<li>A 'pretty printed' serialisation is now terminated with a newline.</li>
-<li>Second argument to <tt class="docutils literal">lxml.etree.Extension()</tt> helper is no longer
-required, third argument is now a keyword-only argument <tt class="docutils literal">ns</tt>.</li>
-<li><tt class="docutils literal">lxml.html.tostring</tt> takes an <tt class="docutils literal">encoding</tt> argument.</li>
-<li>The module source files were renamed to &quot;lxml.*.pyx&quot;, such as
-&quot;lxml.etree.pyx&quot;.  This was changed for consistency with the way
-Pyrex commonly handles package imports.  The main effect is that
-classes now know about their fully qualified class name, including
-the package name of their module.</li>
-<li>Keyword-only arguments in some API functions, especially in the
-parsers and serialisers.</li>
-<li>Tag name validation in lxml.etree (and lxml.html) now distinguishes
-between HTML tags and XML tags based on the parser that was used to
-parse or create them.  HTML tags no longer reject any non-ASCII
-characters in tag names but only spaces and the special characters
-<tt class="docutils literal"><span class="pre">&lt;&gt;&amp;/&quot;'</span></tt>.</li>
-<li>lxml.etree now emits a warning if you use XPath with libxml2 2.6.27
-(which can crash on certain XPath errors)</li>
-<li>Type annotation in objectify now preserves the already annotated type by
-default to prevent losing type information that is already there.</li>
-<li><tt class="docutils literal">element.getiterator()</tt> returns a list, use <tt class="docutils literal">element.iter()</tt> to retrieve
-an iterator (ElementTree 1.3 compatible behaviour)</li>
-<li>objectify.PyType for None is now called &quot;NoneType&quot;</li>
-<li><tt class="docutils literal">el.getiterator()</tt> renamed to <tt class="docutils literal">el.iter()</tt>, following ElementTree 1.3 -
-original name is still available as alias</li>
-<li>In the public C-API, <tt class="docutils literal">findOrBuildNodeNs()</tt> was replaced by the more
-generic <tt class="docutils literal">findOrBuildNodeNsPrefix</tt></li>
-<li>Major refactoring in XPath/XSLT extension function code</li>
-<li>Network access in parsers disabled by default</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id360">
-<h1>1.3.6 (2007-10-29)</h1>
-<div class="section" id="id361">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Backported decref crash fix from 2.0</li>
-<li>Well hidden free-while-in-use crash bug in ObjectPath</li>
-</ul>
-</div>
-<div class="section" id="id362">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The test suites now run <tt class="docutils literal">gc.collect()</tt> in the <tt class="docutils literal">tearDown()</tt>
-methods.  While this makes them take a lot longer to run, it also
-makes it easier to link a specific test to garbage collection
-problems that would otherwise appear in later tests.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id363">
-<h1>1.3.5 (2007-10-22)</h1>
-<div class="section" id="id364">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id365">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>lxml.etree could crash when adding more than 10000 namespaces to a
-document</li>
-<li>lxml failed to serialise namespace declarations of elements other
-than the root node of a tree</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id366">
-<h1>1.3.4 (2007-08-30)</h1>
-<div class="section" id="id367">
-<h2>Features added</h2>
-<ul class="simple">
-<li>The <tt class="docutils literal">ElementMaker</tt> in <tt class="docutils literal">lxml.builder</tt> now accepts the keyword arguments
-<tt class="docutils literal">namespace</tt> and <tt class="docutils literal">nsmap</tt> to set a namespace and nsmap for the Elements it
-creates.</li>
-<li>The <tt class="docutils literal">docinfo</tt> on ElementTree objects has new properties <tt class="docutils literal">internalDTD</tt>
-and <tt class="docutils literal">externalDTD</tt> that return a DTD object for the internal or external
-subset of the document respectively.</li>
-<li>Serialising an ElementTree now includes any internal DTD subsets that are
-part of the document, as well as comments and PIs that are siblings of the
-root node.</li>
-</ul>
-</div>
-<div class="section" id="id368">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Parsing with the <tt class="docutils literal">no_network</tt> option could fail</li>
-</ul>
-</div>
-<div class="section" id="id369">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>lxml now raises a TagNameWarning about tag names containing ':' instead of
-an Error as 1.3.3 did.  The reason is that a number of projects currently
-misuse the previous lack of tag name validation to generate namespace
-prefixes without declaring namespaces.  Apart from the danger of generating
-broken XML this way, it also breaks most of the namespace-aware tools in
-XML, including XPath, XSLT and validation.  lxml 1.3.x will continue to
-support this bug with a Warning, while lxml 2.0 will be strict about
-well-formed tag names (not only regarding ':').</li>
-<li>Serialising an Element no longer includes its comment and PI siblings (only
-ElementTree serialisation includes them).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id370">
-<h1>1.3.3 (2007-07-26)</h1>
-<div class="section" id="id371">
-<h2>Features added</h2>
-<ul class="simple">
-<li>ElementTree compatible parser <tt class="docutils literal">ETCompatXMLParser</tt> strips processing
-instructions and comments while parsing XML</li>
-<li>Parsers now support stripping PIs (keyword argument 'remove_pis')</li>
-<li><tt class="docutils literal">etree.fromstring()</tt> now supports parsing both HTML and XML, depending on
-the parser you pass.</li>
-<li>Support <tt class="docutils literal">base_url</tt> keyword argument in <tt class="docutils literal">HTML()</tt> and <tt class="docutils literal">XML()</tt></li>
-</ul>
-</div>
-<div class="section" id="id372">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Parsing from Python Unicode strings failed on some platforms</li>
-<li><tt class="docutils literal">Element()</tt> did not raise an exception on tag names containing ':'</li>
-<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
-<tt class="docutils literal">ProcessingInstruction</tt> as tags. It also accepts <tt class="docutils literal">Element</tt> now.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id373">
-<h1>1.3.2 (2007-07-03)</h1>
-<div class="section" id="id374">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id375">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>&quot;deallocating None&quot; crash bug</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id376">
-<h1>1.3.1 (2007-07-02)</h1>
-<div class="section" id="id377">
-<h2>Features added</h2>
-<ul class="simple">
-<li>objectify.DataElement now supports setting values from existing data
-elements (not just plain Python types) and reuses defined namespaces etc.</li>
-<li>E-factory support for lxml.objectify (<tt class="docutils literal">objectify.E</tt>)</li>
-</ul>
-</div>
-<div class="section" id="id378">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Better way to prevent crashes in Element proxy cleanup code</li>
-<li>objectify.DataElement didn't set up None value correctly</li>
-<li>objectify.DataElement didn't check the value against the provided type hints</li>
-<li>Reference-counting bug in <tt class="docutils literal">Element.attrib.pop()</tt></li>
-</ul>
-</div>
-</div>
-<div class="section" id="id379">
-<h1>1.3 (2007-06-24)</h1>
-<div class="section" id="id380">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Module <tt class="docutils literal">lxml.pyclasslookup</tt> module implements an Element class lookup
-scheme that can access the entire tree in read-only mode to help determining
-a suitable Element class</li>
-<li>Parsers take a <tt class="docutils literal">remove_comments</tt> keyword argument that skips over comments</li>
-<li><tt class="docutils literal">parse()</tt> function in <tt class="docutils literal">objectify</tt>, corresponding to <tt class="docutils literal">XML()</tt> etc.</li>
-<li><tt class="docutils literal">Element.addnext(el)</tt> and <tt class="docutils literal">Element.addprevious(el)</tt> methods to support
-adding processing instructions and comments around the root node</li>
-<li><tt class="docutils literal">Element.attrib</tt> was missing <tt class="docutils literal">clear()</tt> and <tt class="docutils literal">pop()</tt> methods</li>
-<li>Extended type annotation in objectify: cleaner annotation namespace setup
-plus new <tt class="docutils literal">deannotate()</tt> function</li>
-<li>Support for custom Element class instantiation in lxml.sax: passing a
-<tt class="docutils literal">makeelement</tt> function to the ElementTreeContentHandler will reuse the
-lookup context of that function</li>
-<li>'.' represents empty ObjectPath (identity)</li>
-<li><tt class="docutils literal">Element.values()</tt> to accompany the existing <tt class="docutils literal">.keys()</tt> and <tt class="docutils literal">.items()</tt></li>
-<li><tt class="docutils literal">collectAttributes()</tt> C-function to build a list of attribute
-keys/values/items for a libxml2 node</li>
-<li><tt class="docutils literal">DTD</tt> validator class (like <tt class="docutils literal">RelaxNG</tt> and <tt class="docutils literal">XMLSchema</tt>)</li>
-<li>HTML generator helpers by Fredrik Lundh in <tt class="docutils literal">lxml.htmlbuilder</tt></li>
-<li><tt class="docutils literal">ElementMaker</tt> XML generator by Fredrik Lundh in <tt class="docutils literal">lxml.builder.E</tt></li>
-<li>Support for pickling <tt class="docutils literal">objectify.ObjectifiedElement</tt> objects to XML</li>
-<li><tt class="docutils literal">update()</tt> method on Element.attrib</li>
-<li>Optimised replacement for libxml2's _xmlReconsiliateNs(). This allows lxml
-a better handling of namespaces when moving elements between documents.</li>
-</ul>
-</div>
-<div class="section" id="id381">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Removing Elements from a tree could make them lose their namespace
-declarations</li>
-<li><tt class="docutils literal">ElementInclude</tt> didn't honour base URL of original document</li>
-<li>Replacing the children slice of an Element would cut off the tails of the
-original children</li>
-<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
-<tt class="docutils literal">ProcessingInstruction</tt> as tags</li>
-<li>API functions now check incoming strings for XML conformity.  Zero bytes or
-low ASCII characters are no longer accepted (AssertionError).</li>
-<li>XSLT parsing failed to pass resolver context on to imported documents</li>
-<li>passing '' as namespace prefix in nsmap could be passed through to libxml2</li>
-<li>Objectify couldn't handle prefixed XSD type names in <tt class="docutils literal">xsi:type</tt></li>
-<li>More ET compatible behaviour when writing out XML declarations or not</li>
-<li>More robust error handling in <tt class="docutils literal">iterparse()</tt></li>
-<li>Documents lost their top-level PIs and comments on serialisation</li>
-<li>lxml.sax failed on comments and PIs. Comments are now properly ignored and
-PIs are copied.</li>
-<li>Possible memory leaks in namespace handling when moving elements between
-documents</li>
-</ul>
-</div>
-<div class="section" id="id382">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>major restructuring in the documentation</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id383">
-<h1>1.2.1 (2007-02-27)</h1>
-<div class="section" id="id384">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Build fixes for MS compiler</li>
-<li>Item assignments to special names like <tt class="docutils literal"><span class="pre">element[&quot;text&quot;]</span></tt> failed</li>
-<li>Renamed ObjectifiedDataElement.__setText() to _setText() to make it easier
-to access</li>
-<li>The pattern for attribute names in ObjectPath was too restrictive</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id385">
-<h1>1.2 (2007-02-20)</h1>
-<div class="section" id="id386">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Rich comparison of QName objects</li>
-<li>Support for regular expressions in benchmark selection</li>
-<li>get/set emulation (not .attrib!) for attributes on processing instructions</li>
-<li>ElementInclude Python module for ElementTree compatible XInclude processing
-that honours custom resolvers registered with the source document</li>
-<li>ElementTree.parser property holds the parser used to parse the document</li>
-<li>setup.py has been refactored for greater readability and flexibility</li>
-<li>--rpath flag to setup.py to induce automatic linking-in of dynamic library
-runtime search paths has been renamed to --auto-rpath. This makes it
-possible to pass an --rpath directly to distutils; previously this was being
-shadowed.</li>
-</ul>
-</div>
-<div class="section" id="id387">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Element instantiation now uses locks to prevent race conditions with threads</li>
-<li>ElementTree.write() did not raise an exception when the file was not writable</li>
-<li>Error handling could crash under Python &lt;= 2.4.1 - fixed by disabling thread
-support in these environments</li>
-<li>Element.find*() did not accept QName objects as path</li>
-</ul>
-</div>
-<div class="section" id="id388">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>code cleanup: redundant _NodeBase super class merged into _Element class
-Note: although the impact should be zero in most cases, this change breaks
-the compatibility of the public C-API</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id389">
-<h1>1.1.2 (2006-10-30)</h1>
-<div class="section" id="id390">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Data elements in objectify support repr(), which is now used by dump()</li>
-<li>Source distribution now ships with a patched Pyrex</li>
-<li>New C-API function makeElement() to create new elements with text,
-tail, attributes and namespaces</li>
-<li>Reuse original parser flags for XInclude</li>
-<li>Simplified support for handling XSLT processing instructions</li>
-</ul>
-</div>
-<div class="section" id="id391">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Parser resources were not freed before the next parser run</li>
-<li>Open files and XML strings returned by Python resolvers were not
-closed/freed</li>
-<li>Crash in the IDDict returned by XMLDTDID</li>
-<li>Copying Comments and ProcessingInstructions failed</li>
-<li>Memory leak for external URLs in _XSLTProcessingInstruction.parseXSL()</li>
-<li>Memory leak when garbage collecting tailed root elements</li>
-<li>HTML script/style content was not propagated to .text</li>
-<li>Show text xincluded between text nodes correctly in .text and .tail</li>
-<li>'integer * objectify.StringElement' operation was not supported</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id392">
-<h1>1.1.1 (2006-09-21)</h1>
-<div class="section" id="id393">
-<h2>Features added</h2>
-<ul class="simple">
-<li>XSLT profiling support (<tt class="docutils literal">profile_run</tt> keyword)</li>
-<li>countchildren() method on objectify.ObjectifiedElement</li>
-<li>Support custom elements for tree nodes in lxml.objectify</li>
-</ul>
-</div>
-<div class="section" id="id394">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>lxml.objectify failed to support long data values (e.g., &quot;123L&quot;)</li>
-<li>Error messages from XSLT did not reach <tt class="docutils literal">XSLT.error_log</tt></li>
-<li>Factories objectify.Element() and objectify.DataElement() were missing
-<tt class="docutils literal">attrib</tt> and <tt class="docutils literal">nsmap</tt> keyword arguments</li>
-<li>Changing the default parser in lxml.objectify did not update the factories
-Element() and DataElement()</li>
-<li>Let lxml.objectify.Element() always generate tree elements (not data
-elements)</li>
-<li>Build under Windows failed ('0' bug in patched Pyrex version)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id395">
-<h1>1.1 (2006-09-13)</h1>
-<div class="section" id="id396">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Comments and processing instructions return '&lt;!-- comment --&gt;' and
-'&lt;?pi-target content?&gt;' for repr()</li>
-<li>Parsers are now the preferred (and default) place where element class lookup
-schemes should be registered.  Namespace lookup is no longer supported by
-default.</li>
-<li>Support for Python 2.5 beta</li>
-<li>Unlock the GIL for deep copying documents and for XPath()</li>
-<li>New <tt class="docutils literal">compact</tt> keyword argument for parsing read-only documents</li>
-<li>Support for parser options in iterparse()</li>
-<li>The <tt class="docutils literal">namespace</tt> axis is supported in XPath and returns (prefix, URI)
-tuples</li>
-<li>The XPath expression &quot;/&quot; now returns an empty list instead of raising an
-exception</li>
-<li>XML-Object API on top of lxml (lxml.objectify)</li>
-<li>Customizable Element class lookup:<ul>
-<li>different pre-implemented lookup mechanisms</li>
-<li>support for externally provided lookup functions</li>
-</ul>
-</li>
-<li>Support for processing instructions (ET-like, not compatible)</li>
-<li>Public C-level API for independent extension modules</li>
-<li>Module level <tt class="docutils literal">iterwalk()</tt> function as 'iterparse' for trees</li>
-<li>Module level <tt class="docutils literal">iterparse()</tt> function similar to ElementTree (see
-documentation for differences)</li>
-<li>Element.nsmap property returns a mapping of all namespace prefixes known at
-the Element to their namespace URI</li>
-<li>Reentrant threading support in RelaxNG, XMLSchema and XSLT</li>
-<li>Threading support in parsers and serializers:<ul>
-<li>All in-memory operations (tostring, parse(StringIO), etc.) free the GIL</li>
-<li>File operations (on file names) free the GIL</li>
-<li>Reading from file-like objects frees the GIL and reacquires it for reading</li>
-<li>Serialisation to file-like objects is single-threaded (high lock overhead)</li>
-</ul>
-</li>
-<li>Element iteration over XPath axes:<ul>
-<li>Element.iterdescendants() iterates over the descendants of an element</li>
-<li>Element.iterancestors() iterates over the ancestors of an element (from
-parent to parent)</li>
-<li>Element.itersiblings() iterates over either the following or preceding
-siblings of an element</li>
-<li>Element.iterchildren() iterates over the children of an element in either
-direction</li>
-<li>All iterators support the <tt class="docutils literal">tag</tt> keyword argument to restrict the
-generated elements</li>
-</ul>
-</li>
-<li>Element.getnext() and Element.getprevious() return the direct siblings of an
-element</li>
-</ul>
-</div>
-<div class="section" id="id397">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>filenames with local 8-bit encoding were not supported</li>
-<li>1.1beta did not compile under Python 2.3</li>
-<li>ignore unknown 'pyval' attribute values in objectify</li>
-<li>objectify.ObjectifiedElement.addattr() failed to accept Elements and Lists</li>
-<li>objectify.ObjectPath.setattr() failed to accept Elements and Lists</li>
-<li>XPathSyntaxError now inherits from XPathError</li>
-<li>Threading race conditions in RelaxNG and XMLSchema</li>
-<li>Crash when mixing elements from XSLT results into other trees, concurrent
-XSLT is only allowed when the stylesheet was parsed in the main thread</li>
-<li>The EXSLT <tt class="docutils literal">regexp:match</tt> function now works as defined (except for some
-differences in the regular expression syntax)</li>
-<li>Setting element.text to '' returned None on request, not the empty string</li>
-<li><tt class="docutils literal">iterparse()</tt> could crash on long XML files</li>
-<li>Creating documents no longer copies the parser for later URL resolving.  For
-performance reasons, only a reference is kept.  Resolver updates on the
-parser will now be reflected by documents that were parsed before the
-change.  Although this should rarely become visible, it is a behavioral
-change from 1.0.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id398">
-<h1>1.0.4 (2006-09-09)</h1>
-<div class="section" id="id399">
-<h2>Features added</h2>
-<ul class="simple">
-<li>List-like <tt class="docutils literal">Element.extend()</tt> method</li>
-</ul>
-</div>
-<div class="section" id="id400">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in tail handling in <tt class="docutils literal">Element.replace()</tt></li>
-</ul>
-</div>
-</div>
-<div class="section" id="id401">
-<h1>1.0.3 (2006-08-08)</h1>
-<div class="section" id="id402">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Element.replace(old, new) method to replace a subelement by another one</li>
-</ul>
-</div>
-<div class="section" id="id403">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when mixing elements from XSLT results into other trees</li>
-<li>Copying/deepcopying did not work for ElementTree objects</li>
-<li>Setting an attribute to a non-string value did not raise an exception</li>
-<li>Element.remove() deleted the tail text from the removed Element</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id404">
-<h1>1.0.2 (2006-06-27)</h1>
-<div class="section" id="id405">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for setting a custom default Element class as opposed to namespace
-specific classes (which still override the default class)</li>
-</ul>
-</div>
-<div class="section" id="id406">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Rare exceptions in Python list functions were not handled</li>
-<li>Parsing accepted unicode strings with XML encoding declaration in certain
-cases</li>
-<li>Parsing 8-bit encoded strings from StringIO objects raised an exception</li>
-<li>Module function <tt class="docutils literal">initThread()</tt> was removed - useless (and never worked)</li>
-<li>XSLT and parser exception messages include the error line number</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id407">
-<h1>1.0.1 (2006-06-09)</h1>
-<div class="section" id="id408">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Repeated calls to Element.attrib now efficiently return the same instance</li>
-</ul>
-</div>
-<div class="section" id="id409">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Document deallocation could crash in certain garbage collection scenarios</li>
-<li>Extension function calls in XSLT variable declarations could break the
-stylesheet and crash on repeated calls</li>
-<li>Deep copying Elements could lose namespaces declared in parents</li>
-<li>Deep copying Elements did not copy tail</li>
-<li>Parsing file(-like) objects failed to load external entities</li>
-<li>Parsing 8-bit strings from file(-like) objects raised an exception</li>
-<li>xsl:include failed when the stylesheet was parsed from a file-like object</li>
-<li>lxml.sax.ElementTreeProducer did not call startDocument() / endDocument()</li>
-<li>MSVC compiler complained about long strings (supports only 2048 bytes)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id410">
-<h1>1.0 (2006-06-01)</h1>
-<div class="section" id="id411">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Element.getiterator() and the findall() methods support finding arbitrary
-elements from a namespace (pattern <tt class="docutils literal">{namespace}*</tt>)</li>
-<li>Another speedup in tree iteration code</li>
-<li>General speedup of Python Element object creation and deallocation</li>
-<li>Writing C14N no longer serializes in memory (reduced memory footprint)</li>
-<li>PyErrorLog for error logging through the Python <tt class="docutils literal">logging</tt> module</li>
-<li><tt class="docutils literal">Element.getroottree()</tt> returns an ElementTree for the root node of the
-document that contains the element.</li>
-<li>ElementTree.getpath(element) returns a simple, absolute XPath expression to
-find the element in the tree structure</li>
-<li>Error logs have a <tt class="docutils literal">last_error</tt> attribute for convenience</li>
-<li>Comment texts can be changed through the API</li>
-<li>Formatted output via <tt class="docutils literal">pretty_print</tt> keyword in serialization functions</li>
-<li>XSLT can block access to file system and network via <tt class="docutils literal">XSLTAccessControl</tt></li>
-<li>ElementTree.write() no longer serializes in memory (reduced memory
-footprint)</li>
-<li>Speedup of Element.findall(tag) and Element.getiterator(tag)</li>
-<li>Support for writing the XML representation of Elements and ElementTrees to
-Python unicode strings via <tt class="docutils literal">etree.tounicode()</tt></li>
-<li>Support for writing XSLT results to Python unicode strings via <tt class="docutils literal">unicode()</tt></li>
-<li>Parsing a unicode string no longer copies the string (reduced memory
-footprint)</li>
-<li>Parsing file-like objects reads chunks rather than the whole file (reduced
-memory footprint)</li>
-<li>Parsing StringIO objects from the start avoids copying the string (reduced
-memory footprint)</li>
-<li>Read-only 'docinfo' attribute in ElementTree class holds DOCTYPE
-information, original encoding and XML version as seen by the parser</li>
-<li>etree module can be compiled without libxslt by commenting out the line
-<tt class="docutils literal">include &quot;xslt.pxi&quot;</tt> near the end of the etree.pyx source file</li>
-<li>Better error messages in parser exceptions</li>
-<li>Error reporting also works in XSLT</li>
-<li>Support for custom document loaders (URI resolvers) in parsers and XSLT,
-resolvers are registered at parser level</li>
-<li>Implementation of exslt:regexp for XSLT based on the Python 're' module,
-enabled by default, can be switched off with 'regexp=False' keyword argument</li>
-<li>Support for exslt extensions (libexslt) and libxslt extra functions
-(node-set, document, write, output)</li>
-<li>Substantial speedup in XPath.evaluate()</li>
-<li>HTMLParser for parsing (broken) HTML</li>
-<li>XMLDTDID function parses XML into tuple (root node, ID dict) based on xml:id
-implementation of libxml2 (as opposed to ET compatible XMLID)</li>
-</ul>
-</div>
-<div class="section" id="id412">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory leak in Element.__setitem__</li>
-<li>Memory leak in Element.attrib.items() and Element.attrib.values()</li>
-<li>Memory leak in XPath extension functions</li>
-<li>Memory leak in unicode related setup code</li>
-<li>Element now raises ValueError on empty tag names</li>
-<li>Namespace fixing after moving elements between documents could fail if the
-source document was freed too early</li>
-<li>Setting namespace-less tag names on namespaced elements ('{ns}t' -&gt; 't')
-didn't reset the namespace</li>
-<li>Unknown constants from newer libxml2 versions could raise exceptions in the
-error handlers</li>
-<li>lxml.etree compiles much faster</li>
-<li>On libxml2 &lt;= 2.6.22, parsing strings with encoding declaration could fail
-in certain cases</li>
-<li>Document reference in ElementTree objects was not updated when the root
-element was moved to a different document</li>
-<li>Running absolute XPath expressions on an Element now evaluates against the
-root tree</li>
-<li>Evaluating absolute XPath expressions (<tt class="docutils literal">/*</tt>) on an ElementTree could fail</li>
-<li>Crashes when calling XSLT, RelaxNG, etc. with uninitialized ElementTree
-objects</li>
-<li>Removed public function <tt class="docutils literal">initThreadLogging()</tt>, replaced by more general
-<tt class="docutils literal">initThread()</tt> which fixes a number of setup problems in threads</li>
-<li>Memory leak when using iconv encoders in tostring/write</li>
-<li>Deep copying Elements and ElementTrees maintains the document information</li>
-<li>Serialization functions raise LookupError for unknown encodings</li>
-<li>Memory deallocation crash resulting from deep copying elements</li>
-<li>Some ElementTree methods could crash if the root node was not initialized
-(neither file nor element passed to the constructor)</li>
-<li>Element/SubElement failed to set attribute namespaces from passed <tt class="docutils literal">attrib</tt>
-dictionary</li>
-<li><tt class="docutils literal">tostring()</tt> adds an XML declaration for non-ASCII encodings</li>
-<li><tt class="docutils literal">tostring()</tt> failed to serialize encodings that contain 0-bytes</li>
-<li>ElementTree.xpath() and XPathDocumentEvaluator were not using the
-ElementTree root node as reference point</li>
-<li>Calling <tt class="docutils literal"><span class="pre">document('')</span></tt> in XSLT failed to return the stylesheet</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id413">
-<h1>0.9.2 (2006-05-10)</h1>
-<div class="section" id="id414">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Speedup for Element.makeelement(): the new element reuses the original
-libxml2 document instead of creating a new empty one</li>
-<li>Speedup for reversed() iteration over element children (Py2.4+ only)</li>
-<li>ElementTree compatible QName class</li>
-<li>RelaxNG and XMLSchema accept any Element, not only ElementTrees</li>
-</ul>
-</div>
-<div class="section" id="id415">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>str(xslt_result) was broken for XSLT output other than UTF-8</li>
-<li>Memory leak if write_c14n fails to write the file after conversion</li>
-<li>Crash in XMLSchema and RelaxNG when passing non-schema documents</li>
-<li>Memory leak in RelaxNG() when RelaxNGParseError is raised</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id416">
-<h1>0.9.1 (2006-03-30)</h1>
-<div class="section" id="id417">
-<h2>Features added</h2>
-<ul class="simple">
-<li>lxml.sax.ElementTreeContentHandler checks closing elements and raises
-SaxError on mismatch</li>
-<li>lxml.sax.ElementTreeContentHandler supports namespace-less SAX events
-(startElement, endElement) and defaults to empty attributes (keyword
-argument)</li>
-<li>Speedup for repeatedly accessing element tag names</li>
-<li>Minor API performance improvements</li>
-</ul>
-</div>
-<div class="section" id="id418">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory deallocation bug when using XSLT output method &quot;html&quot;</li>
-<li>sax.py was handling UTF-8 encoded tag names where it shouldn't</li>
-<li>lxml.tests package will no longer be installed (is still in source tar)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id419">
-<h1>0.9 (2006-03-20)</h1>
-<div class="section" id="id420">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Error logging API for libxml2 error messages</li>
-<li>Various performance improvements</li>
-<li>Benchmark script for lxml, ElementTree and cElementTree</li>
-<li>Support for registering extension functions through new FunctionNamespace
-class (see doc/extensions.txt)</li>
-<li>ETXPath class for XPath expressions in ElementTree notation ('//{ns}tag')</li>
-<li>Support for variables in XPath expressions (also in XPath class)</li>
-<li>XPath class for compiled XPath expressions</li>
-<li>XMLID module level function (ElementTree compatible)</li>
-<li>XMLParser API for customized libxml2 parser configuration</li>
-<li>Support for custom Element classes through new Namespace API (see
-doc/namespace_extensions.txt)</li>
-<li>Common exception base class LxmlError for module exceptions</li>
-<li>real iterator support in iter(Element), Element.getiterator()</li>
-<li>XSLT objects are callable, result trees support str()</li>
-<li>Added MANIFEST.in for easier creation of RPM files.</li>
-<li>'getparent' method on elements allows navigation to an element's
-parent element.</li>
-<li>Python core compatible SAX tree builder and SAX event generator. See
-doc/sax.txt for more information.</li>
-</ul>
-</div>
-<div class="section" id="id421">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Segfaults and memory leaks in various API functions of Element</li>
-<li>Segfault in XSLT.tostring()</li>
-<li>ElementTree objects no longer interfere, Elements can be root of different
-ElementTrees at the same time</li>
-<li>document('') works in XSLT documents read from files (in-memory documents
-cannot support this due to libxslt deficiencies)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id422">
-<h1>0.8 (2005-11-03)</h1>
-<div class="section" id="id423">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for copy.deepcopy() on elements. copy.copy() works also, but
-does the same thing, and does <em>not</em> create a shallow copy, as that
-makes no sense in the context of libxml2 trees. This means a
-potential incompatibility with ElementTree, but there's more chance
-that it works than if copy.copy() isn't supported at all.</li>
-<li>Increased compatibility with (c)ElementTree; .parse() on ElementTree is
-supported and parsing of gzipped XML files works.</li>
-<li>implemented index() on elements, allowing one to find the index of a
-SubElement.</li>
-</ul>
-</div>
-<div class="section" id="id424">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Use xslt-config instead of xml2-config to find out libxml2
-directories to take into account a case where libxslt is installed
-in a different directory than libxslt.</li>
-<li>Eliminate crash condition in iteration when text nodes are changed.</li>
-<li>Passing 'None' to tostring() does not result in a segfault anymore,
-but an AssertionError.</li>
-<li>Some test fixes for Windows.</li>
-<li>Raise XMLSyntaxError and XPathSyntaxError instead of plain python
-syntax errors. This should be less confusing.</li>
-<li>Fixed error with uncaught exception in Pyrex code.</li>
-<li>Calling lxml.etree.fromstring('') throws XMLSyntaxError instead of a
-segfault.</li>
-<li>has_key() works on attrib. 'in' tests also work correctly on attrib.</li>
-<li>INSTALL.txt was saying 2.2.16 instead of 2.6.16 as a supported
-libxml2 version, as it should.</li>
-<li>Passing a UTF-8 encoded string to the XML() function would fail;
-fixed.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id425">
-<h1>0.7 (2005-06-15)</h1>
-<div class="section" id="id426">
-<h2>Features added</h2>
-<ul class="simple">
-<li>parameters (XPath expressions) can be passed to XSLT using keyword
-parameters.</li>
-<li>Simple XInclude support. Calling the xinclude() method on a tree
-will process any XInclude statements in the document.</li>
-<li>XMLSchema support. Use the XMLSchema class or the convenience
-xmlschema() method on a tree to do XML Schema (XSD) validation.</li>
-<li>Added convenience xslt() method on tree. This is less efficient
-than the XSLT object, but makes it easier to write quick code.</li>
-<li>Added convenience relaxng() method on tree. This is less efficient
-than the RelaxNG object, but makes it easier to write quick code.</li>
-<li>Make it possible to use XPathEvaluator with elements as well. The
-XPathEvaluator in this case will retain the element so multiple
-XPath queries can be made against one element efficiently. This
-replaces the second argument to the .evaluate() method that existed
-previously.</li>
-<li>Allow registerNamespace() to be called on an XPathEvaluator, after
-creation, to add additional namespaces. Also allow registerNamespaces(),
-which does the same for a namespace dictionary.</li>
-<li>Add 'prefix' attribute to element to be able to read prefix information.
-This is entirely read-only.</li>
-<li>It is possible to supply an extra nsmap keyword parameter to
-the Element() and SubElement() constructors, which supplies a
-prefix to namespace URI mapping. This will create namespace
-prefix declarations on these elements and these prefixes will show up
-in XML serialization.</li>
-</ul>
-</div>
-<div class="section" id="id427">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Killed yet another memory management related bug: trees created
-using newDoc would not get a libxml2-level dictionary, which caused
-problems when deallocating these documents later if they contained a
-node that came from a document with a dictionary.</li>
-<li>Moving namespaced elements between documents was problematic as
-references to the original document would remain. This has been fixed
-by applying xmlReconciliateNs() after each move operation.</li>
-<li>Can pass None to 'dump()' without segfaults.</li>
-<li>tostring() works properly for non-root elements as well.</li>
-<li>Cleaned out the tostring() method so it should handle encoding
-correctly.</li>
-<li>Cleaned out the ElementTree.write() method so it should handle encoding
-correctly. Writing directly to a file should also be faster, as there is no
-need to go through a Python string in that case. Made sure the test cases
-test both serializing to StringIO as well as serializing to a real file.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id428">
-<h1>0.6 (2005-05-14)</h1>
-<div class="section" id="id429">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Changed setup.py so that library_dirs is also guessed. This should
-help with compilation on the Mac OS X platform, where otherwise the
-wrong library (shipping with the OS) could be picked up.</li>
-<li>Tweaked setup.py so that it picks up the version from version.txt.</li>
-</ul>
-</div>
-<div class="section" id="id430">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Do the right thing when handling namespaced attributes.</li>
-<li>fix bug where tostring() moved nodes into new documents. tostring()
-had very nasty side-effects before this fix, sorry!</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id431">
-<h1>0.5.1 (2005-04-09)</h1>
-<ul class="simple">
-<li>Python 2.2 compatibility fixes.</li>
-<li>unicode fixes in Element() and Comment() as well as XML(); unicode
-input wasn't properly being UTF-8 encoded.</li>
-</ul>
-</div>
-<div class="section" id="id432">
-<h1>0.5 (2005-04-08)</h1>
-<p>Initial public release.</p>
-</div>
-</div>
-<div class="footer">
-<hr class="footer" />
-Generated on: 2021-03-21.
-
-</div>
-</body>
-</html>
diff --git a/doc/html/changes-4.6.4.html b/doc/html/changes-4.6.4.html
new file mode 100644 (file)
index 0000000..d694b38
--- /dev/null
@@ -0,0 +1,3724 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!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" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+<title>lxml changelog</title>
+<link rel="stylesheet" href="style.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="lxml-changelog">
+<h1 class="title">lxml changelog</h1>
+
+<div class="section" id="id1">
+<h1>4.6.4 (2021-11-01)</h1>
+<div class="section" id="features-added">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/317">GH#317</a>: A new property <tt class="docutils literal">system_url</tt> was added to DTD entities.
+Patch by Thirdegree.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/314">GH#314</a>: The <tt class="docutils literal">STATIC_*</tt> variables in <tt class="docutils literal">setup.py</tt> can now be passed via env vars.
+Patch by Isaac Jurado.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id2">
+<h1>4.6.3 (2021-03-21)</h1>
+<div class="section" id="bugs-fixed">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>A vulnerability (CVE-2021-28957) was discovered in the HTML Cleaner by Kevin Chung,
+which allowed JavaScript to pass through.  The cleaner now removes the HTML5
+<tt class="docutils literal">formaction</tt> attribute.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id3">
+<h1>4.6.2 (2020-11-26)</h1>
+<div class="section" id="id4">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>A vulnerability (CVE-2020-27783) was discovered in the HTML Cleaner by Yaniv Nizry,
+which allowed JavaScript to pass through.  The cleaner now removes more sneaky
+&quot;style&quot; content.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id5">
+<h1>4.6.1 (2020-10-18)</h1>
+<div class="section" id="id6">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>A vulnerability was discovered in the HTML Cleaner by Yaniv Nizry, which allowed
+JavaScript to pass through.  The cleaner now removes more sneaky &quot;style&quot; content.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id7">
+<h1>4.6.0 (2020-10-17)</h1>
+<div class="section" id="id8">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/310">GH#310</a>: <tt class="docutils literal">lxml.html.InputGetter</tt> supports <tt class="docutils literal">__len__()</tt> to count the number of input fields.
+Patch by Aidan Woolley.</li>
+<li><tt class="docutils literal">lxml.html.InputGetter</tt> has a new <tt class="docutils literal">.items()</tt> method to ease processing all input fields.</li>
+<li><tt class="docutils literal">lxml.html.InputGetter.keys()</tt> now returns the field names in document order.</li>
+<li>GH-309: The API documentation is now generated using <tt class="docutils literal"><span class="pre">sphinx-apidoc</span></tt>.
+Patch by Chris Mayo.</li>
+</ul>
+</div>
+<div class="section" id="id9">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1869455">LP#1869455</a>: C14N 2.0 serialisation failed for unprefixed attributes
+when a default namespace was defined.</li>
+<li><tt class="docutils literal">TreeBuilder.close()</tt> raised <tt class="docutils literal">AssertionError</tt> in some error cases where it
+should have raised <tt class="docutils literal">XMLSyntaxError</tt>.  It now raises a combined exception to
+keep up backwards compatibility, while switching to <tt class="docutils literal">XMLSyntaxError</tt> as an
+interface.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id10">
+<h1>4.5.2 (2020-07-09)</h1>
+<div class="section" id="id11">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">Cleaner()</tt> now validates that only known configuration options can be set.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1882606">LP#1882606</a>: <tt class="docutils literal">Cleaner.clean_html()</tt> discarded comments and PIs regardless of the
+corresponding configuration option, if <tt class="docutils literal">remove_unknown_tags</tt> was set.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1880251">LP#1880251</a>: Instead of globally overwriting the document loader in libxml2, lxml now
+sets it per parser run, which improves the interoperability with other users of libxml2
+such as libxmlsec.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1881960">LP#1881960</a>: Fix build in CPython 3.10 by using Cython 0.29.21.</li>
+<li>The setup options &quot;--with-xml2-config&quot; and &quot;--with-xslt-config&quot; were accidentally renamed
+to &quot;--xml2-config&quot; and &quot;--xslt-config&quot; in 4.5.1 and are now available again.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id12">
+<h1>4.5.1 (2020-05-19)</h1>
+<div class="section" id="id13">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1570388">LP#1570388</a>: Fix failures when serialising documents larger than 2GB in some cases.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1865141">LP#1865141</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/298">GH#298</a>: <tt class="docutils literal">QName</tt> values were not accepted by the <tt class="docutils literal">el.iter()</tt> method.
+Patch by xmo-odoo.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1863413">LP#1863413</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/297">GH#297</a>: The build failed to detect libraries on Linux that are only
+configured via pkg-config.
+Patch by Hugh McMaster.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id14">
+<h1>4.5.0 (2020-01-29)</h1>
+<div class="section" id="id15">
+<h2>Features added</h2>
+<ul class="simple">
+<li>A new function <tt class="docutils literal">indent()</tt> was added to insert tail whitespace for pretty-printing
+an XML tree.</li>
+</ul>
+</div>
+<div class="section" id="id16">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1857794">LP#1857794</a>: Tail text of nodes that get removed from a document using item
+deletion disappeared silently instead of sticking with the node that was removed.</li>
+</ul>
+</div>
+<div class="section" id="other-changes">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>MacOS builds are 64-bit-only by default.
+Set CFLAGS and LDFLAGS explicitly to override it.</li>
+<li>Linux/MacOS Binary wheels now use libxml2 2.9.10 and libxslt 1.1.34.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1840234">LP#1840234</a>: The package version number is now available as <tt class="docutils literal">lxml.__version__</tt>.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id17">
+<h1>4.4.3 (2020-01-28)</h1>
+<div class="section" id="id18">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1844674">LP#1844674</a>: <tt class="docutils literal">itertext()</tt> was missing tail text of comments and PIs since 4.4.0.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id19">
+<h1>4.4.2 (2019-11-25)</h1>
+<div class="section" id="id20">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1835708">LP#1835708</a>: <tt class="docutils literal">ElementInclude</tt> incorrectly rejected repeated non-recursive
+includes as recursive.
+Patch by Rainer Hausdorf.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id21">
+<h1>4.4.1 (2019-08-11)</h1>
+<div class="section" id="id22">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1838252">LP#1838252</a>: The order of an OrderedDict was lost in 4.4.0 when passing it as
+attrib mapping during element creation.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1838521">LP#1838521</a>: The package metadata now lists the supported Python versions.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id23">
+<h1>4.4.0 (2019-07-27)</h1>
+<div class="section" id="id24">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">Element.clear()</tt> accepts a new keyword argument <tt class="docutils literal">keep_tail=True</tt> to clear
+everything but the tail text.  This is helpful in some document-style use cases
+and for clearing the current element in <tt class="docutils literal">iterparse()</tt> and pull parsing.</li>
+<li>When creating attributes or namespaces from a dict in Python 3.6+, lxml now
+preserves the original insertion order of that dict, instead of always sorting
+the items by name.  A similar change was made for ElementTree in CPython 3.8.
+See <a class="reference external" href="https://bugs.python.org/issue34160">https://bugs.python.org/issue34160</a></li>
+<li>Integer elements in <tt class="docutils literal">lxml.objectify</tt> implement the <tt class="docutils literal">__index__()</tt> special method.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/269">GH#269</a>: Read-only elements in XSLT were missing the <tt class="docutils literal">nsmap</tt> property.
+Original patch by Jan Pazdziora.</li>
+<li>ElementInclude can now restrict the maximum inclusion depth via a <tt class="docutils literal">max_depth</tt>
+argument to prevent content explosion.  It is limited to 6 by default.</li>
+<li>The <tt class="docutils literal">target</tt> object of the XMLParser can have <tt class="docutils literal">start_ns()</tt> and <tt class="docutils literal">end_ns()</tt>
+callback methods to listen to namespace declarations.</li>
+<li>The <tt class="docutils literal">TreeBuilder</tt> has new arguments <tt class="docutils literal">comment_factory</tt> and <tt class="docutils literal">pi_factory</tt> to
+pass factories for creating comments and processing instructions, as well as
+flag arguments <tt class="docutils literal">insert_comments</tt> and <tt class="docutils literal">insert_pis</tt> to discard them from the
+tree when set to false.</li>
+<li>A <a class="reference external" href="https://www.w3.org/TR/xml-c14n2/">C14N 2.0</a> implementation was added as
+<tt class="docutils literal">etree.canonicalize()</tt>, a corresponding <tt class="docutils literal">C14NWriterTarget</tt> class, and
+a <tt class="docutils literal">c14n2</tt> serialisation method.</li>
+</ul>
+</div>
+<div class="section" id="id25">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When writing to file paths that contain the URL escape character '%', the file
+path could wrongly be mangled by URL unescaping and thus write to a different
+file or directory.  Code that writes to file paths that are provided by untrusted
+sources, but that must work with previous versions of lxml, should best either
+reject paths that contain '%' characters, or otherwise make sure that the path
+does not contain maliciously injected '%XX' URL hex escapes for paths like '../'.</li>
+<li>Assigning to Element child slices with negative step could insert the slice at
+the wrong position, starting too far on the left.</li>
+<li>Assigning to Element child slices with overly large step size could take very
+long, regardless of the length of the actual slice.</li>
+<li>Assigning to Element child slices of the wrong size could sometimes fail to
+raise a ValueError (like a list assignment would) and instead assign outside
+of the original slice bounds or leave parts of it unreplaced.</li>
+<li>The <tt class="docutils literal">comment</tt> and <tt class="docutils literal">pi</tt> events in <tt class="docutils literal">iterwalk()</tt> were never triggered, and
+instead, comments and processing instructions in the tree were reported as
+<tt class="docutils literal">start</tt> elements.  Also, when walking an ElementTree (as opposed to its root
+element), comments and PIs outside of the root element are now reported.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1827833">LP#1827833</a>: The RelaxNG compact syntax support was broken with recent versions
+of <tt class="docutils literal">rnc2rng</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1758553">LP#1758553</a>: The HTML elements <tt class="docutils literal">source</tt> and <tt class="docutils literal">track</tt> were added to the list
+of empty tags in <tt class="docutils literal">lxml.html.defs</tt>.</li>
+<li>Registering a prefix other than &quot;xml&quot; for the XML namespace is now rejected.</li>
+<li>Failing to write XSLT output to a file could raise a misleading exception.
+It now raises <tt class="docutils literal">IOError</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id26">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Support for Python 3.4 was removed.</li>
+<li>When using <tt class="docutils literal"><span class="pre">Element.find*()</span></tt> with prefix-namespace mappings, the empty string
+is now accepted to define a default namespace, in addition to the previously
+supported <tt class="docutils literal">None</tt> prefix.  Empty strings are more convenient since they keep
+all prefix keys in a namespace dict strings, which simplifies sorting etc.</li>
+<li>The <tt class="docutils literal">ElementTree.write_c14n()</tt> method has been deprecated in favour of the
+long preferred <tt class="docutils literal">ElementTree.write(f, <span class="pre">method=&quot;c14n&quot;)</span></tt>.  It will be removed
+in a future release.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id27">
+<h1>4.3.5 (2019-07-27)</h1>
+<ul class="simple">
+<li>Rebuilt with Cython 0.29.13 to support Python 3.8.</li>
+</ul>
+</div>
+<div class="section" id="id28">
+<h1>4.3.4 (2019-06-10)</h1>
+<ul class="simple">
+<li>Rebuilt with Cython 0.29.10 to support Python 3.8.</li>
+</ul>
+</div>
+<div class="section" id="id29">
+<h1>4.3.3 (2019-03-26)</h1>
+<div class="section" id="id30">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fix leak of output buffer and unclosed files in <tt class="docutils literal">_XSLTResultTree.write_output()</tt>.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id31">
+<h1>4.3.2 (2019-02-29)</h1>
+<div class="section" id="id32">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in 4.3.1 when appending a child subtree with certain text nodes.</li>
+</ul>
+</div>
+<div class="section" id="id33">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.29.6.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id34">
+<h1>4.3.1 (2019-02-08)</h1>
+<div class="section" id="id35">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1814522">LP#1814522</a>: Crash when appending a child subtree that contains unsubstituted
+entity references.</li>
+</ul>
+</div>
+<div class="section" id="id36">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.29.5.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id37">
+<h1>4.3.0 (2019-01-04)</h1>
+<div class="section" id="id38">
+<h2>Features added</h2>
+<ul class="simple">
+<li>The module <tt class="docutils literal">lxml.sax</tt> is compiled using Cython in order to speed it up.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/267">GH#267</a>: <tt class="docutils literal">lxml.sax.ElementTreeProducer</tt> now preserves the namespace prefixes.
+If two prefixes point to the same URI, the first prefix in alphabetical order
+is used.  Patch by Lennart Regebro.</li>
+<li>Updated ISO-Schematron implementation to 2013 version (now MIT licensed)
+and the corresponding schema to the 2016 version (with optional &quot;properties&quot;).</li>
+</ul>
+</div>
+<div class="section" id="id39">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/270">GH#270</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/271">GH#271</a>: Support for Python 2.6 and 3.3 was removed.
+Patch by hugovk.</li>
+<li>The minimum dependency versions were raised to libxml2 2.9.2 and libxslt 1.1.27,
+which were released in 2014 and 2012 respectively.</li>
+<li>Built with Cython 0.29.2.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id40">
+<h1>4.2.6 (2019-01-02)</h1>
+<div class="section" id="id41">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1799755">LP#1799755</a>: Fix a DeprecationWarning in Py3.7+.</li>
+<li>Import warnings in Python 3.6+ were resolved.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id42">
+<h1>4.2.5 (2018-09-09)</h1>
+<div class="section" id="id43">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Javascript URLs that used URL escaping were not removed by the HTML cleaner.
+Security problem found by Omar Eissa.  (CVE-2018-19787)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id44">
+<h1>4.2.4 (2018-08-03)</h1>
+<div class="section" id="id45">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/259">GH#259</a>: Allow using <tt class="docutils literal"><span class="pre">pkg-config</span></tt> for build configuration.
+Patch by Patrick Griffis.</li>
+</ul>
+</div>
+<div class="section" id="id46">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1773749">LP#1773749</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/268">GH#268</a>: Crash when moving an element to another document with
+<tt class="docutils literal">Element.insert()</tt>.
+Patch by Alexander Weggerle.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id47">
+<h1>4.2.3 (2018-06-27)</h1>
+<div class="section" id="id48">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Reverted <a class="reference external" href="https://github.com/lxml/lxml/issues/265">GH#265</a>: lxml links against zlib as a shared library again.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id49">
+<h1>4.2.2 (2018-06-22)</h1>
+<div class="section" id="id50">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/266">GH#266</a>: Fix sporadic crash during GC when parse-time schema validation is used
+and the parser participates in a reference cycle.
+Original patch by Julien Greard.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/265">GH#265</a>: lxml no longer links against zlib as a shared library, only on static builds.
+Patch by Nehal J Wani.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id52">
+<h1>4.2.1 (2018-03-21)</h1>
+<div class="section" id="id53">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1755825">LP#1755825</a>: <tt class="docutils literal">iterwalk()</tt> failed to return the 'start' event for the initial
+element if a tag selector is used.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1756314">LP#1756314</a>: Failure to import 4.2.0 into PyPy due to a missing library symbol.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1727864">LP#1727864</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/258">GH#258</a>: Add &quot;-isysroot&quot; linker option on MacOS as needed by XCode 9.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id54">
+<h1>4.2.0 (2018-03-13)</h1>
+<div class="section" id="id55">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/255">GH#255</a>: <tt class="docutils literal">SelectElement.value</tt> returns more standard-compliant and
+browser-like defaults for non-multi-selects.  If no option is selected, the
+value of the first option is returned (instead of None).  If multiple options
+are selected, the value of the last one is returned (instead of that of the
+first one).  If no options are present (not standard-compliant)
+<tt class="docutils literal">SelectElement.value</tt> still returns <tt class="docutils literal">None</tt>.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/261">GH#261</a>: The <tt class="docutils literal">HTMLParser()</tt> now supports the <tt class="docutils literal">huge_tree</tt> option.
+Patch by stranac.</li>
+</ul>
+</div>
+<div class="section" id="id56">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: Some XSLT messages were not captured by the transform error log.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1737825">LP#1737825</a>: Crash at shutdown after an interrupted iterparse run with XMLSchema
+validation.</li>
+</ul>
+</div>
+<div class="section" id="id57">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id58">
+<h1>4.1.1 (2017-11-04)</h1>
+<ul class="simple">
+<li>Rebuild with Cython 0.27.3 to improve support for Py3.7.</li>
+</ul>
+</div>
+<div class="section" id="id59">
+<h1>4.1.0 (2017-10-13)</h1>
+<div class="section" id="id60">
+<h2>Features added</h2>
+<ul class="simple">
+<li>ElementPath supports text predicates for current node, like &quot;[.='text']&quot;.</li>
+<li>ElementPath allows spaces in predicates.</li>
+<li>Custom Element classes and XPath functions can now be registered with a
+decorator rather than explicit dict assignments.</li>
+<li>Static Linux wheels are now built with link time optimisation (LTO) enabled.
+This should have a beneficial impact on the overall performance by providing
+a tighter compiler integration between lxml and libxml2/libxslt.</li>
+</ul>
+</div>
+<div class="section" id="id61">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1722776">LP#1722776</a>: Requesting non-Element objects like comments from a document with
+<tt class="docutils literal">PythonElementClassLookup</tt> could fail with a TypeError.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id62">
+<h1>4.0.0 (2017-09-17)</h1>
+<div class="section" id="id63">
+<h2>Features added</h2>
+<ul class="simple">
+<li>The ElementPath implementation is now compiled using Cython,
+which speeds up the <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods quite significantly.</li>
+<li>The modules <tt class="docutils literal">lxml.builder</tt>, <tt class="docutils literal">lxml.html.diff</tt> and <tt class="docutils literal">lxml.html.clean</tt>
+are also compiled using Cython in order to speed them up.</li>
+<li><tt class="docutils literal">xmlfile()</tt> supports async coroutines using <tt class="docutils literal">async with</tt> and <tt class="docutils literal">await</tt>.</li>
+<li><tt class="docutils literal">iterwalk()</tt> has a new method <tt class="docutils literal">skip_subtree()</tt> that prevents walking into
+the descendants of the current element.</li>
+<li><tt class="docutils literal">RelaxNG.from_rnc_string()</tt> accepts a <tt class="docutils literal">base_url</tt> argument to
+allow relative resource lookups.</li>
+<li>The XSLT result object has a new method <tt class="docutils literal">.write_output(file)</tt> that serialises
+output data into a file according to the <tt class="docutils literal">&lt;xsl:output&gt;</tt> configuration.</li>
+</ul>
+</div>
+<div class="section" id="id64">
+<h2>Bugs fixed</h2>
+<ul>
+<li><p class="first"><a class="reference external" href="https://github.com/lxml/lxml/issues/251">GH#251</a>: HTML comments were handled incorrectly by the soupparser.
+Patch by mozbugbox.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1654544">LP#1654544</a>: The html5parser no longer passes the <tt class="docutils literal">useChardet</tt> option
+if the input is a Unicode string, unless explicitly requested.  When parsing
+files, the default is to enable it when a URL or file path is passed (because
+the file is then opened in binary mode), and to disable it when reading from
+a file(-like) object.</p>
+<p>Note: This is a backwards incompatible change of the default configuration.
+If your code parses byte strings/streams and depends on character detection,
+please pass the option <tt class="docutils literal">guess_charset=True</tt> explicitly, which already worked
+in older lxml versions.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1703810">LP#1703810</a>: <tt class="docutils literal">etree.fromstring()</tt> failed to parse UTF-32 data with BOM.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1526522">LP#1526522</a>: Some RelaxNG errors were not reported in the error log.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1567526">LP#1567526</a>: Empty and plain text input raised a TypeError in soupparser.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1710429">LP#1710429</a>: Uninitialised variable usage in HTML diff.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1415643">LP#1415643</a>: The closing tags context manager in <tt class="docutils literal">xmlfile()</tt> could continue
+to output end tags even after writing failed with an exception.</p>
+</li>
+<li><p class="first"><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1465357">LP#1465357</a>: <tt class="docutils literal">xmlfile.write()</tt> now accepts and ignores None as input argument.</p>
+</li>
+<li><p class="first">Compilation under Py3.7-pre failed due to a modified function signature.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="id65">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The main module source files were renamed from <tt class="docutils literal"><span class="pre">lxml.*.pyx</span></tt> to plain
+<tt class="docutils literal">*.pyx</tt> (e.g. <tt class="docutils literal">etree.pyx</tt>) to simplify their handling in the build
+process.  Care was taken to keep the old header files as fallbacks for
+code that compiles against the public C-API of lxml, but it might still
+be worth validating that third-party code does not notice this change.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id66">
+<h1>3.8.0 (2017-06-03)</h1>
+<div class="section" id="id67">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">ElementTree.write()</tt> has a new option <tt class="docutils literal">doctype</tt> that writes out a
+doctype string before the serialisation, in the same way as <tt class="docutils literal">tostring()</tt>.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/220">GH#220</a>: <tt class="docutils literal">xmlfile</tt> allows switching output methods at an element level.
+Patch by Burak Arslan.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1595781">LP#1595781</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/240">GH#240</a>: added a PyCapsule Python API and C-level API for
+passing externally generated libxml2 documents into lxml.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/244">GH#244</a>: error log entries have a new property <tt class="docutils literal">path</tt> with an XPath
+expression (if known, None otherwise) that points to the tree element
+responsible for the error. Patch by Bob Kline.</li>
+<li>The namespace prefix mapping that can be used in ElementPath now injects
+a default namespace when passing a None prefix.</li>
+</ul>
+</div>
+<div class="section" id="id68">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/238">GH#238</a>: Character escapes were not hex-encoded in the <tt class="docutils literal">xmlfile</tt> serialiser.
+Patch by matejcik.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/229">GH#229</a>: fix for externally created XML documents.  Patch by Theodore Dubois.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1665241">LP#1665241</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/228">GH#228</a>: Form data handling in lxml.html no longer strips the
+option values specified in form attributes but only the text values.
+Patch by Ashish Kulkarni.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: revert previous fix for XSLT error logging as it breaks
+multi-threaded XSLT processing.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1673355">LP#1673355</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/233">GH#233</a>: <tt class="docutils literal">fromstring()</tt> html5parser failed to parse byte strings.</li>
+</ul>
+</div>
+<div class="section" id="id70">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The previously undocumented <tt class="docutils literal">docstring</tt> option in <tt class="docutils literal">ElementTree.write()</tt>
+produces a deprecation warning and will eventually be removed.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id71">
+<h1>3.7.4 (2017-??-??)</h1>
+<div class="section" id="id72">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: revert previous fix for XSLT error logging as it breaks
+multi-threaded XSLT processing.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1673355">LP#1673355</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/233">GH#233</a>: <tt class="docutils literal">fromstring()</tt> html5parser failed to parse byte strings.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id76">
+<h1>3.7.3 (2017-02-18)</h1>
+<div class="section" id="id77">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/218">GH#218</a> was ineffective in Python 3.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/222">GH#222</a>: <tt class="docutils literal">lxml.html.submit_form()</tt> failed in Python 3.
+Patch by Jakub Wilk.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id78">
+<h1>3.7.2 (2017-01-08)</h1>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/220">GH#220</a>: <tt class="docutils literal">xmlfile</tt> allows switching output methods at an element level.
+Patch by Burak Arslan.</li>
+</ul>
+<div class="section" id="id80">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Work around installation problems in recent Python 2.7 versions
+due to FTP download failures.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/219">GH#219</a>: <tt class="docutils literal">xmlfile.element()</tt> was not properly quoting attribute values.
+Patch by Burak Arslan.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/218">GH#218</a>: <tt class="docutils literal">xmlfile.element()</tt> was not properly escaping text content of
+script/style tags.  Patch by Burak Arslan.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id82">
+<h1>3.7.1 (2016-12-23)</h1>
+<ul class="simple">
+<li>No source changes, issued only to solve problems with the
+binary packages released for 3.7.0.</li>
+</ul>
+</div>
+<div class="section" id="id83">
+<h1>3.7.0 (2016-12-10)</h1>
+<div class="section" id="id84">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/217">GH#217</a>: <tt class="docutils literal">XMLSyntaxError</tt> now behaves more like its <tt class="docutils literal">SyntaxError</tt>
+baseclass.  Patch by Philipp A.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/216">GH#216</a>: <tt class="docutils literal">HTMLParser()</tt> now supports the same <tt class="docutils literal">collect_ids</tt> parameter
+as <tt class="docutils literal">XMLParser()</tt>.  Patch by Burak Arslan.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/210">GH#210</a>: Allow specifying a serialisation method in <tt class="docutils literal">xmlfile.write()</tt>.
+Patch by Burak Arslan.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/203">GH#203</a>: New option <tt class="docutils literal">default_doctype</tt> in <tt class="docutils literal">HTMLParser</tt> that allows
+disabling the automatic doctype creation.  Patch by Shadab Zafar.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/201">GH#201</a>: Calling the method <tt class="docutils literal"><span class="pre">.set('attrname')</span></tt> without value argument
+(or <tt class="docutils literal">None</tt>) on HTML elements creates an attribute without value that
+serialises like <tt class="docutils literal">&lt;div <span class="pre">attrname&gt;&lt;/div&gt;</span></tt>.  Patch by Daniel Holth.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/197">GH#197</a>: Ignore form input fields in <tt class="docutils literal">form_values()</tt> when they are
+marked as <tt class="docutils literal">disabled</tt> in HTML.  Patch by Kristian Klemon.</li>
+</ul>
+</div>
+<div class="section" id="id85">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/206">GH#206</a>: File name and line number were missing from XSLT error messages.
+Patch by Marcus Brinkmann.</li>
+</ul>
+</div>
+<div class="section" id="id86">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Log entries no longer allow anything but plain string objects as message text
+and file name.</li>
+<li><tt class="docutils literal">zlib</tt> is included in the list of statically built libraries.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id87">
+<h1>3.6.4 (2016-08-20)</h1>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/204">GH#204</a>, <a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1614693">LP#1614693</a>: build fix for MacOS-X.</li>
+</ul>
+</div>
+<div class="section" id="id88">
+<h1>3.6.3 (2016-08-18)</h1>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1614603">LP#1614603</a>: change linker flags to build multi-linux wheels</li>
+</ul>
+</div>
+<div class="section" id="id89">
+<h1>3.6.2 (2016-08-18)</h1>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1614603">LP#1614603</a>: release without source changes to provide cleanly built Linux wheels</li>
+</ul>
+</div>
+<div class="section" id="id91">
+<h1>3.6.1 (2016-07-24)</h1>
+<div class="section" id="id92">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/180">GH#180</a>: Separate option <tt class="docutils literal">inline_style</tt> for Cleaner that only removes <tt class="docutils literal">style</tt>
+attributes instead of all styles.  Patch by Christian Pedersen.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/196">GH#196</a>: Windows build support for Python 3.5.  Contribution by Maximilian Hils.</li>
+</ul>
+</div>
+<div class="section" id="id93">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/199">GH#199</a>: Exclude <tt class="docutils literal">file</tt> fields from <tt class="docutils literal">FormElement.form_values</tt> (as browsers do).
+Patch by Tomas Divis.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/198">GH#198</a>, <a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1568167">LP#1568167</a>: Try to provide base URL from <tt class="docutils literal">Resolver.resolve_string()</tt>.
+Patch by Michael van Tellingen.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/191">GH#191</a>: More accurate float serialisation in <tt class="docutils literal">objectify.FloatElement</tt>.
+Patch by Holger Joukl.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1551797">LP#1551797</a>: Repair XSLT error logging. Patch by Marcus Brinkmann.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id95">
+<h1>3.6.0 (2016-03-17)</h1>
+<div class="section" id="id96">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/187">GH#187</a>: Now supports (only) version 5.x and later of PyPy.
+Patch by Armin Rigo.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/181">GH#181</a>: Direct support for <tt class="docutils literal">.rnc</tt> files in <cite>RelaxNG()</cite> if <tt class="docutils literal">rnc2rng</tt>
+is installed.  Patch by Dirkjan Ochtman.</li>
+</ul>
+</div>
+<div class="section" id="id97">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/189">GH#189</a>: Static builds honour FTP proxy configurations when downloading
+the external libs.  Patch by Youhei Sakurai.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/186">GH#186</a>: Soupparser failed to process entities in Python 3.x.
+Patch by Duncan Morris.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/185">GH#185</a>: Rare encoding related <tt class="docutils literal">TypeError</tt> on import was fixed.
+Patch by Petr Demin.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id98">
+<h1>3.5.0 (2015-11-13)</h1>
+<div class="section" id="id99">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Unicode string results failed XPath queries in PyPy.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1497051">LP#1497051</a>: HTML target parser failed to terminate on exceptions
+and continued parsing instead.</li>
+<li>Deprecated API usage in doctestcompare.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="b1-2015-09-18">
+<h1>3.5.0b1 (2015-09-18)</h1>
+<div class="section" id="id100">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">cleanup_namespaces()</tt> accepts a new argument <tt class="docutils literal">keep_ns_prefixes</tt>
+that does not remove definitions of the provided prefix-namespace
+mapping from the tree.</li>
+<li><tt class="docutils literal">cleanup_namespaces()</tt> accepts a new argument <tt class="docutils literal">top_nsmap</tt> that
+moves definitions of the provided prefix-namespace mapping to the
+top of the tree.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1490451">LP#1490451</a>: <tt class="docutils literal">Element</tt> objects gained a <tt class="docutils literal">cssselect()</tt> method as
+known from <tt class="docutils literal">lxml.html</tt>.  Patch by Simon Sapin.</li>
+<li>API functions and methods behave and look more like Python functions,
+which allows introspection on them etc.  One side effect to be aware of
+is that the functions now bind as methods when assigned to a class
+variable.  A quick fix is to wrap them in <tt class="docutils literal">staticmethod()</tt> (as for
+normal Python functions).</li>
+<li>ISO-Schematron support gained an option <tt class="docutils literal">error_finder</tt> that allows
+passing a filter function for picking validation errors from reports.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1243600">LP#1243600</a>: Elements in <tt class="docutils literal">lxml.html</tt> gained a <tt class="docutils literal">classes</tt> property
+that provides a set-like interface to the <tt class="docutils literal">class</tt> attribute.
+Original patch by masklinn.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1341964">LP#1341964</a>: The soupparser now handles DOCTYPE declarations, comments
+and processing instructions outside of the root element.
+Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1421512">LP#1421512</a>: The <tt class="docutils literal">docinfo</tt> of a tree was made editable to allow
+setting and removing the public ID and system ID of the DOCTYPE.
+Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1442427">LP#1442427</a>: More work-arounds for quirks and bugs in pypy and pypy3.</li>
+<li><tt class="docutils literal">lxml.html.soupparser</tt> now uses BeautifulSoup version 4 instead
+of version 3 if available.</li>
+</ul>
+</div>
+<div class="section" id="id101">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory errors that occur during tree adaptations (e.g. moving subtrees
+to foreign documents) could leave the tree in a crash prone state.</li>
+<li>Calling <tt class="docutils literal">process_children()</tt> in an XSLT extension element without
+an <tt class="docutils literal">output_parent</tt> argument failed with a <tt class="docutils literal">TypeError</tt>.
+Fix by Jens Tröger.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/162">GH#162</a>: Image data in HTML <tt class="docutils literal">data</tt> URLs is considered safe and
+no longer removed by <tt class="docutils literal">lxml.html.clean</tt> JavaScript cleaner.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/166">GH#166</a>: Static build could link libraries in wrong order.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/172">GH#172</a>: Rely a bit more on libxml2 for encoding detection rather than
+rolling our own in some cases.  Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/159">GH#159</a>: Validity checks for names and string content were tightened
+to detect the use of illegal characters early.  Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1421921">LP#1421921</a>: Comments/PIs before the DOCTYPE declaration were not
+serialised.  Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/659367">LP#659367</a>: Some HTML DOCTYPE declarations were not serialised.
+Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1238503">LP#1238503</a>: lxml.doctestcompare is now consistent with stdlib's doctest
+in how it uses <tt class="docutils literal">+</tt> and <tt class="docutils literal">-</tt> to refer to unexpected and missing output.</li>
+<li>Empty prefixes are explicitly rejected when a namespace mapping is used
+with ElementPath to avoid hiding bugs in user code.</li>
+<li>Several problems with PyPy were fixed by switching to Cython 0.23.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id102">
+<h1>3.4.4 (2015-04-25)</h1>
+<div class="section" id="id103">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>An ElementTree compatibility test added in lxml 3.4.3 that failed in
+Python 3.4+ was removed again.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id104">
+<h1>3.4.3 (2015-04-15)</h1>
+<div class="section" id="id105">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Expression cache in ElementPath was ignored.  Fix by Changaco.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1426868">LP#1426868</a>: Passing a default namespace and a prefixed namespace mapping
+as nsmap into <tt class="docutils literal">xmlfile.element()</tt> raised a <tt class="docutils literal">TypeError</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1421927">LP#1421927</a>: DOCTYPE system URLs were incorrectly quoted when containing
+double quotes.  Patch by Olli Pottonen.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1419354">LP#1419354</a>: meta-redirect URLs were incorrectly processed by
+<tt class="docutils literal">iterlinks()</tt> if preceded by whitespace.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id106">
+<h1>3.4.2 (2015-02-07)</h1>
+<div class="section" id="id107">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1415907">LP#1415907</a>: Crash when creating an XMLSchema from a non-root element
+of an XML document.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1369362">LP#1369362</a>: HTML cleaning failed when hitting processing instructions
+with pseudo-attributes.</li>
+<li><tt class="docutils literal">CDATA()</tt> wrapped content was rejected for tail text.</li>
+<li>CDATA sections were not serialised as tail text of the top-level element.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id108">
+<h1>3.4.1 (2014-11-20)</h1>
+<div class="section" id="id109">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New <tt class="docutils literal">htmlfile</tt> HTML generator to accompany the incremental <tt class="docutils literal">xmlfile</tt>
+serialisation API.  Patch by Burak Arslan.</li>
+</ul>
+</div>
+<div class="section" id="id110">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.sax.ElementTreeContentHandler</tt> did not initialise its superclass.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id111">
+<h1>3.4.0 (2014-09-10)</h1>
+<div class="section" id="id112">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">xmlfile(buffered=False)</tt> disables output buffering and flushes the
+content after each API operation (starting/ending element blocks or writes).
+A new method <tt class="docutils literal">xf.flush()</tt> can alternatively be used to explicitly flush
+the output.</li>
+<li><tt class="docutils literal">lxml.html.document_fromstring</tt> has a new option <tt class="docutils literal">ensure_head_body=True</tt>
+which will add an empty head and/or body element to the result document if
+missing.</li>
+<li><tt class="docutils literal">lxml.html.iterlinks</tt> now returns links inside meta refresh tags.</li>
+<li>New <tt class="docutils literal">XMLParser</tt> option <tt class="docutils literal">collect_ids=False</tt> to disable ID hash table
+creation.  This can substantially speed up parsing of documents with many
+different IDs that are not used.</li>
+<li>The parser uses per-document hash tables for XML IDs.  This reduces the
+load of the global parser dict and speeds up parsing for documents with
+many different IDs.</li>
+<li><tt class="docutils literal">ElementTree.getelementpath(element)</tt> returns a structural ElementPath
+expression for the given element, which can be used for lookups later.</li>
+<li><tt class="docutils literal">xmlfile()</tt> accepts a new argument <tt class="docutils literal">close=True</tt> to close file(-like)
+objects after writing to them.  Before, <tt class="docutils literal">xmlfile()</tt> only closed the file
+if it had opened it internally.</li>
+<li>Allow &quot;bytearray&quot; type for ASCII text input.</li>
+</ul>
+</div>
+<div class="section" id="id113">
+<h2>Bugs fixed</h2>
+</div>
+<div class="section" id="id114">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/400588">LP#400588</a>: decoding errors have become hard errors even in recovery mode.
+Previously, they could lead to an internal tree representation in a mixed
+encoding state, which lead to very late errors or even silently incorrect
+behaviour during tree traversal or serialisation.</li>
+<li>Requires Python 2.6, 2.7, 3.2 or later. No longer supports
+Python 2.4, 2.5 and 3.1, use lxml 3.3.x for those.</li>
+<li>Requires libxml2 2.7.0 or later and libxslt 1.1.23 or later,
+use lxml 3.3.x with older versions.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id115">
+<h1>3.3.6 (2014-08-28)</h1>
+<div class="section" id="id116">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Prevent tree cycle creation when adding Elements as siblings.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1361948">LP#1361948</a>: crash when deallocating Element siblings without parent.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1354652">LP#1354652</a>: crash when traversing internally loaded documents in XSLT
+extension functions.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id117">
+<h1>3.3.5 (2014-04-18)</h1>
+<div class="section" id="id118">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>HTML cleaning could fail to strip javascript links that mix control
+characters into the link scheme.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id119">
+<h1>3.3.4 (2014-04-03)</h1>
+<div class="section" id="id120">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Source line numbers above 65535 are available on Elements when
+using libxml2 2.9 or later.</li>
+</ul>
+</div>
+<div class="section" id="id121">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.fragment_fromstring()</tt> failed for bytes input in Py3.</li>
+</ul>
+</div>
+<div class="section" id="id122">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id123">
+<h1>3.3.3 (2014-03-04)</h1>
+<div class="section" id="id124">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1287118">LP#1287118</a>: Crash when using Element subtypes with <tt class="docutils literal">__slots__</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id125">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The internal classes <tt class="docutils literal">_LogEntry</tt> and <tt class="docutils literal">_Attrib</tt> can no longer be
+subclassed from Python code.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id126">
+<h1>3.3.2 (2014-02-26)</h1>
+<div class="section" id="id127">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The properties <tt class="docutils literal">resolvers</tt> and <tt class="docutils literal">version</tt>, as well as the methods
+<tt class="docutils literal">set_element_class_lookup()</tt> and <tt class="docutils literal">makeelement()</tt>, were lost from
+<tt class="docutils literal">iterparse</tt> objects in 3.3.0.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1222132">LP#1222132</a>: instances of <tt class="docutils literal">XMLSchema</tt>, <tt class="docutils literal">Schematron</tt> and <tt class="docutils literal">RelaxNG</tt>
+did not clear their local <tt class="docutils literal">error_log</tt> before running a validation.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1238500">LP#1238500</a>: lxml.doctestcompare mixed up &quot;expected&quot; and &quot;actual&quot; in
+attribute values.</li>
+<li>Some file I/O tests were failing in MS-Windows due to non-portable temp
+file usage.  Initial patch by Gabi Davar.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/910014">LP#910014</a>: duplicate IDs in a document were not reported by DTD validation.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1185332">LP#1185332</a>: <tt class="docutils literal"><span class="pre">tostring(method=&quot;html&quot;)</span></tt> did not use HTML serialisation
+semantics for trailing tail text.  Initial patch by Sylvain Viollon.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1281139">LP#1281139</a>: <tt class="docutils literal">.attrib</tt> value of Comments lost its mutation methods
+in 3.3.0.  Even though it is empty and immutable, it should still
+provide the same interface as that returned for Elements.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id128">
+<h1>3.3.1 (2014-02-12)</h1>
+<div class="section" id="id129">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id130">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1014290">LP#1014290</a>: HTML documents parsed with <tt class="docutils literal">parser.feed()</tt> failed to find
+elements during tag iteration.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1273709">LP#1273709</a>: Building in PyPy failed due to missing support for
+<tt class="docutils literal">PyUnicode_Compare()</tt> and <tt class="docutils literal"><span class="pre">PyByteArray_*()</span></tt> in PyPy's C-API.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1274413">LP#1274413</a>: Compilation in MSVC failed due to missing &quot;stdint.h&quot; standard
+header file.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1274118">LP#1274118</a>: iterparse() failed to parse BOM prefixed files.</li>
+</ul>
+</div>
+<div class="section" id="id131">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id132">
+<h1>3.3.0 (2014-01-26)</h1>
+<div class="section" id="id133">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id134">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The heuristic that distinguishes file paths from URLs was tightened
+to produce less false negatives.</li>
+</ul>
+</div>
+<div class="section" id="id135">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="beta5-2014-01-18">
+<h1>3.3.0beta5 (2014-01-18)</h1>
+<div class="section" id="id136">
+<h2>Features added</h2>
+<ul class="simple">
+<li>The PEP 393 unicode parsing support gained a fallback for wchar strings
+which might still be somewhat common on Windows systems.</li>
+</ul>
+</div>
+<div class="section" id="id137">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Several error handling problems were fixed throughout the code base that
+could previously lead to exceptions being silently swallowed or not
+properly reported.</li>
+<li>The C-API function <tt class="docutils literal">appendChild()</tt> is now deprecated as it does not
+propagate exceptions (its return type is <tt class="docutils literal">void</tt>).  The new function
+<tt class="docutils literal">appendChildToElement()</tt> was added as a safe replacement.</li>
+<li>Passing a string into <tt class="docutils literal">fromstringlist()</tt> raises an exception instead of
+parsing the string character by character.</li>
+</ul>
+</div>
+<div class="section" id="id138">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Document cleanup code was simplified using the new GC features in
+Cython 0.20.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta4-2014-01-12">
+<h1>3.3.0beta4 (2014-01-12)</h1>
+<div class="section" id="id139">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id140">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The (empty) value returned by the <tt class="docutils literal">attrib</tt> property of Entity and Comment
+objects was mutable.</li>
+<li>Element class lookup wasn't available for the new pull parsers or when using
+a custom parser target.</li>
+<li>Setting Element attributes on instantiation with both the <tt class="docutils literal">attrib</tt> argument
+and keyword arguments could modify the mapping passed as <tt class="docutils literal">attrib</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1266171">LP#1266171</a>: DTDs instantiated from internal/external subsets (i.e. through
+the docinfo property) lost their attribute declarations.</li>
+</ul>
+</div>
+<div class="section" id="id141">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.20pre (gitrev 012ae82eb) to prepare support for
+Python 3.4.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta3-2014-01-02">
+<h1>3.3.0beta3 (2014-01-02)</h1>
+<div class="section" id="id142">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Unicode string parsing was optimised for Python 3.3 (PEP 393).</li>
+</ul>
+</div>
+<div class="section" id="id143">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>HTML parsing of Unicode strings could misdecode the input on some platforms.</li>
+<li>Crash in xmlfile() when closing open elements out of order in an error case.</li>
+</ul>
+</div>
+<div class="section" id="id144">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="beta2-2013-12-20">
+<h1>3.3.0beta2 (2013-12-20)</h1>
+<div class="section" id="id145">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">iterparse()</tt> supports the <tt class="docutils literal">recover</tt> option.</li>
+</ul>
+</div>
+<div class="section" id="id146">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in <tt class="docutils literal">iterparse()</tt> for HTML parsing.</li>
+<li>Crash in target parsing with attributes.</li>
+</ul>
+</div>
+<div class="section" id="id147">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The safety check in the read-only tree implementation (e.g. used by
+<tt class="docutils literal">PythonElementClassLookup</tt>) raises a more appropriate <tt class="docutils literal">ReferenceError</tt>
+for illegal access after tree disposal instead of an <tt class="docutils literal">AssertionError</tt>.
+This should only impact test code that specifically checks the original
+behaviour.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2013-12-12">
+<h1>3.3.0beta1 (2013-12-12)</h1>
+<div class="section" id="id148">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New option <tt class="docutils literal">handle_failures</tt> in <tt class="docutils literal">make_links_absolute()</tt> and
+<tt class="docutils literal">resolve_base_href()</tt> (lxml.html) that enables ignoring or
+discarding links that fail to parse as URLs.</li>
+<li>New parser classes <tt class="docutils literal">XMLPullParser</tt> and <tt class="docutils literal">HTMLPullParser</tt> for
+incremental parsing, as implemented for ElementTree in Python 3.4.</li>
+<li><tt class="docutils literal">iterparse()</tt> enables recovery mode by default for HTML parsing
+(<tt class="docutils literal">html=True</tt>).</li>
+</ul>
+</div>
+<div class="section" id="id149">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1255132">LP#1255132</a>: crash when trying to run validation over non-Element (e.g.
+comment or PI).</li>
+<li>Error messages in the log and in exception messages that originated
+from libxml2 could accidentally be picked up from preceding warnings
+instead of the actual error.</li>
+<li>The <tt class="docutils literal">ElementMaker</tt> in lxml.objectify did not accept a dict as
+argument for adding attributes to the element it's building. This
+works as in lxml.builder now.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1228881">LP#1228881</a>: <tt class="docutils literal">repr(XSLTAccessControl)</tt> failed in Python 3.</li>
+<li>Raise <tt class="docutils literal">ValueError</tt> when trying to append an Element to itself or
+to one of its own descendants, instead of running into an infinite
+loop.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1206077">LP#1206077</a>: htmldiff discarded whitespace from the output.</li>
+<li>Compressed plain-text serialisation to file-like objects was broken.</li>
+<li>lxml.html.formfill: Fix textarea form filling.
+The textarea used to be cleared before the new content was set,
+which removed the name attribute.</li>
+</ul>
+</div>
+<div class="section" id="id150">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Some basic API classes use freelists internally for faster
+instantiation.  This can speed up some <tt class="docutils literal">iterparse()</tt> scenarios,
+for example.</li>
+<li><tt class="docutils literal">iterparse()</tt> was rewritten to use the new <tt class="docutils literal">*PullParser</tt>
+classes internally instead of being a parser itself.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id151">
+<h1>3.2.5 (2014-01-02)</h1>
+<div class="section" id="id152">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id153">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in xmlfile() when closing open elements out of order in an error case.</li>
+<li>Crash in target parsing with attributes.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1255132">LP#1255132</a>: crash when trying to run validation over non-Element (e.g.
+comment or PI).</li>
+</ul>
+</div>
+<div class="section" id="id155">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id156">
+<h1>3.2.4 (2013-11-07)</h1>
+<div class="section" id="id157">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id158">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory leak when creating an XPath evaluator in a thread.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1228881">LP#1228881</a>: <tt class="docutils literal">repr(XSLTAccessControl)</tt> failed in Python 3.</li>
+<li>Raise <tt class="docutils literal">ValueError</tt> when trying to append an Element to itself or
+to one of its own descendants.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1206077">LP#1206077</a>: htmldiff discarded whitespace from the output.</li>
+<li>Compressed plain-text serialisation to file-like objects was broken.</li>
+</ul>
+</div>
+<div class="section" id="id161">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id162">
+<h1>3.2.3 (2013-07-28)</h1>
+<div class="section" id="id163">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fix support for Python 2.4 which was lost in 3.2.2.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id164">
+<h1>3.2.2 (2013-07-28)</h1>
+<div class="section" id="id165">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id166">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1185701">LP#1185701</a>: spurious XMLSyntaxError after finishing iterparse().</li>
+<li>Crash in lxml.objectify during xsi annotation.</li>
+</ul>
+</div>
+<div class="section" id="id167">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Return values of user provided element class lookup methods are now
+validated against the type of the XML node they represent to prevent
+API class mismatches.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id168">
+<h1>3.2.1 (2013-05-11)</h1>
+<div class="section" id="id169">
+<h2>Features added</h2>
+<ul class="simple">
+<li>The methods <tt class="docutils literal">apply_templates()</tt> and <tt class="docutils literal">process_children()</tt> of XSLT
+extension elements have gained two new boolean options <tt class="docutils literal">elements_only</tt>
+and <tt class="docutils literal">remove_blank_text</tt> that discard either all strings or whitespace-only
+strings from the result list.</li>
+</ul>
+</div>
+<div class="section" id="id170">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When moving Elements to another tree, the namespace cleanup mechanism
+no longer drops namespace prefixes from attributes for which it finds
+a default namespace declaration, to prevent them from appearing as
+unnamespaced attributes after serialisation.</li>
+<li>Returning non-type objects from a custom class lookup method could lead
+to a crash.</li>
+<li>Instantiating and using subtypes of Comments and ProcessingInstructions
+crashed.</li>
+</ul>
+</div>
+<div class="section" id="id171">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id172">
+<h1>3.2.0 (2013-04-28)</h1>
+<div class="section" id="id173">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id174">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/690319">LP#690319</a>: Leading whitespace could change the behaviour of the string
+parsing functions in <tt class="docutils literal">lxml.html</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/599318">LP#599318</a>: The string parsing functions in <tt class="docutils literal">lxml.html</tt> are more robust
+in the face of uncommon HTML content like framesets or missing body tags.
+Patch by Stefan Seelmann.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/712941">LP#712941</a>: I/O errors while trying to access files with paths that contain
+non-ASCII characters could raise <tt class="docutils literal">UnicodeDecodeError</tt> instead of properly
+reporting the <tt class="docutils literal">IOError</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/673205">LP#673205</a>: Parsing from in-memory strings disabled network access in the
+default parser and made subsequent attempts to parse from a URL fail.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/971754">LP#971754</a>: lxml.html.clean appends 'nofollow' to 'rel' attributes instead
+of overwriting the current value.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/715687">LP#715687</a>: lxml.html.clean no longer discards scripts that are explicitly
+allowed by the user provided whitelist.  Patch by Christine Koppelt.</li>
+</ul>
+</div>
+<div class="section" id="id175">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id176">
+<h1>3.1.2 (2013-04-12)</h1>
+<div class="section" id="id177">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id178">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1136509">LP#1136509</a>: Passing attributes through the namespace-unaware API of
+the sax bridge (i.e. the <tt class="docutils literal">handler.startElement()</tt> method) failed
+with a <tt class="docutils literal">TypeError</tt>.  Patch by Mike Bayer.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1123074">LP#1123074</a>: Fix serialisation error in XSLT output when converting
+the result tree to a Unicode string.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/105">GH#105</a>: Replace illegal usage of <tt class="docutils literal">xmlBufLength()</tt> in libxml2 2.9.0
+by properly exported API function <tt class="docutils literal">xmlBufUse()</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id179">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id180">
+<h1>3.1.1 (2013-03-29)</h1>
+<div class="section" id="id181">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id182">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1160386">LP#1160386</a>: Write access to <tt class="docutils literal">lxml.html.FormElement.fields</tt> raised
+an AttributeError in Py3.</li>
+<li>Illegal memory access during cleanup in incremental xmlfile writer.</li>
+</ul>
+</div>
+<div class="section" id="id183">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The externally useless class <tt class="docutils literal">lxml.etree._BaseParser</tt> was removed
+from the module dict.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id184">
+<h1>3.1.0 (2013-02-10)</h1>
+<div class="section" id="id185">
+<h2>Features added</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/89">GH#89</a>: lxml.html.clean allows overriding the set of attributes that it
+considers 'safe'.  Patch by Francis Devereux.</li>
+</ul>
+</div>
+<div class="section" id="id186">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1104370">LP#1104370</a>: <tt class="docutils literal">copy.copy(el.attrib)</tt> raised an exception.  It now returns
+a copy of the attributes as a plain Python dict.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/95">GH#95</a>: When used with namespace prefixes, the  <tt class="docutils literal"><span class="pre">el.find*()</span></tt> methods
+always used the first namespace mapping that was provided for each
+path expression instead of using the one that was actually passed
+in for the current run.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1092521">LP#1092521</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/91">GH#91</a>: Fix undefined C symbol in Python runtimes compiled
+without threading support.  Patch by Ulrich Seidl.</li>
+</ul>
+</div>
+<div class="section" id="id187">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="beta1-2012-12-21">
+<h1>3.1beta1 (2012-12-21)</h1>
+<div class="section" id="id188">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New build-time option <tt class="docutils literal"><span class="pre">--with-unicode-strings</span></tt> for Python 2 that
+makes the API always return Unicode strings for names and text
+instead of byte strings for plain ASCII content.</li>
+<li>New incremental XML file writing API <tt class="docutils literal">etree.xmlfile()</tt>.</li>
+<li>E factory in lxml.objectify is callable to simplify the creation of
+tags with non-identifier names without having to resort to getattr().</li>
+</ul>
+</div>
+<div class="section" id="id189">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When starting from a non-namespaced element in lxml.objectify, searching
+for a child without explicitly specifying a namespace incorrectly found
+namespaced elements with the requested local name, instead of restricting
+the search to non-namespaced children.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/85">GH#85</a>: Deprecation warnings were fixed for Python 3.x.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/33">GH#33</a>: lxml.html.fromstring() failed to accept bytes input in Py3.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1080792">LP#1080792</a>: Static build of libxml2 2.9.0 failed due to missing file.</li>
+</ul>
+</div>
+<div class="section" id="id190">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The externally useless class <tt class="docutils literal">_ObjectifyElementMakerCaller</tt> was
+removed from the module API of lxml.objectify.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1075622">LP#1075622</a>: lxml.builder is faster for adding text to elements with
+many children.  Patch by Anders Hammarquist.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id191">
+<h1>3.0.2 (2012-12-14)</h1>
+<div class="section" id="id192">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id193">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fix crash during interpreter shutdown by switching to Cython 0.17.3 for building.</li>
+</ul>
+</div>
+<div class="section" id="id194">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id195">
+<h1>3.0.1 (2012-10-14)</h1>
+<div class="section" id="id196">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id197">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1065924">LP#1065924</a>: Element proxies could disappear during garbage collection
+in PyPy without proper cleanup.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/71">GH#71</a>: Failure to work with libxml2 2.6.x.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1065139">LP#1065139</a>: static MacOS-X build failed in Py3.</li>
+</ul>
+</div>
+<div class="section" id="id198">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id199">
+<h1>3.0 (2012-10-08)</h1>
+<div class="section" id="id200">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id201">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>End-of-file handling was incorrect in iterparse() when reading from
+a low-level C file stream and failed in libxml2 2.9.0 due to its
+improved consistency checks.</li>
+</ul>
+</div>
+<div class="section" id="id202">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The build no longer uses Cython by default unless the generated C files
+are missing.  To use Cython, pass the option &quot;--with-cython&quot;.  To ignore
+the fatal build error when Cython is required but not available (e.g. to
+run special setup.py commands that do not actually run a build), pass
+&quot;--without-cython&quot;.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2012-09-26">
+<h1>3.0beta1 (2012-09-26)</h1>
+<div class="section" id="id203">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Python level access to (optional) libxml2 memory debugging features
+to simplify debugging of memory leaks etc.</li>
+</ul>
+</div>
+<div class="section" id="id204">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fix a memory leak in XPath by switching to Cython 0.17.1.</li>
+<li>Some tests were adapted to work with PyPy.</li>
+</ul>
+</div>
+<div class="section" id="id205">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The code was adapted to work with the upcoming libxml2 2.9.0 release.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="alpha2-2012-08-23">
+<h1>3.0alpha2 (2012-08-23)</h1>
+<div class="section" id="id206">
+<h2>Features added</h2>
+<ul class="simple">
+<li>The <tt class="docutils literal">.iter()</tt> method of elements now accepts <tt class="docutils literal">tag</tt> arguments like
+<tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt> to search for elements with a given local name in any
+namespace. With this addition, all combinations of wildcards now work
+as expected:
+<tt class="docutils literal">&quot;{ns}name&quot;</tt>, <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{ns}*&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{}*&quot;</span></tt>
+and <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.  Note that <tt class="docutils literal">&quot;name&quot;</tt> is equivalent to <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>,
+but <tt class="docutils literal">&quot;*&quot;</tt> is <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.
+The same change applies to the <tt class="docutils literal">.getiterator()</tt>, <tt class="docutils literal">.itersiblings()</tt>,
+<tt class="docutils literal">.iterancestors()</tt>, <tt class="docutils literal">.iterdescendants()</tt>, <tt class="docutils literal">.iterchildren()</tt>
+and <tt class="docutils literal">.itertext()</tt> methods;the <tt class="docutils literal">strip_attributes()</tt>,
+<tt class="docutils literal">strip_elements()</tt> and <tt class="docutils literal">strip_tags()</tt> functions as well as the
+<tt class="docutils literal">iterparse()</tt> class.  Patch by Simon Sapin.</li>
+<li>C14N allows specifying the inclusive prefixes to be promoted
+to top-level during exclusive serialisation.</li>
+</ul>
+</div>
+<div class="section" id="id207">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Passing long Unicode strings into the <tt class="docutils literal">feed()</tt> parser interface
+failed to read the entire string.</li>
+</ul>
+</div>
+<div class="section" id="id208">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="alpha1-2012-07-31">
+<h1>3.0alpha1 (2012-07-31)</h1>
+<div class="section" id="id209">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Initial support for building in PyPy (through cpyext).</li>
+<li>DTD objects gained an API that allows read access to their
+declarations.</li>
+<li><tt class="docutils literal">xpathgrep.py</tt> gained support for parsing line-by-line (e.g.
+from grep output) and for surrounding the output with a new root
+tag.</li>
+<li><tt class="docutils literal"><span class="pre">E-factory</span></tt> in <tt class="docutils literal">lxml.builder</tt> accepts subtypes of known data
+types (such as string subtypes) when building elements around them.</li>
+<li>Tree iteration and <tt class="docutils literal">iterparse()</tt> with a selective <tt class="docutils literal">tag</tt>
+argument supports passing a set of tags.  Tree nodes will be
+returned by the iterators if they match any of the tags.</li>
+</ul>
+</div>
+<div class="section" id="id210">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods in <tt class="docutils literal">lxml.objectify</tt> no longer use XPath
+internally, which makes them faster in many cases (especially when
+short circuiting after a single or couple of elements) and fixes
+some behavioural differences compared to <tt class="docutils literal">lxml.etree</tt>.  Note that
+this means that they no longer support arbitrary XPath expressions
+but only the subset that the <tt class="docutils literal">ElementPath</tt> language supports.
+The previous implementation was also redundant with the normal
+XPath support, which can be used as a replacement.</li>
+<li><tt class="docutils literal"><span class="pre">el.find('*')</span></tt> could accidentally return a comment or processing
+instruction that happened to be in the wrong spot.  (Same for the
+other <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods.)</li>
+<li>The error logging is less intrusive and avoids a global setup where
+possible.</li>
+<li>Fixed undefined names in html5lib parser.</li>
+<li><tt class="docutils literal">xpathgrep.py</tt> did not work in Python 3.</li>
+<li><tt class="docutils literal">Element.attrib.update()</tt> did not accept an <tt class="docutils literal">attrib</tt> of
+another Element as parameter.</li>
+<li>For subtypes of <tt class="docutils literal">ElementBase</tt> that make the <tt class="docutils literal">.text</tt> or <tt class="docutils literal">.tail</tt>
+properties immutable (as in objectify, for example), inserting text
+when creating Elements through the E-Factory feature of the class
+constructor would fail with an exception, stating that the text
+cannot be modified.</li>
+</ul>
+</div>
+<div class="section" id="id211">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The code base was overhauled to properly use 'const' where the API
+of libxml2 and libxslt requests it.  This also has an impact on the
+public C-API of lxml itself, as defined in <tt class="docutils literal">etreepublic.pxd</tt>, as
+well as the provided declarations in the <tt class="docutils literal">lxml/includes/</tt> directory.
+Code that uses these declarations may have to be adapted.  On the
+plus side, this fixes several C compiler warnings, also for user
+code, thus making it easier to spot real problems again.</li>
+<li>The functionality of &quot;lxml.cssselect&quot; was moved into a separate PyPI
+package called &quot;cssselect&quot;.  To continue using it, you must install
+that package separately.  The &quot;lxml.cssselect&quot; module is still
+available and provides the same interface, provided the &quot;cssselect&quot;
+package can be imported at runtime.</li>
+<li>Element attributes passed in as an <tt class="docutils literal">attrib</tt> dict or as keyword
+arguments are now sorted by (namespaced) name before being created
+to make their order predictable for serialisation and iteration.
+Note that adding or deleting attributes afterwards does not take
+that order into account, i.e. setting a new attribute appends it
+after the existing ones.</li>
+<li>Several classes that are for internal use only were removed
+from the <tt class="docutils literal">lxml.etree</tt> module dict:
+<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ResolverContext, _BaseContext,
+_ExsltRegExp, _IterparseContext, _TempStore, _ExceptionContext,
+__ContentOnlyElement, _AttribIterator, _NamespaceRegistry,
+_ClassNamespaceRegistry, _FunctionNamespaceRegistry,
+_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
+_FileReaderContext, _ParserContext, _PythonSaxParserTarget,
+_TargetParserContext, _ReadOnlyProxy, _ReadOnlyPIProxy,
+_ReadOnlyEntityProxy, _ReadOnlyElementProxy, _OpaqueNodeWrapper,
+_OpaqueDocumentWrapper, _ModifyContentOnlyProxy,
+_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
+_AppendOnlyElementProxy, _SaxParserContext, _FilelikeWriter,
+_ParserSchemaValidationContext, _XPathContext,
+_XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam</tt></li>
+<li>Several internal classes can no longer be inherited from:
+<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ExsltRegExp, _ElementUnicodeResult,
+_IterparseContext, _TempStore, _AttribIterator, _ClassNamespaceRegistry,
+_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
+_FileReaderContext, _PythonSaxParserTarget, _TargetParserContext,
+_ReadOnlyPIProxy, _ReadOnlyEntityProxy, _OpaqueDocumentWrapper,
+_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
+_AppendOnlyElementProxy, _FilelikeWriter, _ParserSchemaValidationContext,
+_XPathContext, _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam,
+_XSLTResultTree, _XSLTProcessingInstruction</tt></li>
+</ul>
+</div>
+</div>
+<div class="section" id="id212">
+<h1>2.3.6 (2012-09-28)</h1>
+<div class="section" id="id213">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id214">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Passing long Unicode strings into the <tt class="docutils literal">feed()</tt> parser interface
+failed to read the entire string.</li>
+</ul>
+</div>
+<div class="section" id="id215">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id216">
+<h1>2.3.5 (2012-07-31)</h1>
+<div class="section" id="id217">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id218">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when merging text nodes in <tt class="docutils literal">element.remove()</tt>.</li>
+<li>Crash in sax/target parser when reporting empty doctype.</li>
+</ul>
+</div>
+<div class="section" id="id219">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id220">
+<h1>2.3.4 (2012-03-26)</h1>
+<div class="section" id="id221">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id222">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when building an nsmap (Element property) with empty
+namespace URIs.</li>
+<li>Crash due to race condition when errors (or user messages) occur
+during threaded XSLT processing.</li>
+<li>XSLT stylesheet compilation could ignore compilation errors.</li>
+</ul>
+</div>
+<div class="section" id="id223">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id224">
+<h1>2.3.3 (2012-01-04)</h1>
+<div class="section" id="id225">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.tostring()</tt> gained new serialisation options
+<tt class="docutils literal">with_tail</tt> and <tt class="docutils literal">doctype</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id226">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fixed a crash when using <tt class="docutils literal">iterparse()</tt> for HTML parsing and
+requesting start events.</li>
+<li>Fixed parsing of more selectors in cssselect.  Whitespace before
+pseudo-elements and pseudo-classes is significant as it is a
+descendant combinator.
+&quot;E :pseudo&quot; should parse the same as &quot;E *:pseudo&quot;, not &quot;E:pseudo&quot;.
+Patch by Simon Sapin.</li>
+<li>lxml.html.diff no longer raises an exception when hitting
+'img' tags without 'src' attribute.</li>
+</ul>
+</div>
+<div class="section" id="id227">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id228">
+<h1>2.3.2 (2011-11-11)</h1>
+<div class="section" id="id229">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.objectify.deannotate()</tt> has a new boolean option
+<tt class="docutils literal">cleanup_namespaces</tt> to remove the objectify namespace
+declarations (and generally clean up the namespace declarations)
+after removing the type annotations.</li>
+<li><tt class="docutils literal">lxml.objectify</tt> gained its own <tt class="docutils literal">SubElement()</tt> function as a
+copy of <tt class="docutils literal">etree.SubElement</tt> to avoid an otherwise redundant import
+of <tt class="docutils literal">lxml.etree</tt> on the user side.</li>
+</ul>
+</div>
+<div class="section" id="id230">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fixed the &quot;descendant&quot; bug in cssselect a second time (after a first
+fix in lxml 2.3.1).  The previous change resulted in a serious
+performance regression for the XPath based evaluation of the
+translated expression.  Note that this breaks the usage of some of
+the generated XPath expressions as XSLT location paths that
+previously worked in 2.3.1.</li>
+<li>Fixed parsing of some selectors in cssselect. Whitespace after combinators
+&quot;&gt;&quot;, &quot;+&quot; and &quot;~&quot; is now correctly ignored. Previously it was parsed as
+a descendant combinator. For example, &quot;div&gt; .foo&quot; was parsed the same as
+&quot;div&gt;* .foo&quot; instead of &quot;div&gt;.foo&quot;. Patch by Simon Sapin.</li>
+</ul>
+</div>
+<div class="section" id="id231">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id232">
+<h1>2.3.1 (2011-09-25)</h1>
+<div class="section" id="id233">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New option <tt class="docutils literal">kill_tags</tt> in <tt class="docutils literal">lxml.html.clean</tt> to remove specific
+tags and their content (i.e. their whole subtree).</li>
+<li><tt class="docutils literal">pi.get()</tt> and <tt class="docutils literal">pi.attrib</tt> on processing instructions to parse
+pseudo-attributes from the text content of processing instructions.</li>
+<li><tt class="docutils literal">lxml.get_include()</tt> returns a list of include paths that can be
+used to compile external C code against lxml.etree.  This is
+specifically required for statically linked lxml builds when code
+needs to compile against the exact same header file versions as lxml
+itself.</li>
+<li><tt class="docutils literal">Resolver.resolve_file()</tt> takes an additional option
+<tt class="docutils literal">close_file</tt> that configures if the file(-like) object will be
+closed after reading or not.  By default, the file will be closed,
+as the user is not expected to keep a reference to it.</li>
+</ul>
+</div>
+<div class="section" id="id234">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>HTML cleaning didn't remove 'data:' links.</li>
+<li>The html5lib parser integration now uses the 'official'
+implementation in html5lib itself, which makes it work with newer
+releases of the library.</li>
+<li>In <tt class="docutils literal">lxml.sax</tt>, <tt class="docutils literal">endElementNS()</tt> could incorrectly reject a plain
+tag name when the corresponding start event inferred the same plain
+tag name to be in the default namespace.</li>
+<li>When an open file-like object is passed into <tt class="docutils literal">parse()</tt> or
+<tt class="docutils literal">iterparse()</tt>, the parser will no longer close it after use.  This
+reverts a change in lxml 2.3 where all files would be closed.  It is
+the users responsibility to properly close the file(-like) object,
+also in error cases.</li>
+<li>Assertion error in lxml.html.cleaner when discarding top-level elements.</li>
+<li>In lxml.cssselect, use the xpath 'A//B' (short for
+'A/descendant-or-self::node()/B') instead of 'A/descendant::B' for
+the css descendant selector ('A B').  This makes a few edge cases
+like <tt class="docutils literal">&quot;div <span class="pre">*:last-child&quot;</span></tt> consistent with the selector behavior in
+WebKit and Firefox, and makes more css expressions valid location
+paths (for use in xsl:template match).</li>
+<li>In lxml.html, non-selected <tt class="docutils literal">&lt;option&gt;</tt> tags no longer show up in the
+collected form values.</li>
+<li>Adding/removing <tt class="docutils literal">&lt;option&gt;</tt> values to/from a multiple select form
+field properly selects them and unselects them.</li>
+</ul>
+</div>
+<div class="section" id="id235">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Static builds can specify the download directory with the
+<tt class="docutils literal"><span class="pre">--download-dir</span></tt> option.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id236">
+<h1>2.3 (2011-02-06)</h1>
+<div class="section" id="id237">
+<h2>Features added</h2>
+<ul class="simple">
+<li>When looking for children, <tt class="docutils literal">lxml.objectify</tt> takes '{}tag' as
+meaning an empty namespace, as opposed to the parent namespace.</li>
+</ul>
+</div>
+<div class="section" id="id238">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When finished reading from a file-like object, the parser
+immediately calls its <tt class="docutils literal">.close()</tt> method.</li>
+<li>When finished parsing, <tt class="docutils literal">iterparse()</tt> immediately closes the input
+file.</li>
+<li>Work-around for libxml2 bug that can leave the HTML parser in a
+non-functional state after parsing a severely broken document (fixed
+in libxml2 2.7.8).</li>
+<li><tt class="docutils literal">marque</tt> tag in HTML cleanup code is correctly named <tt class="docutils literal">marquee</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id239">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Some public functions in the Cython-level C-API have more explicit
+return types.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2010-09-06">
+<h1>2.3beta1 (2010-09-06)</h1>
+<div class="section" id="id240">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id241">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in newer libxml2 versions when moving elements between
+documents that had attributes on replaced XInclude nodes.</li>
+<li><tt class="docutils literal">XMLID()</tt> function was missing the optional <tt class="docutils literal">parser</tt> and
+<tt class="docutils literal">base_url</tt> parameters.</li>
+<li>Searching for wildcard tags in <tt class="docutils literal">iterparse()</tt> was broken in Py3.</li>
+<li><tt class="docutils literal">lxml.html.open_in_browser()</tt> didn't work in Python 3 due to the
+use of os.tempnam.  It now takes an optional 'encoding' parameter.</li>
+</ul>
+</div>
+<div class="section" id="id242">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="alpha2-2010-07-24">
+<h1>2.3alpha2 (2010-07-24)</h1>
+<div class="section" id="id243">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id244">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in XSLT when generating text-only result documents with a
+stylesheet created in a different thread.</li>
+</ul>
+</div>
+<div class="section" id="id245">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><tt class="docutils literal">repr()</tt> of Element objects shows the hex ID with leading 0x
+(following ElementTree 1.3).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="alpha1-2010-06-19">
+<h1>2.3alpha1 (2010-06-19)</h1>
+<div class="section" id="id246">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Keyword argument <tt class="docutils literal">namespaces</tt> in <tt class="docutils literal">lxml.cssselect.CSSSelector()</tt>
+to pass a prefix-to-namespace mapping for the selector.</li>
+<li>New function <tt class="docutils literal">lxml.etree.register_namespace(prefix, uri)</tt> that
+globally registers a namespace prefix for a namespace that newly
+created Elements in that namespace will use automatically.  Follows
+ElementTree 1.3.</li>
+<li>Support 'unicode' string name as encoding parameter in
+<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
+<li>Support 'c14n' serialisation method in <tt class="docutils literal">ElementTree.write()</tt> and
+<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
+<li>The ElementPath expression syntax (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) was extended to
+match the upcoming ElementTree 1.3 that will ship in the standard
+library of Python 3.2/2.7.  This includes extended support for
+predicates as well as namespace prefixes (as known from XPath).</li>
+<li>During regular XPath evaluation, various ESXLT functions are
+available within their namespace when using libxslt 1.1.26 or later.</li>
+<li>Support passing a readily configured logger instance into
+<tt class="docutils literal">PyErrorLog</tt>, instead of a logger name.</li>
+<li>On serialisation, the new <tt class="docutils literal">doctype</tt> parameter can be used to
+override the DOCTYPE (internal subset) of the document.</li>
+<li>New parameter <tt class="docutils literal">output_parent</tt> to <tt class="docutils literal">XSLTExtension.apply_templates()</tt>
+to append the resulting content directly to an output element.</li>
+<li><tt class="docutils literal">XSLTExtension.process_children()</tt> to process the content of the
+XSLT extension element itself.</li>
+<li>ISO-Schematron support based on the de-facto Schematron reference
+'skeleton implementation'.</li>
+<li>XSLT objects now take XPath object as <tt class="docutils literal">__call__</tt> stylesheet
+parameters.</li>
+<li>Enable path caching in ElementPath (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) to avoid parsing
+overhead.</li>
+<li>Setting the value of a namespaced attribute always uses a prefixed
+namespace instead of the default namespace even if both declare the
+same namespace URI.  This avoids serialisation problems when an
+attribute from a default namespace is set on an element from a
+different namespace.</li>
+<li>XSLT extension elements: support for XSLT context nodes other than
+elements: document root, comments, processing instructions.</li>
+<li>Support for strings (in addition to Elements) in node-sets returned
+by extension functions.</li>
+<li>Forms that lack an <tt class="docutils literal">action</tt> attribute default to the base URL of
+the document on submit.</li>
+<li>XPath attribute result strings have an <tt class="docutils literal">attrname</tt> property.</li>
+<li>Namespace URIs get validated against RFC 3986 at the API level
+(required by the XML namespace specification).</li>
+<li>Target parsers show their target object in the <tt class="docutils literal">.target</tt> property
+(compatible with ElementTree).</li>
+</ul>
+</div>
+<div class="section" id="id247">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>API is hardened against invalid proxy instances to prevent crashes
+due to incorrectly instantiated Element instances.</li>
+<li>Prevent crash when instantiating <tt class="docutils literal">CommentBase</tt> and friends.</li>
+<li>Export ElementTree compatible XML parser class as
+<tt class="docutils literal">XMLTreeBuilder</tt>, as it is called in ET 1.2.</li>
+<li>ObjectifiedDataElements in lxml.objectify were not hashable.  They
+now use the hash value of the underlying Python value (string,
+number, etc.) to which they compare equal.</li>
+<li>Parsing broken fragments in lxml.html could fail if the fragment
+contained an orphaned closing '&lt;/div&gt;' tag.</li>
+<li>Using XSLT extension elements around the root of the output document
+crashed.</li>
+<li><tt class="docutils literal">lxml.cssselect</tt> did not distinguish between <tt class="docutils literal"><span class="pre">x[attr=&quot;val&quot;]</span></tt> and
+<tt class="docutils literal">x <span class="pre">[attr=&quot;val&quot;]</span></tt> (with a space).  The latter now matches the
+attribute independent of the element.</li>
+<li>Rewriting multiple links inside of HTML text content could end up
+replacing unrelated content as replacements could impact the
+reported position of subsequent matches.  Modifications are now
+simplified by letting the <tt class="docutils literal">iterlinks()</tt> generator in <tt class="docutils literal">lxml.html</tt>
+return links in reversed order if they appear inside the same text
+node.  Thus, replacements and link-internal modifications no longer
+change the position of links reported afterwards.</li>
+<li>The <tt class="docutils literal">.value</tt> attribute of <tt class="docutils literal">textarea</tt> elements in lxml.html did
+not represent the complete raw value (including child tags etc.). It
+now serialises the complete content on read and replaces the
+complete content by a string on write.</li>
+<li>Target parser didn't call <tt class="docutils literal">.close()</tt> on the target object if
+parsing failed.  Now it is guaranteed that <tt class="docutils literal">.close()</tt> will be
+called after parsing, regardless of the outcome.</li>
+</ul>
+</div>
+<div class="section" id="id248">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Official support for Python 3.1.2 and later.</li>
+<li>Static MS Windows builds can now download their dependencies
+themselves.</li>
+<li><tt class="docutils literal">Element.attrib</tt> no longer uses a cyclic reference back to its
+Element object.  It therefore no longer requires the garbage
+collector to clean up.</li>
+<li>Static builds include libiconv, in addition to libxml2 and libxslt.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id249">
+<h1>2.2.8 (2010-09-02)</h1>
+<div class="section" id="id250">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in newer libxml2 versions when moving elements between
+documents that had attributes on replaced XInclude nodes.</li>
+<li>Import fix for urljoin in Python 3.1+.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id251">
+<h1>2.2.7 (2010-07-24)</h1>
+<div class="section" id="id252">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in XSLT when generating text-only result documents with a
+stylesheet created in a different thread.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id253">
+<h1>2.2.6 (2010-03-02)</h1>
+<div class="section" id="id254">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fixed several Python 3 regressions by building with Cython 0.11.3.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id255">
+<h1>2.2.5 (2010-02-28)</h1>
+<div class="section" id="id256">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for running XSLT extension elements on the input root node
+(e.g. in a template matching on &quot;/&quot;).</li>
+</ul>
+</div>
+<div class="section" id="id257">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in XPath evaluation when reading smart strings from a document
+other than the original context document.</li>
+<li>Support recent versions of html5lib by not requiring its
+<tt class="docutils literal">XHTMLParser</tt> in <tt class="docutils literal">htmlparser.py</tt> anymore.</li>
+<li>Manually instantiating the custom element classes in
+<tt class="docutils literal">lxml.objectify</tt> could crash.</li>
+<li>Invalid XML text characters were not rejected by the API when they
+appeared in unicode strings directly after non-ASCII characters.</li>
+<li>lxml.html.open_http_urllib() did not work in Python 3.</li>
+<li>The functions <tt class="docutils literal">strip_tags()</tt> and <tt class="docutils literal">strip_elements()</tt> in
+<tt class="docutils literal">lxml.etree</tt> did not remove all occurrences of a tag in all cases.</li>
+<li>Crash in XSLT extension elements when the XSLT context node is not
+an element.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id258">
+<h1>2.2.4 (2009-11-11)</h1>
+<div class="section" id="id259">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Static build of libxml2/libxslt was broken.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id260">
+<h1>2.2.3 (2009-10-30)</h1>
+<div class="section" id="id261">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id262">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The <tt class="docutils literal">resolve_entities</tt> option did not work in the incremental feed
+parser.</li>
+<li>Looking up and deleting attributes without a namespace could hit a
+namespaced attribute of the same name instead.</li>
+<li>Late errors during calls to <tt class="docutils literal">SubElement()</tt> (e.g. attribute related
+ones) could leave a partially initialised element in the tree.</li>
+<li>Modifying trees that contain parsed entity references could result
+in an infinite loop.</li>
+<li>ObjectifiedElement.__setattr__ created an empty-string child element when the
+attribute value was rejected as a non-unicode/non-ascii string</li>
+<li>Syntax errors in <tt class="docutils literal">lxml.cssselect</tt> could result in misleading error
+messages.</li>
+<li>Invalid syntax in CSS expressions could lead to an infinite loop in
+the parser of <tt class="docutils literal">lxml.cssselect</tt>.</li>
+<li>CSS special character escapes were not properly handled in
+<tt class="docutils literal">lxml.cssselect</tt>.</li>
+<li>CSS Unicode escapes were not properly decoded in <tt class="docutils literal">lxml.cssselect</tt>.</li>
+<li>Select options in HTML forms that had no explicit <tt class="docutils literal">value</tt>
+attribute were not handled correctly.  The HTML standard dictates
+that their value is defined by their text content.  This is now
+supported by lxml.html.</li>
+<li>XPath raised a TypeError when finding CDATA sections.  This is now
+fully supported.</li>
+<li>Calling <tt class="docutils literal">help(lxml.objectify)</tt> didn't work at the prompt.</li>
+<li>The <tt class="docutils literal">ElementMaker</tt> in lxml.objectify no longer defines the default
+namespaces when annotation is disabled.</li>
+<li>Feed parser failed to honour the 'recover' option on parse errors.</li>
+<li>Diverting the error logging to Python's logging system was broken.</li>
+</ul>
+</div>
+<div class="section" id="id263">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id264">
+<h1>2.2.2 (2009-06-21)</h1>
+<div class="section" id="id265">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New helper functions <tt class="docutils literal">strip_attributes()</tt>, <tt class="docutils literal">strip_elements()</tt>,
+<tt class="docutils literal">strip_tags()</tt> in lxml.etree to remove attributes/subtrees/tags
+from a subtree.</li>
+</ul>
+</div>
+<div class="section" id="id266">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Namespace cleanup on subtree insertions could result in missing
+namespace declarations (and potentially crashes) if the element
+defining a namespace was deleted and the namespace was not used by
+the top element of the inserted subtree but only in deeper subtrees.</li>
+<li>Raising an exception from a parser target callback didn't always
+terminate the parser.</li>
+<li>Only {true, false, 1, 0} are accepted as the lexical representation for
+BoolElement ({True, False, T, F, t, f} not any more), restoring lxml &lt;= 2.0
+behaviour.</li>
+</ul>
+</div>
+<div class="section" id="id267">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id268">
+<h1>2.2.1 (2009-06-02)</h1>
+<div class="section" id="id269">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Injecting default attributes into a document during XML Schema
+validation (also at parse time).</li>
+<li>Pass <tt class="docutils literal">huge_tree</tt> parser option to disable parser security
+restrictions imposed by libxml2 2.7.</li>
+</ul>
+</div>
+<div class="section" id="id270">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The script for statically building libxml2 and libxslt didn't work
+in Py3.</li>
+<li><tt class="docutils literal">XMLSchema()</tt> also passes invalid schema documents on to libxml2
+for parsing (which could lead to a crash before release 2.6.24).</li>
+</ul>
+</div>
+<div class="section" id="id271">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id272">
+<h1>2.2 (2009-03-21)</h1>
+<div class="section" id="id273">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for <tt class="docutils literal">standalone</tt> flag in XML declaration through
+<tt class="docutils literal">tree.docinfo.standalone</tt> and by passing <tt class="docutils literal">standalone=True/False</tt>
+on serialisation.</li>
+</ul>
+</div>
+<div class="section" id="id274">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when parsing an XML Schema with external imports from a
+filename.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta4-2009-02-27">
+<h1>2.2beta4 (2009-02-27)</h1>
+<div class="section" id="id275">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support strings and instantiable Element classes as child arguments
+to the constructor of custom Element classes.</li>
+<li>GZip compression support for serialisation to files and file-like
+objects.</li>
+</ul>
+</div>
+<div class="section" id="id276">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Deep-copying an ElementTree copied neither its sibling PIs and
+comments nor its internal/external DTD subsets.</li>
+<li>Soupparser failed on broken attributes without values.</li>
+<li>Crash in XSLT when overwriting an already defined attribute using
+<tt class="docutils literal">xsl:attribute</tt>.</li>
+<li>Crash bug in exception handling code under Python 3.  This was due
+to a problem in Cython, not lxml itself.</li>
+<li><tt class="docutils literal">lxml.html.FormElement._name()</tt> failed for non top-level forms.</li>
+<li><tt class="docutils literal">TAG</tt> special attribute in constructor of custom Element classes
+was evaluated incorrectly.</li>
+</ul>
+</div>
+<div class="section" id="id277">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Official support for Python 3.0.1.</li>
+<li><tt class="docutils literal">Element.findtext()</tt> now returns an empty string instead of None
+for Elements without text content.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta3-2009-02-17">
+<h1>2.2beta3 (2009-02-17)</h1>
+<div class="section" id="id278">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">XSLT.strparam()</tt> class method to wrap quoted string parameters
+that require escaping.</li>
+</ul>
+</div>
+<div class="section" id="id279">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory leak in XPath evaluators.</li>
+<li>Crash when parsing indented XML in one thread and merging it with
+other documents parsed in another thread.</li>
+<li>Setting the <tt class="docutils literal">base</tt> attribute in <tt class="docutils literal">lxml.objectify</tt> from a unicode
+string failed.</li>
+<li>Fixes following changes in Python 3.0.1.</li>
+<li>Minor fixes for Python 3.</li>
+</ul>
+</div>
+<div class="section" id="id280">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The global error log (which is copied into the exception log) is now
+local to a thread, which fixes some race conditions.</li>
+<li>More robust error handling on serialisation.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta2-2009-01-25">
+<h1>2.2beta2 (2009-01-25)</h1>
+<div class="section" id="id281">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Potential memory leak on exception handling.  This was due to a
+problem in Cython, not lxml itself.</li>
+<li><tt class="docutils literal">iter_links</tt> (and related link-rewriting functions) in
+<tt class="docutils literal">lxml.html</tt> would interpret CSS like <tt class="docutils literal"><span class="pre">url(&quot;link&quot;)</span></tt> incorrectly
+(treating the quotation marks as part of the link).</li>
+<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id282">
+<h1>2.1.5 (2009-01-06)</h1>
+<div class="section" id="id283">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Potential memory leak on exception handling.  This was due to a
+problem in Cython, not lxml itself.</li>
+<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2008-12-12">
+<h1>2.2beta1 (2008-12-12)</h1>
+<div class="section" id="id284">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Allow <tt class="docutils literal">lxml.html.diff.htmldiff</tt> to accept Element objects, not
+just HTML strings.</li>
+</ul>
+</div>
+<div class="section" id="id285">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when using an XPath evaluator in multiple threads.</li>
+<li>Fixed missing whitespace before <tt class="docutils literal"><span class="pre">Link:...</span></tt> in <tt class="docutils literal">lxml.html.diff</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id286">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Export <tt class="docutils literal">lxml.html.parse</tt>.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id287">
+<h1>2.1.4 (2008-12-12)</h1>
+<div class="section" id="id288">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when using an XPath evaluator in multiple threads.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id289">
+<h1>2.0.11 (2008-12-12)</h1>
+<div class="section" id="id290">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when using an XPath evaluator in multiple threads.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="alpha1-2008-11-23">
+<h1>2.2alpha1 (2008-11-23)</h1>
+<div class="section" id="id291">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for XSLT result tree fragments in XPath/XSLT extension
+functions.</li>
+<li>QName objects have new properties <tt class="docutils literal">namespace</tt> and <tt class="docutils literal">localname</tt>.</li>
+<li>New options for exclusive C14N and C14N without comments.</li>
+<li>Instantiating a custom Element classes creates a new Element.</li>
+</ul>
+</div>
+<div class="section" id="id292">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>XSLT didn't inherit the parse options of the input document.</li>
+<li>0-bytes could slip through the API when used inside of Unicode
+strings.</li>
+<li>With <tt class="docutils literal">lxml.html.clean.autolink</tt>, links with balanced parenthesis,
+that end in a parenthesis, will be linked in their entirety (typical
+with Wikipedia links).</li>
+</ul>
+</div>
+<div class="section" id="id293">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id294">
+<h1>2.1.3 (2008-11-17)</h1>
+<div class="section" id="id295">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id296">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Ref-count leaks when lxml enters a try-except statement while an
+outside exception lives in sys.exc_*(). This was due to a problem in
+Cython, not lxml itself.</li>
+<li>Parser Unicode decoding errors could get swallowed by other
+exceptions.</li>
+<li>Name/import errors in some Python modules.</li>
+<li>Internal DTD subsets that did not specify a system or public ID were
+not serialised and did not appear in the docinfo property of
+ElementTrees.</li>
+<li>Fix a pre-Py3k warning when parsing from a gzip file in Py2.6.</li>
+<li>Test suite fixes for libxml2 2.7.</li>
+<li>Resolver.resolve_string() did not work for non-ASCII byte strings.</li>
+<li>Resolver.resolve_file() was broken.</li>
+<li>Overriding the parser encoding didn't work for many encodings.</li>
+</ul>
+</div>
+<div class="section" id="id297">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id298">
+<h1>2.0.10 (2008-11-17)</h1>
+<div class="section" id="id299">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Ref-count leaks when lxml enters a try-except statement while an
+outside exception lives in sys.exc_*(). This was due to a problem in
+Cython, not lxml itself.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id300">
+<h1>2.1.2 (2008-09-05)</h1>
+<div class="section" id="id301">
+<h2>Features added</h2>
+<ul class="simple">
+<li>lxml.etree now tries to find the absolute path name of files when
+parsing from a file-like object.  This helps custom resolvers when
+resolving relative URLs, as lixbml2 can prepend them with the path
+of the source document.</li>
+</ul>
+</div>
+<div class="section" id="id302">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory problem when passing documents between threads.</li>
+<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
+exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
+</ul>
+</div>
+<div class="section" id="id303">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id304">
+<h1>2.0.9 (2008-09-05)</h1>
+<div class="section" id="id305">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory problem when passing documents between threads.</li>
+<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
+exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id306">
+<h1>2.1.1 (2008-07-24)</h1>
+<div class="section" id="id307">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id308">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when parsing XSLT stylesheets in a thread and using them in
+another.</li>
+<li>Encoding problem when including text with ElementInclude under
+Python 3.</li>
+</ul>
+</div>
+<div class="section" id="id309">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id310">
+<h1>2.0.8 (2008-07-24)</h1>
+<div class="section" id="id311">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.rewrite_links()</tt> strips links to work around documents
+with whitespace in URL attributes.</li>
+</ul>
+</div>
+<div class="section" id="id312">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when parsing XSLT stylesheets in a thread and using them in
+another.</li>
+<li>CSS selector parser dropped remaining expression after a function
+with parameters.</li>
+</ul>
+</div>
+<div class="section" id="id313">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id314">
+<h1>2.1 (2008-07-09)</h1>
+<div class="section" id="id315">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Smart strings can be switched off in XPath (<tt class="docutils literal">smart_strings</tt>
+keyword option).</li>
+<li><tt class="docutils literal">lxml.html.rewrite_links()</tt> strips links to work around documents
+with whitespace in URL attributes.</li>
+</ul>
+</div>
+<div class="section" id="id316">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Custom resolvers were not used for XMLSchema includes/imports and
+XInclude processing.</li>
+<li>CSS selector parser dropped remaining expression after a function
+with parameters.</li>
+</ul>
+</div>
+<div class="section" id="id317">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><tt class="docutils literal">objectify.enableRecursiveStr()</tt> was removed, use
+<tt class="docutils literal">objectify.enable_recursive_str()</tt> instead</li>
+<li>Speed-up when running XSLTs on documents from other threads</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id318">
+<h1>2.0.7 (2008-06-20)</h1>
+<div class="section" id="id319">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
+</ul>
+</div>
+<div class="section" id="id320">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Descending dot-separated classes in CSS selectors were not resolved
+correctly.</li>
+<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
+<li>Potential threading problem in XInclude.</li>
+<li>Crash in Element class lookup classes when the __init__() method of
+the super class is not called from Python subclasses.</li>
+</ul>
+</div>
+<div class="section" id="id321">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Non-ASCII characters in attribute values are no longer escaped on
+serialisation.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta3-2008-06-19">
+<h1>2.1beta3 (2008-06-19)</h1>
+<div class="section" id="id322">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Major overhaul of <tt class="docutils literal">tools/xpathgrep.py</tt> script.</li>
+<li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
+<li>Support for parsing from file-like objects that return unicode
+strings.</li>
+<li>New function <tt class="docutils literal">etree.cleanup_namespaces(el)</tt> that removes unused
+namespace declarations from a (sub)tree (experimental).</li>
+<li>XSLT results support the buffer protocol in Python 3.</li>
+<li>Polymorphic functions in <tt class="docutils literal">lxml.html</tt> that accept either a tree or
+a parsable string will return either a UTF-8 encoded byte string, a
+unicode string or a tree, based on the type of the input.
+Previously, the result was always a byte string or a tree.</li>
+<li>Support for Python 2.6 and 3.0 beta.</li>
+<li>File name handling now uses a heuristic to convert between byte
+strings (usually filenames) and unicode strings (usually URLs).</li>
+<li>Parsing from a plain file object frees the GIL under Python 2.x.</li>
+<li>Running <tt class="docutils literal">iterparse()</tt> on a plain file (or filename) frees the GIL
+on reading under Python 2.x.</li>
+<li>Conversion functions <tt class="docutils literal">html_to_xhtml()</tt> and <tt class="docutils literal">xhtml_to_html()</tt> in
+lxml.html (experimental).</li>
+<li>Most features in lxml.html work for XHTML namespaced tag names
+(experimental).</li>
+</ul>
+</div>
+<div class="section" id="id323">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
+<li>Crash in Element class lookup classes when the __init__() method of
+the super class is not called from Python subclasses.</li>
+<li>A number of problems related to unicode/byte string conversion of
+filenames and error messages were fixed.</li>
+<li>Building on MacOS-X now passes the &quot;flat_namespace&quot; option to the C
+compiler, which reportedly prevents build quirks and crashes on this
+platform.</li>
+<li>Windows build was broken.</li>
+<li>Rare crash when serialising to a file object with certain encodings.</li>
+</ul>
+</div>
+<div class="section" id="id324">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Non-ASCII characters in attribute values are no longer escaped on
+serialisation.</li>
+<li>Passing non-ASCII byte strings or invalid unicode strings as .tag,
+namespaces, etc. will result in a ValueError instead of an
+AssertionError (just like the tag well-formedness check).</li>
+<li>Up to several times faster attribute access (i.e. tree traversal) in
+lxml.objectify.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id325">
+<h1>2.0.6 (2008-05-31)</h1>
+<div class="section" id="id326">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id327">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Incorrect evaluation of <tt class="docutils literal"><span class="pre">el.find(&quot;tag[child]&quot;)</span></tt>.</li>
+<li>Windows build was broken.</li>
+<li>Moving a subtree from a document created in one thread into a
+document of another thread could crash when the rest of the source
+document is deleted while the subtree is still in use.</li>
+<li>Rare crash when serialising to a file object with certain encodings.</li>
+</ul>
+</div>
+<div class="section" id="id328">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>lxml should now build without problems on MacOS-X.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta2-2008-05-02">
+<h1>2.1beta2 (2008-05-02)</h1>
+<div class="section" id="id329">
+<h2>Features added</h2>
+<ul class="simple">
+<li>All parse functions in lxml.html take a <tt class="docutils literal">parser</tt> keyword argument.</li>
+<li>lxml.html has a new parser class <tt class="docutils literal">XHTMLParser</tt> and a module
+attribute <tt class="docutils literal">xhtml_parser</tt> that provide XML parsers that are
+pre-configured for the lxml.html package.</li>
+</ul>
+</div>
+<div class="section" id="id330">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Moving a subtree from a document created in one thread into a
+document of another thread could crash when the rest of the source
+document is deleted while the subtree is still in use.</li>
+<li>Passing an nsmap when creating an Element will no longer strip
+redundantly defined namespace URIs.  This prevented the definition
+of more than one prefix for a namespace on the same Element.</li>
+</ul>
+</div>
+<div class="section" id="id331">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>If the default namespace is redundantly defined with a prefix on the
+same Element, the prefix will now be preferred for subelements and
+attributes.  This allows users to work around a problem in libxml2
+where attributes from the default namespace could serialise without
+a prefix even when they appear on an Element with a different
+namespace (i.e. they would end up in the wrong namespace).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id332">
+<h1>2.0.5 (2008-05-01)</h1>
+<div class="section" id="id333">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id334">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Resolving to a filename in custom resolvers didn't work.</li>
+<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
+let some XSLT errors pass silently.</li>
+<li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
+</ul>
+</div>
+<div class="section" id="id335">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="beta1-2008-04-15">
+<h1>2.1beta1 (2008-04-15)</h1>
+<div class="section" id="id336">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Error logging in Schematron (requires libxml2 2.6.32 or later).</li>
+<li>Parser option <tt class="docutils literal">strip_cdata</tt> for normalising or keeping CDATA
+sections.  Defaults to <tt class="docutils literal">True</tt> as before, thus replacing CDATA
+sections by their text content.</li>
+<li><tt class="docutils literal">CDATA()</tt> factory to wrap string content as CDATA section.</li>
+</ul>
+</div>
+<div class="section" id="id337">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Resolving to a filename in custom resolvers didn't work.</li>
+<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
+let some XSLT errors pass silently.</li>
+<li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
+<li>lxml.etree accepted non well-formed namespace prefix names.</li>
+</ul>
+</div>
+<div class="section" id="id338">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Major cleanup in internal <tt class="docutils literal">moveNodeToDocument()</tt> function, which
+takes care of namespace cleanup when moving elements between
+different namespace contexts.</li>
+<li>New Elements created through the <tt class="docutils literal">makeelement()</tt> method of an HTML
+parser or through lxml.html now end up in a new HTML document
+(doctype HTML 4.01 Transitional) instead of a generic XML document.
+This mostly impacts the serialisation and the availability of a DTD
+context.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id339">
+<h1>2.0.4 (2008-04-13)</h1>
+<div class="section" id="id340">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id341">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Hanging thread in conjunction with GTK threading.</li>
+<li>Crash bug in iterparse when moving elements into other documents.</li>
+<li>HTML elements' <tt class="docutils literal">.cssselect()</tt> method was broken.</li>
+<li><tt class="docutils literal"><span class="pre">ElementTree.find*()</span></tt> didn't accept QName objects.</li>
+</ul>
+</div>
+<div class="section" id="id342">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="alpha1-2008-03-27">
+<h1>2.1alpha1 (2008-03-27)</h1>
+<div class="section" id="id343">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New event types 'comment' and 'pi' in <tt class="docutils literal">iterparse()</tt>.</li>
+<li><tt class="docutils literal">XSLTAccessControl</tt> instances have a property <tt class="docutils literal">options</tt> that
+returns a dict of access configuration options.</li>
+<li>Constant instances <tt class="docutils literal">DENY_ALL</tt> and <tt class="docutils literal">DENY_WRITE</tt> on
+<tt class="docutils literal">XSLTAccessControl</tt> class.</li>
+<li>Extension elements for XSLT (experimental!)</li>
+<li><tt class="docutils literal">Element.base</tt> property returns the xml:base or HTML base URL of
+an Element.</li>
+<li><tt class="docutils literal">docinfo.URL</tt> property is writable.</li>
+</ul>
+</div>
+<div class="section" id="id344">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Default encoding for plain text serialisation was different from
+that of XML serialisation (UTF-8 instead of ASCII).</li>
+</ul>
+</div>
+<div class="section" id="id345">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Minor API speed-ups.</li>
+<li>The benchmark suite now uses tail text in the trees, which makes the
+absolute numbers incomparable to previous results.</li>
+<li>Generating the HTML documentation now requires <a class="reference external" href="http://pygments.org/">Pygments</a>, which is
+used to enable syntax highlighting for the doctest examples.</li>
+</ul>
+<p>Most long-time deprecated functions and methods were removed:</p>
+<ul>
+<li><p class="first"><tt class="docutils literal">etree.clearErrorLog()</tt>, use <tt class="docutils literal">etree.clear_error_log()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.useGlobalPythonLog()</tt>, use
+<tt class="docutils literal">etree.use_global_python_log()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.ElementClassLookup.setFallback()</tt>, use
+<tt class="docutils literal">etree.ElementClassLookup.set_fallback()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.getDefaultParser()</tt>, use <tt class="docutils literal">etree.get_default_parser()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.setDefaultParser()</tt>, use <tt class="docutils literal">etree.set_default_parser()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.setElementClassLookup()</tt>, use
+<tt class="docutils literal">etree.set_element_class_lookup()</tt></p>
+<p>Note that <tt class="docutils literal">parser.setElementClassLookup()</tt> has not been removed
+yet, although <tt class="docutils literal">parser.set_element_class_lookup()</tt> should be used
+instead.</p>
+</li>
+<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespace()</tt>, use
+<tt class="docutils literal">xpath_evaluator.register_namespace()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespaces()</tt>, use
+<tt class="docutils literal">xpath_evaluator.register_namespaces()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">objectify.setPytypeAttributeTag</tt>, use
+<tt class="docutils literal">objectify.set_pytype_attribute_tag</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">objectify.setDefaultParser()</tt>, use
+<tt class="docutils literal">objectify.set_default_parser()</tt></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id346">
+<h1>2.0.3 (2008-03-26)</h1>
+<div class="section" id="id347">
+<h2>Features added</h2>
+<ul class="simple">
+<li>soupparser.parse() allows passing keyword arguments on to
+BeautifulSoup.</li>
+<li><tt class="docutils literal">fromstring()</tt> method in <tt class="docutils literal">lxml.html.soupparser</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id348">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.diff</tt> didn't treat empty tags properly (e.g.,
+<tt class="docutils literal">&lt;br&gt;</tt>).</li>
+<li>Handle entity replacements correctly in target parser.</li>
+<li>Crash when using <tt class="docutils literal">iterparse()</tt> with XML Schema validation.</li>
+<li>The BeautifulSoup parser (soupparser.py) did not replace entities,
+which made them turn up in text content.</li>
+<li>Attribute assignment of custom PyTypes in objectify could fail to
+correctly serialise the value to a string.</li>
+</ul>
+</div>
+<div class="section" id="id349">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.ElementSoup</tt> was replaced by a new module
+<tt class="docutils literal">lxml.html.soupparser</tt> with a more consistent API.  The old module
+remains for compatibility with ElementTree's own ElementSoup module.</li>
+<li>Setting the XSLT_CONFIG and XML2_CONFIG environment variables at
+build time will let setup.py pick up the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> and
+<tt class="docutils literal"><span class="pre">xslt-config</span></tt> scripts from the supplied path name.</li>
+<li>Passing <tt class="docutils literal"><span class="pre">--with-xml2-config=/path/to/xml2-config</span></tt> to setup.py will
+override the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> script that is used to determine the C
+compiler options.  The same applies for the <tt class="docutils literal"><span class="pre">--with-xslt-config</span></tt>
+option.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id350">
+<h1>2.0.2 (2008-02-22)</h1>
+<div class="section" id="id351">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support passing <tt class="docutils literal">base_url</tt> to file parser functions to override
+the filename of the file(-like) object.</li>
+</ul>
+</div>
+<div class="section" id="id352">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The prefix for objectify's pytype namespace was missing from the set
+of default prefixes.</li>
+<li>Memory leak in Schematron (fixed only for libxml2 2.6.31+).</li>
+<li>Error type names in RelaxNG were reported incorrectly.</li>
+<li>Slice deletion bug fixed in objectify.</li>
+</ul>
+</div>
+<div class="section" id="id353">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Enabled doctests for some Python modules (especially <tt class="docutils literal">lxml.html</tt>).</li>
+<li>Add a <tt class="docutils literal">method</tt> argument to <tt class="docutils literal">lxml.html.tostring()</tt>
+(<tt class="docutils literal"><span class="pre">method=&quot;xml&quot;</span></tt> for XHTML output).</li>
+<li>Make it clearer that methods like <tt class="docutils literal">lxml.html.fromstring()</tt> take a
+<tt class="docutils literal">base_url</tt> argument.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id354">
+<h1>2.0.1 (2008-02-13)</h1>
+<div class="section" id="id355">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Child iteration in <tt class="docutils literal">lxml.pyclasslookup</tt>.</li>
+<li>Loads of new docstrings reflect the signature of functions and
+methods to make them visible in API docs and <tt class="docutils literal">help()</tt></li>
+</ul>
+</div>
+<div class="section" id="id356">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The module <tt class="docutils literal">lxml.html.builder</tt> was duplicated as
+<tt class="docutils literal">lxml.htmlbuilder</tt></li>
+<li>Form elements would return None for <tt class="docutils literal">form.fields.keys()</tt> if there
+was an unnamed input field.  Now unnamed input fields are completely
+ignored.</li>
+<li>Setting an element slice in objectify could insert slice-overlapping
+elements at the wrong position.</li>
+</ul>
+</div>
+<div class="section" id="id357">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The generated API documentation was cleaned up and disburdened from
+non-public classes etc.</li>
+<li>The previously public module <tt class="docutils literal">lxml.html.setmixin</tt> was renamed to
+<tt class="docutils literal">lxml.html._setmixin</tt> as it is not an official part of lxml.  If
+you want to use it, feel free to copy it over to your own source
+base.</li>
+<li>Passing <tt class="docutils literal"><span class="pre">--with-xslt-config=/path/to/xslt-config</span></tt> to setup.py will
+override the <tt class="docutils literal"><span class="pre">xslt-config</span></tt> script that is used to determine the C
+compiler options.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id358">
+<h1>2.0 (2008-02-01)</h1>
+<div class="section" id="id359">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Passing the <tt class="docutils literal">unicode</tt> type as <tt class="docutils literal">encoding</tt> to <tt class="docutils literal">tostring()</tt> will
+serialise to unicode.  The <tt class="docutils literal">tounicode()</tt> function is now
+deprecated.</li>
+<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> can parse from StringIO.</li>
+<li><tt class="docutils literal">makeparser()</tt> function in <tt class="docutils literal">lxml.objectify</tt> to create a new
+parser with the usual objectify setup.</li>
+<li>Plain ASCII XPath string results are no longer forced into unicode
+objects as in 2.0beta1, but are returned as plain strings as before.</li>
+<li>All XPath string results are 'smart' objects that have a
+<tt class="docutils literal">getparent()</tt> method to retrieve their parent Element.</li>
+<li><tt class="docutils literal">with_tail</tt> option in serialiser functions.</li>
+<li>More accurate exception messages in validator creation.</li>
+<li>Parse-time XML schema validation (<tt class="docutils literal">schema</tt> parser keyword).</li>
+<li>XPath string results of the <tt class="docutils literal">text()</tt> function and attribute
+selection make their Element container accessible through a
+<tt class="docutils literal">getparent()</tt> method.  As a side-effect, they are now always
+unicode objects (even ASCII strings).</li>
+<li><tt class="docutils literal">XSLT</tt> objects are usable in any thread - at the cost of a deep
+copy if they were not created in that thread.</li>
+<li>Invalid entity names and character references will be rejected by
+the <tt class="docutils literal">Entity()</tt> factory.</li>
+<li><tt class="docutils literal">entity.text</tt> returns the textual representation of the entity,
+e.g. <tt class="docutils literal">&amp;amp;</tt>.</li>
+<li>New properties <tt class="docutils literal">position</tt> and <tt class="docutils literal">code</tt> on ParseError exception (as
+in ET 1.3)</li>
+<li>Rich comparison of <tt class="docutils literal">element.attrib</tt> proxies.</li>
+<li>ElementTree compatible TreeBuilder class.</li>
+<li>Use default prefixes for some common XML namespaces.</li>
+<li><tt class="docutils literal">lxml.html.clean.Cleaner</tt> now allows for a <tt class="docutils literal">host_whitelist</tt>, and
+two overridable methods: <tt class="docutils literal">allow_embedded_url(el, url)</tt> and the
+more general <tt class="docutils literal">allow_element(el)</tt>.</li>
+<li>Extended slicing of Elements as in <tt class="docutils literal"><span class="pre">element[1:-1:2]</span></tt>, both in
+etree and in objectify</li>
+<li>Resolvers can now provide a <tt class="docutils literal">base_url</tt> keyword argument when
+resolving a document as string data.</li>
+<li>When using <tt class="docutils literal">lxml.doctestcompare</tt> you can give the doctest option
+<tt class="docutils literal">NOPARSE_MARKUP</tt> (like <tt class="docutils literal"># doctest: +NOPARSE_MARKUP</tt>) to suppress
+the special checking for one test.</li>
+<li>Separate <tt class="docutils literal">feed_error_log</tt> property for the feed parser interface.
+The normal parser interface and <tt class="docutils literal">iterparse</tt> continue to use
+<tt class="docutils literal">error_log</tt>.</li>
+<li>The normal parsers and the feed parser interface are now separated
+and can be used concurrently on the same parser instance.</li>
+<li><tt class="docutils literal">fromstringlist()</tt> and <tt class="docutils literal">tostringlist()</tt> functions as in
+ElementTree 1.3</li>
+<li><tt class="docutils literal">iterparse()</tt> accepts an <tt class="docutils literal">html</tt> boolean keyword argument for
+parsing with the HTML parser (note that this interface may be
+subject to change)</li>
+<li>Parsers accept an <tt class="docutils literal">encoding</tt> keyword argument that overrides the encoding
+of the parsed documents.</li>
+<li>New C-API function <tt class="docutils literal">hasChild()</tt> to test for children</li>
+<li><tt class="docutils literal">annotate()</tt> function in objectify can annotate with Python types and XSI
+types in one step.  Accompanied by <tt class="docutils literal">xsiannotate()</tt> and <tt class="docutils literal">pyannotate()</tt>.</li>
+<li><tt class="docutils literal">ET.write()</tt>, <tt class="docutils literal">tostring()</tt> and <tt class="docutils literal">tounicode()</tt> now accept a keyword
+argument <tt class="docutils literal">method</tt> that can be one of 'xml' (or None), 'html' or 'text' to
+serialise as XML, HTML or plain text content.</li>
+<li><tt class="docutils literal">iterfind()</tt> method on Elements returns an iterator equivalent to
+<tt class="docutils literal">findall()</tt></li>
+<li><tt class="docutils literal">itertext()</tt> method on Elements</li>
+<li>Setting a QName object as value of the .text property or as an attribute
+will resolve its prefix in the respective context</li>
+<li>ElementTree-like parser target interface as described in
+<a class="reference external" href="http://effbot.org/elementtree/elementtree-xmlparser.htm">http://effbot.org/elementtree/elementtree-xmlparser.htm</a></li>
+<li>ElementTree-like feed parser interface on XMLParser and HTMLParser
+(<tt class="docutils literal">feed()</tt> and <tt class="docutils literal">close()</tt> methods)</li>
+<li>Reimplemented <tt class="docutils literal">objectify.E</tt> for better performance and improved
+integration with objectify.  Provides extended type support based on
+registered PyTypes.</li>
+<li>XSLT objects now support deep copying</li>
+<li>New <tt class="docutils literal">makeSubElement()</tt> C-API function that allows creating a new
+subelement straight with text, tail and attributes.</li>
+<li>XPath extension functions can now access the current context node
+(<tt class="docutils literal">context.context_node</tt>) and use a context dictionary
+(<tt class="docutils literal">context.eval_context</tt>) from the context provided in their first
+parameter</li>
+<li>HTML tag soup parser based on BeautifulSoup in <tt class="docutils literal">lxml.html.ElementSoup</tt></li>
+<li>New module <tt class="docutils literal">lxml.doctestcompare</tt> by Ian Bicking for writing simplified
+doctests based on XML/HTML output.  Use by importing <tt class="docutils literal">lxml.usedoctest</tt> or
+<tt class="docutils literal">lxml.html.usedoctest</tt> from within a doctest.</li>
+<li>New module <tt class="docutils literal">lxml.cssselect</tt> by Ian Bicking for selecting Elements with CSS
+selectors.</li>
+<li>New package <tt class="docutils literal">lxml.html</tt> written by Ian Bicking for advanced HTML
+treatment.</li>
+<li>Namespace class setup is now local to the <tt class="docutils literal">ElementNamespaceClassLookup</tt>
+instance and no longer global.</li>
+<li>Schematron validation (incomplete in libxml2)</li>
+<li>Additional <tt class="docutils literal">stringify</tt> argument to <tt class="docutils literal">objectify.PyType()</tt> takes a
+conversion function to strings to support setting text values from arbitrary
+types.</li>
+<li>Entity support through an <tt class="docutils literal">Entity</tt> factory and element classes.  XML
+parsers now have a <tt class="docutils literal">resolve_entities</tt> keyword argument that can be set to
+False to keep entities in the document.</li>
+<li><tt class="docutils literal">column</tt> field on error log entries to accompany the <tt class="docutils literal">line</tt> field</li>
+<li>Error specific messages in XPath parsing and evaluation
+NOTE: for evaluation errors, you will now get an XPathEvalError instead of
+an XPathSyntaxError.  To catch both, you can except on <tt class="docutils literal">XPathError</tt></li>
+<li>The regular expression functions in XPath now support passing a node-set
+instead of a string</li>
+<li>Extended type annotation in objectify: new <tt class="docutils literal">xsiannotate()</tt> function</li>
+<li>EXSLT RegExp support in standard XPath (not only XSLT)</li>
+</ul>
+</div>
+<div class="section" id="id360">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Missing import in <tt class="docutils literal">lxml.html.clean</tt>.</li>
+<li>Some Python 2.4-isms prevented lxml from building/running under
+Python 2.3.</li>
+<li>XPath on ElementTrees could crash when selecting the virtual root
+node of the ElementTree.</li>
+<li>Compilation <tt class="docutils literal"><span class="pre">--without-threading</span></tt> was buggy in alpha5/6.</li>
+<li>Memory leak in the <tt class="docutils literal">parse()</tt> function.</li>
+<li>Minor bugs in XSLT error message formatting.</li>
+<li>Result document memory leak in target parser.</li>
+<li>Target parser failed to report comments.</li>
+<li>In the <tt class="docutils literal">lxml.html</tt> <tt class="docutils literal">iter_links</tt> method, links in <tt class="docutils literal">&lt;object&gt;</tt>
+tags weren't recognized.  (Note: plugin-specific link parameters
+still aren't recognized.)  Also, the <tt class="docutils literal">&lt;embed&gt;</tt> tag, though not
+standard, is now included in <tt class="docutils literal">lxml.html.defs.special_inline_tags</tt>.</li>
+<li>Using custom resolvers on XSLT stylesheets parsed from a string
+could request ill-formed URLs.</li>
+<li>With <tt class="docutils literal">lxml.doctestcompare</tt> if you do <tt class="docutils literal">&lt;tag <span class="pre">xmlns=&quot;...&quot;&gt;</span></tt> in your
+output, it will then be namespace-neutral (before the ellipsis was
+treated as a real namespace).</li>
+<li>AttributeError in feed parser on parse errors</li>
+<li>XML feed parser setup problem</li>
+<li>Type annotation for unicode strings in <tt class="docutils literal">DataElement()</tt></li>
+<li>lxml failed to serialise namespace declarations of elements other than the
+root node of a tree</li>
+<li>Race condition in XSLT where the resolver context leaked between concurrent
+XSLT calls</li>
+<li>lxml.etree did not check tag/attribute names</li>
+<li>The XML parser did not report undefined entities as error</li>
+<li>The text in exceptions raised by XML parsers, validators and XPath
+evaluators now reports the first error that occurred instead of the last</li>
+<li>Passing '' as XPath namespace prefix did not raise an error</li>
+<li>Thread safety in XPath evaluators</li>
+</ul>
+</div>
+<div class="section" id="id361">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Exceptions carry only the part of the error log that is related to
+the operation that caused the error.</li>
+<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> now enforce passing the source
+file/filename through the <tt class="docutils literal">file</tt> keyword argument.</li>
+<li>The test suite now skips most doctests under Python 2.3.</li>
+<li><tt class="docutils literal">make clean</tt> no longer removes the .c files (use <tt class="docutils literal">make
+realclean</tt> instead)</li>
+<li>Minor performance tweaks for Element instantiation and subelement
+creation</li>
+<li>Various places in the XPath, XSLT and iteration APIs now require
+keyword-only arguments.</li>
+<li>The argument order in <tt class="docutils literal">element.itersiblings()</tt> was changed to
+match the order used in all other iteration methods.  The second
+argument ('preceding') is now a keyword-only argument.</li>
+<li>The <tt class="docutils literal">getiterator()</tt> method on Elements and ElementTrees was
+reverted to return an iterator as it did in lxml 1.x.  The ET API
+specification allows it to return either a sequence or an iterator,
+and it traditionally returned a sequence in ET and an iterator in
+lxml.  However, it is now deprecated in favour of the <tt class="docutils literal">iter()</tt>
+method, which should be used in new code wherever possible.</li>
+<li>The 'pretty printed' serialisation of ElementTree objects now
+inserts newlines at the root level between processing instructions,
+comments and the root tag.</li>
+<li>A 'pretty printed' serialisation is now terminated with a newline.</li>
+<li>Second argument to <tt class="docutils literal">lxml.etree.Extension()</tt> helper is no longer
+required, third argument is now a keyword-only argument <tt class="docutils literal">ns</tt>.</li>
+<li><tt class="docutils literal">lxml.html.tostring</tt> takes an <tt class="docutils literal">encoding</tt> argument.</li>
+<li>The module source files were renamed to &quot;lxml.*.pyx&quot;, such as
+&quot;lxml.etree.pyx&quot;.  This was changed for consistency with the way
+Pyrex commonly handles package imports.  The main effect is that
+classes now know about their fully qualified class name, including
+the package name of their module.</li>
+<li>Keyword-only arguments in some API functions, especially in the
+parsers and serialisers.</li>
+<li>Tag name validation in lxml.etree (and lxml.html) now distinguishes
+between HTML tags and XML tags based on the parser that was used to
+parse or create them.  HTML tags no longer reject any non-ASCII
+characters in tag names but only spaces and the special characters
+<tt class="docutils literal"><span class="pre">&lt;&gt;&amp;/&quot;'</span></tt>.</li>
+<li>lxml.etree now emits a warning if you use XPath with libxml2 2.6.27
+(which can crash on certain XPath errors)</li>
+<li>Type annotation in objectify now preserves the already annotated type by
+default to prevent losing type information that is already there.</li>
+<li><tt class="docutils literal">element.getiterator()</tt> returns a list, use <tt class="docutils literal">element.iter()</tt> to retrieve
+an iterator (ElementTree 1.3 compatible behaviour)</li>
+<li>objectify.PyType for None is now called &quot;NoneType&quot;</li>
+<li><tt class="docutils literal">el.getiterator()</tt> renamed to <tt class="docutils literal">el.iter()</tt>, following ElementTree 1.3 -
+original name is still available as alias</li>
+<li>In the public C-API, <tt class="docutils literal">findOrBuildNodeNs()</tt> was replaced by the more
+generic <tt class="docutils literal">findOrBuildNodeNsPrefix</tt></li>
+<li>Major refactoring in XPath/XSLT extension function code</li>
+<li>Network access in parsers disabled by default</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id362">
+<h1>1.3.6 (2007-10-29)</h1>
+<div class="section" id="id363">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Backported decref crash fix from 2.0</li>
+<li>Well hidden free-while-in-use crash bug in ObjectPath</li>
+</ul>
+</div>
+<div class="section" id="id364">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The test suites now run <tt class="docutils literal">gc.collect()</tt> in the <tt class="docutils literal">tearDown()</tt>
+methods.  While this makes them take a lot longer to run, it also
+makes it easier to link a specific test to garbage collection
+problems that would otherwise appear in later tests.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id365">
+<h1>1.3.5 (2007-10-22)</h1>
+<div class="section" id="id366">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id367">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>lxml.etree could crash when adding more than 10000 namespaces to a
+document</li>
+<li>lxml failed to serialise namespace declarations of elements other
+than the root node of a tree</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id368">
+<h1>1.3.4 (2007-08-30)</h1>
+<div class="section" id="id369">
+<h2>Features added</h2>
+<ul class="simple">
+<li>The <tt class="docutils literal">ElementMaker</tt> in <tt class="docutils literal">lxml.builder</tt> now accepts the keyword arguments
+<tt class="docutils literal">namespace</tt> and <tt class="docutils literal">nsmap</tt> to set a namespace and nsmap for the Elements it
+creates.</li>
+<li>The <tt class="docutils literal">docinfo</tt> on ElementTree objects has new properties <tt class="docutils literal">internalDTD</tt>
+and <tt class="docutils literal">externalDTD</tt> that return a DTD object for the internal or external
+subset of the document respectively.</li>
+<li>Serialising an ElementTree now includes any internal DTD subsets that are
+part of the document, as well as comments and PIs that are siblings of the
+root node.</li>
+</ul>
+</div>
+<div class="section" id="id370">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Parsing with the <tt class="docutils literal">no_network</tt> option could fail</li>
+</ul>
+</div>
+<div class="section" id="id371">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>lxml now raises a TagNameWarning about tag names containing ':' instead of
+an Error as 1.3.3 did.  The reason is that a number of projects currently
+misuse the previous lack of tag name validation to generate namespace
+prefixes without declaring namespaces.  Apart from the danger of generating
+broken XML this way, it also breaks most of the namespace-aware tools in
+XML, including XPath, XSLT and validation.  lxml 1.3.x will continue to
+support this bug with a Warning, while lxml 2.0 will be strict about
+well-formed tag names (not only regarding ':').</li>
+<li>Serialising an Element no longer includes its comment and PI siblings (only
+ElementTree serialisation includes them).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id372">
+<h1>1.3.3 (2007-07-26)</h1>
+<div class="section" id="id373">
+<h2>Features added</h2>
+<ul class="simple">
+<li>ElementTree compatible parser <tt class="docutils literal">ETCompatXMLParser</tt> strips processing
+instructions and comments while parsing XML</li>
+<li>Parsers now support stripping PIs (keyword argument 'remove_pis')</li>
+<li><tt class="docutils literal">etree.fromstring()</tt> now supports parsing both HTML and XML, depending on
+the parser you pass.</li>
+<li>Support <tt class="docutils literal">base_url</tt> keyword argument in <tt class="docutils literal">HTML()</tt> and <tt class="docutils literal">XML()</tt></li>
+</ul>
+</div>
+<div class="section" id="id374">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Parsing from Python Unicode strings failed on some platforms</li>
+<li><tt class="docutils literal">Element()</tt> did not raise an exception on tag names containing ':'</li>
+<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
+<tt class="docutils literal">ProcessingInstruction</tt> as tags. It also accepts <tt class="docutils literal">Element</tt> now.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id375">
+<h1>1.3.2 (2007-07-03)</h1>
+<div class="section" id="id376">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id377">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>&quot;deallocating None&quot; crash bug</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id378">
+<h1>1.3.1 (2007-07-02)</h1>
+<div class="section" id="id379">
+<h2>Features added</h2>
+<ul class="simple">
+<li>objectify.DataElement now supports setting values from existing data
+elements (not just plain Python types) and reuses defined namespaces etc.</li>
+<li>E-factory support for lxml.objectify (<tt class="docutils literal">objectify.E</tt>)</li>
+</ul>
+</div>
+<div class="section" id="id380">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Better way to prevent crashes in Element proxy cleanup code</li>
+<li>objectify.DataElement didn't set up None value correctly</li>
+<li>objectify.DataElement didn't check the value against the provided type hints</li>
+<li>Reference-counting bug in <tt class="docutils literal">Element.attrib.pop()</tt></li>
+</ul>
+</div>
+</div>
+<div class="section" id="id381">
+<h1>1.3 (2007-06-24)</h1>
+<div class="section" id="id382">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Module <tt class="docutils literal">lxml.pyclasslookup</tt> module implements an Element class lookup
+scheme that can access the entire tree in read-only mode to help determining
+a suitable Element class</li>
+<li>Parsers take a <tt class="docutils literal">remove_comments</tt> keyword argument that skips over comments</li>
+<li><tt class="docutils literal">parse()</tt> function in <tt class="docutils literal">objectify</tt>, corresponding to <tt class="docutils literal">XML()</tt> etc.</li>
+<li><tt class="docutils literal">Element.addnext(el)</tt> and <tt class="docutils literal">Element.addprevious(el)</tt> methods to support
+adding processing instructions and comments around the root node</li>
+<li><tt class="docutils literal">Element.attrib</tt> was missing <tt class="docutils literal">clear()</tt> and <tt class="docutils literal">pop()</tt> methods</li>
+<li>Extended type annotation in objectify: cleaner annotation namespace setup
+plus new <tt class="docutils literal">deannotate()</tt> function</li>
+<li>Support for custom Element class instantiation in lxml.sax: passing a
+<tt class="docutils literal">makeelement</tt> function to the ElementTreeContentHandler will reuse the
+lookup context of that function</li>
+<li>'.' represents empty ObjectPath (identity)</li>
+<li><tt class="docutils literal">Element.values()</tt> to accompany the existing <tt class="docutils literal">.keys()</tt> and <tt class="docutils literal">.items()</tt></li>
+<li><tt class="docutils literal">collectAttributes()</tt> C-function to build a list of attribute
+keys/values/items for a libxml2 node</li>
+<li><tt class="docutils literal">DTD</tt> validator class (like <tt class="docutils literal">RelaxNG</tt> and <tt class="docutils literal">XMLSchema</tt>)</li>
+<li>HTML generator helpers by Fredrik Lundh in <tt class="docutils literal">lxml.htmlbuilder</tt></li>
+<li><tt class="docutils literal">ElementMaker</tt> XML generator by Fredrik Lundh in <tt class="docutils literal">lxml.builder.E</tt></li>
+<li>Support for pickling <tt class="docutils literal">objectify.ObjectifiedElement</tt> objects to XML</li>
+<li><tt class="docutils literal">update()</tt> method on Element.attrib</li>
+<li>Optimised replacement for libxml2's _xmlReconsiliateNs(). This allows lxml
+a better handling of namespaces when moving elements between documents.</li>
+</ul>
+</div>
+<div class="section" id="id383">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Removing Elements from a tree could make them lose their namespace
+declarations</li>
+<li><tt class="docutils literal">ElementInclude</tt> didn't honour base URL of original document</li>
+<li>Replacing the children slice of an Element would cut off the tails of the
+original children</li>
+<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
+<tt class="docutils literal">ProcessingInstruction</tt> as tags</li>
+<li>API functions now check incoming strings for XML conformity.  Zero bytes or
+low ASCII characters are no longer accepted (AssertionError).</li>
+<li>XSLT parsing failed to pass resolver context on to imported documents</li>
+<li>passing '' as namespace prefix in nsmap could be passed through to libxml2</li>
+<li>Objectify couldn't handle prefixed XSD type names in <tt class="docutils literal">xsi:type</tt></li>
+<li>More ET compatible behaviour when writing out XML declarations or not</li>
+<li>More robust error handling in <tt class="docutils literal">iterparse()</tt></li>
+<li>Documents lost their top-level PIs and comments on serialisation</li>
+<li>lxml.sax failed on comments and PIs. Comments are now properly ignored and
+PIs are copied.</li>
+<li>Possible memory leaks in namespace handling when moving elements between
+documents</li>
+</ul>
+</div>
+<div class="section" id="id384">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>major restructuring in the documentation</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id385">
+<h1>1.2.1 (2007-02-27)</h1>
+<div class="section" id="id386">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Build fixes for MS compiler</li>
+<li>Item assignments to special names like <tt class="docutils literal"><span class="pre">element[&quot;text&quot;]</span></tt> failed</li>
+<li>Renamed ObjectifiedDataElement.__setText() to _setText() to make it easier
+to access</li>
+<li>The pattern for attribute names in ObjectPath was too restrictive</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id387">
+<h1>1.2 (2007-02-20)</h1>
+<div class="section" id="id388">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Rich comparison of QName objects</li>
+<li>Support for regular expressions in benchmark selection</li>
+<li>get/set emulation (not .attrib!) for attributes on processing instructions</li>
+<li>ElementInclude Python module for ElementTree compatible XInclude processing
+that honours custom resolvers registered with the source document</li>
+<li>ElementTree.parser property holds the parser used to parse the document</li>
+<li>setup.py has been refactored for greater readability and flexibility</li>
+<li>--rpath flag to setup.py to induce automatic linking-in of dynamic library
+runtime search paths has been renamed to --auto-rpath. This makes it
+possible to pass an --rpath directly to distutils; previously this was being
+shadowed.</li>
+</ul>
+</div>
+<div class="section" id="id389">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Element instantiation now uses locks to prevent race conditions with threads</li>
+<li>ElementTree.write() did not raise an exception when the file was not writable</li>
+<li>Error handling could crash under Python &lt;= 2.4.1 - fixed by disabling thread
+support in these environments</li>
+<li>Element.find*() did not accept QName objects as path</li>
+</ul>
+</div>
+<div class="section" id="id390">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>code cleanup: redundant _NodeBase super class merged into _Element class
+Note: although the impact should be zero in most cases, this change breaks
+the compatibility of the public C-API</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id391">
+<h1>1.1.2 (2006-10-30)</h1>
+<div class="section" id="id392">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Data elements in objectify support repr(), which is now used by dump()</li>
+<li>Source distribution now ships with a patched Pyrex</li>
+<li>New C-API function makeElement() to create new elements with text,
+tail, attributes and namespaces</li>
+<li>Reuse original parser flags for XInclude</li>
+<li>Simplified support for handling XSLT processing instructions</li>
+</ul>
+</div>
+<div class="section" id="id393">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Parser resources were not freed before the next parser run</li>
+<li>Open files and XML strings returned by Python resolvers were not
+closed/freed</li>
+<li>Crash in the IDDict returned by XMLDTDID</li>
+<li>Copying Comments and ProcessingInstructions failed</li>
+<li>Memory leak for external URLs in _XSLTProcessingInstruction.parseXSL()</li>
+<li>Memory leak when garbage collecting tailed root elements</li>
+<li>HTML script/style content was not propagated to .text</li>
+<li>Show text xincluded between text nodes correctly in .text and .tail</li>
+<li>'integer * objectify.StringElement' operation was not supported</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id394">
+<h1>1.1.1 (2006-09-21)</h1>
+<div class="section" id="id395">
+<h2>Features added</h2>
+<ul class="simple">
+<li>XSLT profiling support (<tt class="docutils literal">profile_run</tt> keyword)</li>
+<li>countchildren() method on objectify.ObjectifiedElement</li>
+<li>Support custom elements for tree nodes in lxml.objectify</li>
+</ul>
+</div>
+<div class="section" id="id396">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>lxml.objectify failed to support long data values (e.g., &quot;123L&quot;)</li>
+<li>Error messages from XSLT did not reach <tt class="docutils literal">XSLT.error_log</tt></li>
+<li>Factories objectify.Element() and objectify.DataElement() were missing
+<tt class="docutils literal">attrib</tt> and <tt class="docutils literal">nsmap</tt> keyword arguments</li>
+<li>Changing the default parser in lxml.objectify did not update the factories
+Element() and DataElement()</li>
+<li>Let lxml.objectify.Element() always generate tree elements (not data
+elements)</li>
+<li>Build under Windows failed ('0' bug in patched Pyrex version)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id397">
+<h1>1.1 (2006-09-13)</h1>
+<div class="section" id="id398">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Comments and processing instructions return '&lt;!-- comment --&gt;' and
+'&lt;?pi-target content?&gt;' for repr()</li>
+<li>Parsers are now the preferred (and default) place where element class lookup
+schemes should be registered.  Namespace lookup is no longer supported by
+default.</li>
+<li>Support for Python 2.5 beta</li>
+<li>Unlock the GIL for deep copying documents and for XPath()</li>
+<li>New <tt class="docutils literal">compact</tt> keyword argument for parsing read-only documents</li>
+<li>Support for parser options in iterparse()</li>
+<li>The <tt class="docutils literal">namespace</tt> axis is supported in XPath and returns (prefix, URI)
+tuples</li>
+<li>The XPath expression &quot;/&quot; now returns an empty list instead of raising an
+exception</li>
+<li>XML-Object API on top of lxml (lxml.objectify)</li>
+<li>Customizable Element class lookup:<ul>
+<li>different pre-implemented lookup mechanisms</li>
+<li>support for externally provided lookup functions</li>
+</ul>
+</li>
+<li>Support for processing instructions (ET-like, not compatible)</li>
+<li>Public C-level API for independent extension modules</li>
+<li>Module level <tt class="docutils literal">iterwalk()</tt> function as 'iterparse' for trees</li>
+<li>Module level <tt class="docutils literal">iterparse()</tt> function similar to ElementTree (see
+documentation for differences)</li>
+<li>Element.nsmap property returns a mapping of all namespace prefixes known at
+the Element to their namespace URI</li>
+<li>Reentrant threading support in RelaxNG, XMLSchema and XSLT</li>
+<li>Threading support in parsers and serializers:<ul>
+<li>All in-memory operations (tostring, parse(StringIO), etc.) free the GIL</li>
+<li>File operations (on file names) free the GIL</li>
+<li>Reading from file-like objects frees the GIL and reacquires it for reading</li>
+<li>Serialisation to file-like objects is single-threaded (high lock overhead)</li>
+</ul>
+</li>
+<li>Element iteration over XPath axes:<ul>
+<li>Element.iterdescendants() iterates over the descendants of an element</li>
+<li>Element.iterancestors() iterates over the ancestors of an element (from
+parent to parent)</li>
+<li>Element.itersiblings() iterates over either the following or preceding
+siblings of an element</li>
+<li>Element.iterchildren() iterates over the children of an element in either
+direction</li>
+<li>All iterators support the <tt class="docutils literal">tag</tt> keyword argument to restrict the
+generated elements</li>
+</ul>
+</li>
+<li>Element.getnext() and Element.getprevious() return the direct siblings of an
+element</li>
+</ul>
+</div>
+<div class="section" id="id399">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>filenames with local 8-bit encoding were not supported</li>
+<li>1.1beta did not compile under Python 2.3</li>
+<li>ignore unknown 'pyval' attribute values in objectify</li>
+<li>objectify.ObjectifiedElement.addattr() failed to accept Elements and Lists</li>
+<li>objectify.ObjectPath.setattr() failed to accept Elements and Lists</li>
+<li>XPathSyntaxError now inherits from XPathError</li>
+<li>Threading race conditions in RelaxNG and XMLSchema</li>
+<li>Crash when mixing elements from XSLT results into other trees, concurrent
+XSLT is only allowed when the stylesheet was parsed in the main thread</li>
+<li>The EXSLT <tt class="docutils literal">regexp:match</tt> function now works as defined (except for some
+differences in the regular expression syntax)</li>
+<li>Setting element.text to '' returned None on request, not the empty string</li>
+<li><tt class="docutils literal">iterparse()</tt> could crash on long XML files</li>
+<li>Creating documents no longer copies the parser for later URL resolving.  For
+performance reasons, only a reference is kept.  Resolver updates on the
+parser will now be reflected by documents that were parsed before the
+change.  Although this should rarely become visible, it is a behavioral
+change from 1.0.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id400">
+<h1>1.0.4 (2006-09-09)</h1>
+<div class="section" id="id401">
+<h2>Features added</h2>
+<ul class="simple">
+<li>List-like <tt class="docutils literal">Element.extend()</tt> method</li>
+</ul>
+</div>
+<div class="section" id="id402">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in tail handling in <tt class="docutils literal">Element.replace()</tt></li>
+</ul>
+</div>
+</div>
+<div class="section" id="id403">
+<h1>1.0.3 (2006-08-08)</h1>
+<div class="section" id="id404">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Element.replace(old, new) method to replace a subelement by another one</li>
+</ul>
+</div>
+<div class="section" id="id405">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when mixing elements from XSLT results into other trees</li>
+<li>Copying/deepcopying did not work for ElementTree objects</li>
+<li>Setting an attribute to a non-string value did not raise an exception</li>
+<li>Element.remove() deleted the tail text from the removed Element</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id406">
+<h1>1.0.2 (2006-06-27)</h1>
+<div class="section" id="id407">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for setting a custom default Element class as opposed to namespace
+specific classes (which still override the default class)</li>
+</ul>
+</div>
+<div class="section" id="id408">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Rare exceptions in Python list functions were not handled</li>
+<li>Parsing accepted unicode strings with XML encoding declaration in certain
+cases</li>
+<li>Parsing 8-bit encoded strings from StringIO objects raised an exception</li>
+<li>Module function <tt class="docutils literal">initThread()</tt> was removed - useless (and never worked)</li>
+<li>XSLT and parser exception messages include the error line number</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id409">
+<h1>1.0.1 (2006-06-09)</h1>
+<div class="section" id="id410">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Repeated calls to Element.attrib now efficiently return the same instance</li>
+</ul>
+</div>
+<div class="section" id="id411">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Document deallocation could crash in certain garbage collection scenarios</li>
+<li>Extension function calls in XSLT variable declarations could break the
+stylesheet and crash on repeated calls</li>
+<li>Deep copying Elements could lose namespaces declared in parents</li>
+<li>Deep copying Elements did not copy tail</li>
+<li>Parsing file(-like) objects failed to load external entities</li>
+<li>Parsing 8-bit strings from file(-like) objects raised an exception</li>
+<li>xsl:include failed when the stylesheet was parsed from a file-like object</li>
+<li>lxml.sax.ElementTreeProducer did not call startDocument() / endDocument()</li>
+<li>MSVC compiler complained about long strings (supports only 2048 bytes)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id412">
+<h1>1.0 (2006-06-01)</h1>
+<div class="section" id="id413">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Element.getiterator() and the findall() methods support finding arbitrary
+elements from a namespace (pattern <tt class="docutils literal">{namespace}*</tt>)</li>
+<li>Another speedup in tree iteration code</li>
+<li>General speedup of Python Element object creation and deallocation</li>
+<li>Writing C14N no longer serializes in memory (reduced memory footprint)</li>
+<li>PyErrorLog for error logging through the Python <tt class="docutils literal">logging</tt> module</li>
+<li><tt class="docutils literal">Element.getroottree()</tt> returns an ElementTree for the root node of the
+document that contains the element.</li>
+<li>ElementTree.getpath(element) returns a simple, absolute XPath expression to
+find the element in the tree structure</li>
+<li>Error logs have a <tt class="docutils literal">last_error</tt> attribute for convenience</li>
+<li>Comment texts can be changed through the API</li>
+<li>Formatted output via <tt class="docutils literal">pretty_print</tt> keyword in serialization functions</li>
+<li>XSLT can block access to file system and network via <tt class="docutils literal">XSLTAccessControl</tt></li>
+<li>ElementTree.write() no longer serializes in memory (reduced memory
+footprint)</li>
+<li>Speedup of Element.findall(tag) and Element.getiterator(tag)</li>
+<li>Support for writing the XML representation of Elements and ElementTrees to
+Python unicode strings via <tt class="docutils literal">etree.tounicode()</tt></li>
+<li>Support for writing XSLT results to Python unicode strings via <tt class="docutils literal">unicode()</tt></li>
+<li>Parsing a unicode string no longer copies the string (reduced memory
+footprint)</li>
+<li>Parsing file-like objects reads chunks rather than the whole file (reduced
+memory footprint)</li>
+<li>Parsing StringIO objects from the start avoids copying the string (reduced
+memory footprint)</li>
+<li>Read-only 'docinfo' attribute in ElementTree class holds DOCTYPE
+information, original encoding and XML version as seen by the parser</li>
+<li>etree module can be compiled without libxslt by commenting out the line
+<tt class="docutils literal">include &quot;xslt.pxi&quot;</tt> near the end of the etree.pyx source file</li>
+<li>Better error messages in parser exceptions</li>
+<li>Error reporting also works in XSLT</li>
+<li>Support for custom document loaders (URI resolvers) in parsers and XSLT,
+resolvers are registered at parser level</li>
+<li>Implementation of exslt:regexp for XSLT based on the Python 're' module,
+enabled by default, can be switched off with 'regexp=False' keyword argument</li>
+<li>Support for exslt extensions (libexslt) and libxslt extra functions
+(node-set, document, write, output)</li>
+<li>Substantial speedup in XPath.evaluate()</li>
+<li>HTMLParser for parsing (broken) HTML</li>
+<li>XMLDTDID function parses XML into tuple (root node, ID dict) based on xml:id
+implementation of libxml2 (as opposed to ET compatible XMLID)</li>
+</ul>
+</div>
+<div class="section" id="id414">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory leak in Element.__setitem__</li>
+<li>Memory leak in Element.attrib.items() and Element.attrib.values()</li>
+<li>Memory leak in XPath extension functions</li>
+<li>Memory leak in unicode related setup code</li>
+<li>Element now raises ValueError on empty tag names</li>
+<li>Namespace fixing after moving elements between documents could fail if the
+source document was freed too early</li>
+<li>Setting namespace-less tag names on namespaced elements ('{ns}t' -&gt; 't')
+didn't reset the namespace</li>
+<li>Unknown constants from newer libxml2 versions could raise exceptions in the
+error handlers</li>
+<li>lxml.etree compiles much faster</li>
+<li>On libxml2 &lt;= 2.6.22, parsing strings with encoding declaration could fail
+in certain cases</li>
+<li>Document reference in ElementTree objects was not updated when the root
+element was moved to a different document</li>
+<li>Running absolute XPath expressions on an Element now evaluates against the
+root tree</li>
+<li>Evaluating absolute XPath expressions (<tt class="docutils literal">/*</tt>) on an ElementTree could fail</li>
+<li>Crashes when calling XSLT, RelaxNG, etc. with uninitialized ElementTree
+objects</li>
+<li>Removed public function <tt class="docutils literal">initThreadLogging()</tt>, replaced by more general
+<tt class="docutils literal">initThread()</tt> which fixes a number of setup problems in threads</li>
+<li>Memory leak when using iconv encoders in tostring/write</li>
+<li>Deep copying Elements and ElementTrees maintains the document information</li>
+<li>Serialization functions raise LookupError for unknown encodings</li>
+<li>Memory deallocation crash resulting from deep copying elements</li>
+<li>Some ElementTree methods could crash if the root node was not initialized
+(neither file nor element passed to the constructor)</li>
+<li>Element/SubElement failed to set attribute namespaces from passed <tt class="docutils literal">attrib</tt>
+dictionary</li>
+<li><tt class="docutils literal">tostring()</tt> adds an XML declaration for non-ASCII encodings</li>
+<li><tt class="docutils literal">tostring()</tt> failed to serialize encodings that contain 0-bytes</li>
+<li>ElementTree.xpath() and XPathDocumentEvaluator were not using the
+ElementTree root node as reference point</li>
+<li>Calling <tt class="docutils literal"><span class="pre">document('')</span></tt> in XSLT failed to return the stylesheet</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id415">
+<h1>0.9.2 (2006-05-10)</h1>
+<div class="section" id="id416">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Speedup for Element.makeelement(): the new element reuses the original
+libxml2 document instead of creating a new empty one</li>
+<li>Speedup for reversed() iteration over element children (Py2.4+ only)</li>
+<li>ElementTree compatible QName class</li>
+<li>RelaxNG and XMLSchema accept any Element, not only ElementTrees</li>
+</ul>
+</div>
+<div class="section" id="id417">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>str(xslt_result) was broken for XSLT output other than UTF-8</li>
+<li>Memory leak if write_c14n fails to write the file after conversion</li>
+<li>Crash in XMLSchema and RelaxNG when passing non-schema documents</li>
+<li>Memory leak in RelaxNG() when RelaxNGParseError is raised</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id418">
+<h1>0.9.1 (2006-03-30)</h1>
+<div class="section" id="id419">
+<h2>Features added</h2>
+<ul class="simple">
+<li>lxml.sax.ElementTreeContentHandler checks closing elements and raises
+SaxError on mismatch</li>
+<li>lxml.sax.ElementTreeContentHandler supports namespace-less SAX events
+(startElement, endElement) and defaults to empty attributes (keyword
+argument)</li>
+<li>Speedup for repeatedly accessing element tag names</li>
+<li>Minor API performance improvements</li>
+</ul>
+</div>
+<div class="section" id="id420">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory deallocation bug when using XSLT output method &quot;html&quot;</li>
+<li>sax.py was handling UTF-8 encoded tag names where it shouldn't</li>
+<li>lxml.tests package will no longer be installed (is still in source tar)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id421">
+<h1>0.9 (2006-03-20)</h1>
+<div class="section" id="id422">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Error logging API for libxml2 error messages</li>
+<li>Various performance improvements</li>
+<li>Benchmark script for lxml, ElementTree and cElementTree</li>
+<li>Support for registering extension functions through new FunctionNamespace
+class (see doc/extensions.txt)</li>
+<li>ETXPath class for XPath expressions in ElementTree notation ('//{ns}tag')</li>
+<li>Support for variables in XPath expressions (also in XPath class)</li>
+<li>XPath class for compiled XPath expressions</li>
+<li>XMLID module level function (ElementTree compatible)</li>
+<li>XMLParser API for customized libxml2 parser configuration</li>
+<li>Support for custom Element classes through new Namespace API (see
+doc/namespace_extensions.txt)</li>
+<li>Common exception base class LxmlError for module exceptions</li>
+<li>real iterator support in iter(Element), Element.getiterator()</li>
+<li>XSLT objects are callable, result trees support str()</li>
+<li>Added MANIFEST.in for easier creation of RPM files.</li>
+<li>'getparent' method on elements allows navigation to an element's
+parent element.</li>
+<li>Python core compatible SAX tree builder and SAX event generator. See
+doc/sax.txt for more information.</li>
+</ul>
+</div>
+<div class="section" id="id423">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Segfaults and memory leaks in various API functions of Element</li>
+<li>Segfault in XSLT.tostring()</li>
+<li>ElementTree objects no longer interfere, Elements can be root of different
+ElementTrees at the same time</li>
+<li>document('') works in XSLT documents read from files (in-memory documents
+cannot support this due to libxslt deficiencies)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id424">
+<h1>0.8 (2005-11-03)</h1>
+<div class="section" id="id425">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for copy.deepcopy() on elements. copy.copy() works also, but
+does the same thing, and does <em>not</em> create a shallow copy, as that
+makes no sense in the context of libxml2 trees. This means a
+potential incompatibility with ElementTree, but there's more chance
+that it works than if copy.copy() isn't supported at all.</li>
+<li>Increased compatibility with (c)ElementTree; .parse() on ElementTree is
+supported and parsing of gzipped XML files works.</li>
+<li>implemented index() on elements, allowing one to find the index of a
+SubElement.</li>
+</ul>
+</div>
+<div class="section" id="id426">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Use xslt-config instead of xml2-config to find out libxml2
+directories to take into account a case where libxslt is installed
+in a different directory than libxslt.</li>
+<li>Eliminate crash condition in iteration when text nodes are changed.</li>
+<li>Passing 'None' to tostring() does not result in a segfault anymore,
+but an AssertionError.</li>
+<li>Some test fixes for Windows.</li>
+<li>Raise XMLSyntaxError and XPathSyntaxError instead of plain python
+syntax errors. This should be less confusing.</li>
+<li>Fixed error with uncaught exception in Pyrex code.</li>
+<li>Calling lxml.etree.fromstring('') throws XMLSyntaxError instead of a
+segfault.</li>
+<li>has_key() works on attrib. 'in' tests also work correctly on attrib.</li>
+<li>INSTALL.txt was saying 2.2.16 instead of 2.6.16 as a supported
+libxml2 version, as it should.</li>
+<li>Passing a UTF-8 encoded string to the XML() function would fail;
+fixed.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id427">
+<h1>0.7 (2005-06-15)</h1>
+<div class="section" id="id428">
+<h2>Features added</h2>
+<ul class="simple">
+<li>parameters (XPath expressions) can be passed to XSLT using keyword
+parameters.</li>
+<li>Simple XInclude support. Calling the xinclude() method on a tree
+will process any XInclude statements in the document.</li>
+<li>XMLSchema support. Use the XMLSchema class or the convenience
+xmlschema() method on a tree to do XML Schema (XSD) validation.</li>
+<li>Added convenience xslt() method on tree. This is less efficient
+than the XSLT object, but makes it easier to write quick code.</li>
+<li>Added convenience relaxng() method on tree. This is less efficient
+than the RelaxNG object, but makes it easier to write quick code.</li>
+<li>Make it possible to use XPathEvaluator with elements as well. The
+XPathEvaluator in this case will retain the element so multiple
+XPath queries can be made against one element efficiently. This
+replaces the second argument to the .evaluate() method that existed
+previously.</li>
+<li>Allow registerNamespace() to be called on an XPathEvaluator, after
+creation, to add additional namespaces. Also allow registerNamespaces(),
+which does the same for a namespace dictionary.</li>
+<li>Add 'prefix' attribute to element to be able to read prefix information.
+This is entirely read-only.</li>
+<li>It is possible to supply an extra nsmap keyword parameter to
+the Element() and SubElement() constructors, which supplies a
+prefix to namespace URI mapping. This will create namespace
+prefix declarations on these elements and these prefixes will show up
+in XML serialization.</li>
+</ul>
+</div>
+<div class="section" id="id429">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Killed yet another memory management related bug: trees created
+using newDoc would not get a libxml2-level dictionary, which caused
+problems when deallocating these documents later if they contained a
+node that came from a document with a dictionary.</li>
+<li>Moving namespaced elements between documents was problematic as
+references to the original document would remain. This has been fixed
+by applying xmlReconciliateNs() after each move operation.</li>
+<li>Can pass None to 'dump()' without segfaults.</li>
+<li>tostring() works properly for non-root elements as well.</li>
+<li>Cleaned out the tostring() method so it should handle encoding
+correctly.</li>
+<li>Cleaned out the ElementTree.write() method so it should handle encoding
+correctly. Writing directly to a file should also be faster, as there is no
+need to go through a Python string in that case. Made sure the test cases
+test both serializing to StringIO as well as serializing to a real file.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id430">
+<h1>0.6 (2005-05-14)</h1>
+<div class="section" id="id431">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Changed setup.py so that library_dirs is also guessed. This should
+help with compilation on the Mac OS X platform, where otherwise the
+wrong library (shipping with the OS) could be picked up.</li>
+<li>Tweaked setup.py so that it picks up the version from version.txt.</li>
+</ul>
+</div>
+<div class="section" id="id432">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Do the right thing when handling namespaced attributes.</li>
+<li>fix bug where tostring() moved nodes into new documents. tostring()
+had very nasty side-effects before this fix, sorry!</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id433">
+<h1>0.5.1 (2005-04-09)</h1>
+<ul class="simple">
+<li>Python 2.2 compatibility fixes.</li>
+<li>unicode fixes in Element() and Comment() as well as XML(); unicode
+input wasn't properly being UTF-8 encoded.</li>
+</ul>
+</div>
+<div class="section" id="id434">
+<h1>0.5 (2005-04-08)</h1>
+<p>Initial public release.</p>
+</div>
+</div>
+<div class="footer">
+<hr class="footer" />
+Generated on: 2021-11-02.
+
+</div>
+</body>
+</html>
index 65ae1f14770f589a6250ec47c1769f9433e51b8f..205988d8a79b09ef1ad4cc9d9923b581b82a3caa 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>ElementTree compatibility of lxml.etree</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="elementtree-compatibility-of-lxml-etree">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu current" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">ElementTree compatibility of lxml.etree</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu current" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">ElementTree compatibility of lxml.etree</h1>
 
 <p>A lot of care has been taken to ensure compatibility between etree and
 ElementTree.  Nonetheless, some differences and incompatibilities exist:</p>
@@ -147,11 +147,11 @@ argument given) to XML, etree serializes this successfully.</p>
 not.  This means that a comment text "text" that ElementTree serializes as
 "&lt;!-- text --&gt;" will become "&lt;!--text--&gt;" in lxml.</p>
 </li>
-<li><p class="first">When the string '*' is used as tag filter in the <tt class="docutils literal">Element.getiterator()</tt>
-method, ElementTree returns all elements in the tree, including comments and
-processing instructions. lxml.etree only returns real Elements, i.e. tree
-nodes that have a string tag name.  Without a filter, both libraries iterate
-over all nodes.</p>
+<li><p class="first">When the string <tt class="docutils literal">'*'</tt> is used as tag filter in the <tt class="docutils literal">Element.iter()</tt> and
+<tt class="docutils literal"><span class="pre">.find*()</span></tt> methods, ElementTree returns all elements in the tree, including
+comments and processing instructions. lxml.etree only returns real Elements,
+i.e. tree nodes that have a string tag name.  Without a filter, both libraries
+iterate over all nodes.</p>
 <p>Note that currently only lxml.etree supports passing the <tt class="docutils literal">Element</tt> factory
 function as filter to select only Elements.  Both libraries support passing
 the <tt class="docutils literal">Comment</tt> and <tt class="docutils literal">ProcessingInstruction</tt> factories to select the
@@ -199,7 +199,7 @@ enough to replace a shallow copy in your case.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 079b56d321d37cb6da332f6e842c95ebcd0f0796..d3350aa034d1094530347381a3d532466f09fea2 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Credits</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="credits">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu current" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Credits</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu current" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Credits</h1>
 
 <div class="section" id="main-contributors">
 <h1>Main contributors</h1>
@@ -88,7 +88,7 @@ Holger Krekel for originally hosting lxml on codespeak.net</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index dd24b527b2ba535a860abdbb44a14ebcb634ee77..584e371a06884fb20edc7288c45600e831462984 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>lxml.cssselect</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="lxml-cssselect">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu current" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml.cssselect</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu current" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml.cssselect</h1>
 
 <p>lxml supports a number of interesting languages for tree traversal and element
 selection.  The most important is obviously <a class="reference external" href="xpathxslt.html#xpath">XPath</a>, but there is also
@@ -113,7 +113,7 @@ namespace URIs: the <tt class="docutils literal">CSSSelector</tt> class accepts
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 216dde3605f6d3236ef8ed29ac18ad51a11d3aa6..a8a36b044d9a4d2295653301ce185e2c6f4e213c 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Using custom Element classes in lxml</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="using-custom-element-classes-in-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu current" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Using custom Element classes in lxml</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu current" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Using custom Element classes in lxml</h1>
 
 <p>lxml has very sophisticated support for custom Element classes.  You
 can provide your own classes for Elements and have lxml use them by
@@ -148,14 +148,14 @@ for a parser works as follows:</p>
 does not know about your specialised parser and creates a new document that
 deploys the default parser:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">False</span>
 </pre></div>
 <p>You should therefore avoid using this factory function in code that
 uses custom classes.  The <tt class="docutils literal">makeelement()</tt> method of parsers provides
 a simple replacement:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">makeelement</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">True</span>
 </pre></div>
 <p>If you use a parser at the module level, you can easily redirect a module
@@ -166,21 +166,21 @@ level <tt class="docutils literal">Element()</tt> factory to the parser method b
 <p>While the <tt class="docutils literal">XML()</tt> and <tt class="docutils literal">HTML()</tt> factories also depend on the default
 parser, you can pass them a different parser as second argument:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;test/&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">False</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;test/&gt;"</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">True</span>
 </pre></div>
 <p>Whenever you create a document with a parser, it will inherit the lookup
 scheme and all subsequent element instantiations for this document will use
 it:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s2">"&lt;test/&gt;"</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">True</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="s2">"subel"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">True</span>
 </pre></div>
 <p>For testing code in the Python interpreter and for small projects, you
@@ -207,14 +207,14 @@ also the default lookup (if not configured otherwise).</p>
 the constructor.  While it accepts classes for <tt class="docutils literal">element</tt>, <tt class="docutils literal">comment</tt> and
 <tt class="docutils literal">pi</tt> nodes, most use cases will only override the element class:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">makeelement</span><span class="p">(</span><span class="s2">"myelement"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">False</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">lookup</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementDefaultClassLookup</span><span class="p">(</span><span class="n">element</span><span class="o">=</span><span class="n">honk</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">set_element_class_lookup</span><span class="p">(</span><span class="n">lookup</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">makeelement</span><span class="p">(</span><span class="s2">"myelement"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">honk</span><span class="p">))</span>
 <span class="go">True</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">el</span><span class="o">.</span><span class="n">honking</span>
 <span class="go">False</span>
@@ -228,7 +228,7 @@ the constructor.  While it accepts classes for <tt class="docutils literal">elem
 <span class="gp">... </span>    <span class="s1">'&lt;root honking="true"&gt;&lt;!--comment--&gt;&lt;/root&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">honking</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">comment</span>
 </pre></div>
 </div>
@@ -254,7 +254,7 @@ desired fallback lookup scheme to the constructor:</p>
 <span class="gp">... </span>    <span class="s1">'&lt;root honking="true"&gt;&lt;!--comment--&gt;&lt;/root&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">honking</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">comment</span>
 </pre></div>
 </div>
@@ -303,7 +303,7 @@ basis.  It allows you to implement a custom lookup scheme in a subclass:</p>
 <span class="gp">... </span>        <span class="k">if</span> <span class="n">node_type</span> <span class="o">==</span> <span class="s1">'element'</span><span class="p">:</span>
 <span class="gp">... </span>            <span class="k">return</span> <span class="n">honk</span>  <span class="c1"># be a bit more selective here ...</span>
 <span class="gp">... </span>        <span class="k">else</span><span class="p">:</span>
-<span class="gp">... </span>            <span class="k">return</span> <span class="bp">None</span>  <span class="c1"># pass on to (default) fallback</span>
+<span class="gp">... </span>            <span class="k">return</span> <span class="kc">None</span>  <span class="c1"># pass on to (default) fallback</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">()</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">set_element_class_lookup</span><span class="p">(</span><span class="n">MyLookup</span><span class="p">())</span>
@@ -312,7 +312,7 @@ basis.  It allows you to implement a custom lookup scheme in a subclass:</p>
 <span class="gp">... </span>    <span class="s1">'&lt;root honking="true"&gt;&lt;!--comment--&gt;&lt;/root&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">honking</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">comment</span>
 </pre></div>
 <p>The <tt class="docutils literal">.lookup()</tt> method must return either None (which triggers the
@@ -383,7 +383,7 @@ your Element proxy classes for the elements that they create.  The
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">hale</span><span class="p">(</span> <span class="s2">"some "</span><span class="p">,</span> <span class="n">honk</span><span class="p">(</span><span class="n">honking</span> <span class="o">=</span> <span class="s1">'true'</span><span class="p">),</span> <span class="n">bopp</span><span class="p">,</span> <span class="s2">" text"</span> <span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'unicode'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'unicode'</span><span class="p">))</span>
 <span class="go">&lt;hale&gt;some &lt;honk honking="true"/&gt;&lt;bopp/&gt; text&lt;/hale&gt;</span>
 </pre></div>
 </div>
@@ -412,13 +412,13 @@ everything that is not an Element class.</p>
 lxml:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">xml</span> <span class="o">=</span> <span class="s1">'&lt;honk xmlns="http://hui.de/honk" honking="true"/&gt;'</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">honk_element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="n">xml</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
 <span class="go">True</span>
 </pre></div>
 <p>The same works when creating elements by hand:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">honk_element</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">makeelement</span><span class="p">(</span><span class="s1">'{http://hui.de/honk}honk'</span><span class="p">,</span>
 <span class="gp">... </span>                                  <span class="n">honking</span><span class="o">=</span><span class="s1">'true'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
 <span class="go">True</span>
 </pre></div>
 <p>Essentially, what this allows you to do, is to give Elements a custom API
@@ -433,13 +433,13 @@ implementation:</p>
 <span class="gp">... </span>       <span class="s1">'&lt;bla/&gt;&lt;!--comment--&gt;'</span>
 <span class="gp">... </span>       <span class="s1">'&lt;/honk&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">honk_element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="n">xml</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">'lxml.etree._Element' object has no attribute 'honking'</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">comment</span>
 </pre></div>
 <p>You can therefore provide one implementation per element name in each
@@ -455,7 +455,7 @@ can just pass None as an element name:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">HonkNSElement</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">ElementBase</span><span class="p">):</span>
 <span class="gp">... </span>   <span class="k">def</span> <span class="nf">honk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 <span class="gp">... </span>      <span class="k">return</span> <span class="s2">"HONK"</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">namespace</span><span class="p">[</span><span class="bp">None</span><span class="p">]</span> <span class="o">=</span> <span class="n">HonkNSElement</span>  <span class="c1"># default Element for namespace</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">namespace</span><span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">=</span> <span class="n">HonkNSElement</span>  <span class="c1"># default Element for namespace</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">HonkElement</span><span class="p">(</span><span class="n">HonkNSElement</span><span class="p">):</span>
 <span class="gp">... </span>   <span class="nd">@property</span>
@@ -470,24 +470,24 @@ subclasses for elements of this namespace:</p>
 <span class="gp">... </span>       <span class="s1">'&lt;/honk&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">honk_element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">xml</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">honk_element</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">honk_element</span><span class="p">))</span>
 <span class="go">&lt;class 'HonkElement'&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
 <span class="go">&lt;class 'HonkNSElement'&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honk</span><span class="p">())</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="o">.</span><span class="n">honk</span><span class="p">())</span>
 <span class="go">HONK</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">honk</span><span class="p">())</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">honk</span><span class="p">())</span>
 <span class="go">HONK</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">honking</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
 <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">'HonkNSElement' object has no attribute 'honking'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>  <span class="c1"># uses fallback for non-elements</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">honk_element</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>  <span class="c1"># uses fallback for non-elements</span>
 <span class="go">comment</span>
 </pre></div>
 <p>Since lxml 4.1, the registration is more conveniently done with
@@ -495,7 +495,7 @@ class decorators.  The namespace registry object is callable with
 a name (or <tt class="docutils literal">None</tt>) as argument and can then be used as decorator.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">honk_elements</span> <span class="o">=</span> <span class="n">lookup</span><span class="o">.</span><span class="n">get_namespace</span><span class="p">(</span><span class="s1">'http://hui.de/honk'</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="nd">@honk_elements</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nd">@honk_elements</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
 <span class="gp">... </span><span class="k">class</span> <span class="nc">HonkNSElement</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">ElementBase</span><span class="p">):</span>
 <span class="gp">... </span>   <span class="k">def</span> <span class="nf">honk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 <span class="gp">... </span>      <span class="k">return</span> <span class="s2">"HONK"</span>
@@ -525,7 +525,7 @@ and use the blank decorator instead:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index e71849fa80cee0f1b89eccb9f18f0d478cd548fb..d874daa89c90b33ea8ddff98195d8091f52f7c33 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>BeautifulSoup Parser</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="beautifulsoup-parser">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu current" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">BeautifulSoup Parser</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu current" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">BeautifulSoup Parser</h1>
 
 <p><a class="reference external" href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a> is a Python package for working with real-world and broken HTML,
 just like <a class="reference external" href="lxmlhtml.html">lxml.html</a>.  As of version 4.x, it can use
@@ -74,7 +74,7 @@ Previous versions of lxml 2.0.x only have the <tt class="docutils literal">Eleme
 </pre></div>
 <p>To see what we have here, you can serialise it:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml.etree</span> <span class="kn">import</span> <span class="n">tostring</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;meta/&gt;</span>
 <span class="go">  &lt;head&gt;</span>
@@ -189,7 +189,7 @@ you can simply pass the resulting Unicode string into lxml's parser.</p>
 <span class="gp">... </span>   <span class="kn">from</span> <span class="nn">BeautifulSoup</span> <span class="kn">import</span> <span class="n">UnicodeDammit</span>   <span class="c1"># BeautifulSoup 3</span>
 <span class="gp">...</span>
 <span class="gp">... </span>   <span class="k">def</span> <span class="nf">decode_html</span><span class="p">(</span><span class="n">html_string</span><span class="p">):</span>
-<span class="gp">... </span>       <span class="n">converted</span> <span class="o">=</span> <span class="n">UnicodeDammit</span><span class="p">(</span><span class="n">html_string</span><span class="p">,</span> <span class="n">isHTML</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<span class="gp">... </span>       <span class="n">converted</span> <span class="o">=</span> <span class="n">UnicodeDammit</span><span class="p">(</span><span class="n">html_string</span><span class="p">,</span> <span class="n">isHTML</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="gp">... </span>       <span class="k">if</span> <span class="ow">not</span> <span class="n">converted</span><span class="o">.</span><span class="n">unicode</span><span class="p">:</span>
 <span class="gp">... </span>           <span class="k">raise</span> <span class="ne">UnicodeDecodeError</span><span class="p">(</span>
 <span class="gp">... </span>               <span class="s2">"Failed to detect encoding, tried [</span><span class="si">%s</span><span class="s2">]"</span><span class="p">,</span>
@@ -203,7 +203,7 @@ you can simply pass the resulting Unicode string into lxml's parser.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 9f87d679102813cb37384d9510845fb9e204309d..5d7bb89ccb0bc96f2bfa50044eb9d0ada77e8359 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Python extensions for XPath and XSLT</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="python-extensions-for-xpath-and-xslt">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu current" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Python extensions for XPath and XSLT</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu current" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Python extensions for XPath and XSLT</h1>
 
 <p>This document describes how to use Python extension functions in XPath
 and XSLT like this:</p>
@@ -77,7 +77,7 @@ the following examples.  Any number of arguments is allowed:</p>
 is done using the FunctionNamespace class.  For simplicity, we choose
 the empty namespace (None):</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">FunctionNamespace</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">FunctionNamespace</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'hello'</span><span class="p">]</span> <span class="o">=</span> <span class="n">hello</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'countargs'</span><span class="p">]</span> <span class="o">=</span> <span class="n">loadsofargs</span>
 </pre></div>
@@ -96,13 +96,13 @@ against:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">doc</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 </pre></div>
 <p>Done. Now we can have XPath expressions call our new function:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"hello('Dr. Falken')"</span><span class="p">))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"hello('Dr. Falken')"</span><span class="p">))</span>
 <span class="go">Hello Dr. Falken</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'hello(local-name(*))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'hello(local-name(*))'</span><span class="p">))</span>
 <span class="go">Hello b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'hello(string(b))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'hello(string(b))'</span><span class="p">))</span>
 <span class="go">Hello Haegar</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'countargs(., b, ./*)'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'countargs(., b, ./*)'</span><span class="p">))</span>
 <span class="go">Got 3 arguments.</span>
 </pre></div>
 <p>Note how we call both a Python function (<tt class="docutils literal">hello()</tt>) and an XPath built-in
@@ -113,7 +113,7 @@ allows you to do this:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'hello'</span><span class="p">]</span> <span class="o">=</span> <span class="n">hello</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">prefixmap</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'f'</span> <span class="p">:</span> <span class="s1">'http://mydomain.org/myfunctions'</span><span class="p">}</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'f:hello(local-name(*))'</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="n">prefixmap</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'f:hello(local-name(*))'</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="n">prefixmap</span><span class="p">))</span>
 <span class="go">Hello b</span>
 </pre></div>
 </div>
@@ -126,7 +126,7 @@ register it with the namespace:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="s1">'es'</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'hello'</span><span class="p">]</span> <span class="o">=</span> <span class="n">ola</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'es:hello(local-name(*))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s1">'es:hello(local-name(*))'</span><span class="p">))</span>
 <span class="go">Ola b</span>
 </pre></div>
 <p>This is a global assignment, so take care not to assign the same prefix to
@@ -145,7 +145,7 @@ was None, but since lxml 2.0 it provides two properties: <tt class="docutils lit
 <tt class="docutils literal">context_node</tt>.  The context node is the Element where the current function
 is called:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">print_tag</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">nodes</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">context_node</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="p">[</span> <span class="n">n</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nodes</span> <span class="p">]))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">context_node</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="p">[</span> <span class="n">n</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nodes</span> <span class="p">]))</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">FunctionNamespace</span><span class="p">(</span><span class="s1">'http://mydomain.org/printtag'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="s2">"pt"</span>
@@ -159,7 +159,7 @@ is called:</p>
 allows functions to keep state:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">print_context</span><span class="p">(</span><span class="n">context</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="n">context</span><span class="o">.</span><span class="n">eval_context</span><span class="p">[</span><span class="n">context</span><span class="o">.</span><span class="n">context_node</span><span class="o">.</span><span class="n">tag</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"done"</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">eval_context</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">eval_context</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s2">"print_context"</span><span class="p">]</span> <span class="o">=</span> <span class="n">print_context</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ignore</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"//*[pt:print_context()]"</span><span class="p">)</span>
@@ -172,12 +172,12 @@ allows functions to keep state:</p>
 <p>Extension functions work for all ways of evaluating XPath expressions and for
 XSL transformations:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'es:hello(local-name(/a))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'es:hello(local-name(/a))'</span><span class="p">))</span>
 <span class="go">Ola a</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'f'</span> <span class="p">:</span> <span class="s1">'http://mydomain.org/myfunctions'</span><span class="p">}</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="n">namespaces</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'f:hello(local-name(/a))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'f:hello(local-name(/a))'</span><span class="p">))</span>
 <span class="go">Hello a</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">xslt</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XSLT</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s1">'''</span>
@@ -190,7 +190,7 @@ XSL transformations:</p>
 <span class="gp">... </span><span class="s1">    &lt;/template&gt;</span>
 <span class="gp">... </span><span class="s1">  &lt;/stylesheet&gt;</span>
 <span class="gp">... </span><span class="s1">'''</span><span class="p">))</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">xslt</span><span class="p">(</span><span class="n">doc</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">xslt</span><span class="p">(</span><span class="n">doc</span><span class="p">))</span>
 <span class="go">Ola Haegar</span>
 </pre></div>
 <p>It is also possible to register namespaces with a single evaluator after its
@@ -228,7 +228,7 @@ The value is a dictionary mapping (namespace, name) tuples to functions:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'l'</span> <span class="p">:</span> <span class="s1">'local-ns'</span><span class="p">}</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="n">namespaces</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="n">extensions</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'l:local-hello(string(b))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'l:local-hello(string(b))'</span><span class="p">))</span>
 <span class="go">Hello Haegar</span>
 </pre></div>
 <p>For larger numbers of extension functions, you can define classes or modules
@@ -246,7 +246,7 @@ and use the <tt class="docutils literal">Extension</tt> helper:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">extensions</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span> <span class="n">ext_module</span><span class="p">,</span> <span class="n">functions</span><span class="p">,</span> <span class="n">ns</span><span class="o">=</span><span class="s1">'local-ns'</span> <span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="n">namespaces</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="n">extensions</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'l:function1(string(b))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'l:function1(string(b))'</span><span class="p">))</span>
 <span class="go">1Haegar</span>
 </pre></div>
 <p>The optional second argument to <tt class="docutils literal">Extension</tt> can either be a
@@ -260,17 +260,17 @@ examples will therefore all do the same thing:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">functions</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'function1'</span><span class="p">,</span> <span class="s1">'function2'</span><span class="p">,</span> <span class="s1">'function3'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">extensions</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span> <span class="n">ext_module</span><span class="p">,</span> <span class="n">functions</span> <span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="n">extensions</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
 <span class="go">123Haegar</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">extensions</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span> <span class="n">ext_module</span><span class="p">,</span> <span class="n">functions</span><span class="p">,</span> <span class="n">ns</span><span class="o">=</span><span class="bp">None</span> <span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">extensions</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span> <span class="n">ext_module</span><span class="p">,</span> <span class="n">functions</span><span class="p">,</span> <span class="n">ns</span><span class="o">=</span><span class="kc">None</span> <span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="n">extensions</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
 <span class="go">123Haegar</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">extensions</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span><span class="n">ext_module</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="n">extensions</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
 <span class="go">123Haegar</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">functions</span> <span class="o">=</span> <span class="p">{</span>
@@ -280,7 +280,7 @@ examples will therefore all do the same thing:</p>
 <span class="gp">... </span>    <span class="p">}</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">extensions</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span><span class="n">ext_module</span><span class="p">,</span> <span class="n">functions</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="n">extensions</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(function2(function3(string(b))))'</span><span class="p">))</span>
 <span class="go">123Haegar</span>
 </pre></div>
 <p>For convenience, you can also pass a sequence of extensions:</p>
@@ -288,7 +288,7 @@ examples will therefore all do the same thing:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">extensions2</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Extension</span><span class="p">(</span><span class="n">ext_module</span><span class="p">,</span> <span class="n">ns</span><span class="o">=</span><span class="s1">'local-ns'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">extensions</span><span class="o">=</span><span class="p">[</span><span class="n">extensions1</span><span class="p">,</span> <span class="n">extensions2</span><span class="p">],</span>
 <span class="gp">... </span>                         <span class="n">namespaces</span><span class="o">=</span><span class="n">namespaces</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(l:function2(function3(string(b))))'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">(</span><span class="s1">'function1(l:function2(function3(string(b))))'</span><span class="p">))</span>
 <span class="go">123Haegar</span>
 </pre></div>
 </div>
@@ -303,11 +303,11 @@ will also be returned as floats:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">returnsInteger</span><span class="p">(</span><span class="n">_</span><span class="p">):</span>
 <span class="gp">... </span>   <span class="k">return</span> <span class="mi">1</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">returnsBool</span><span class="p">(</span><span class="n">_</span><span class="p">):</span>
-<span class="gp">... </span>   <span class="k">return</span> <span class="bp">True</span>
+<span class="gp">... </span>   <span class="k">return</span> <span class="kc">True</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">returnFirstNode</span><span class="p">(</span><span class="n">_</span><span class="p">,</span> <span class="n">nodes</span><span class="p">):</span>
 <span class="gp">... </span>   <span class="k">return</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">FunctionNamespace</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">FunctionNamespace</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'float'</span><span class="p">]</span> <span class="o">=</span> <span class="n">returnsFloat</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'int'</span><span class="p">]</span>   <span class="o">=</span> <span class="n">returnsInteger</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">[</span><span class="s1">'bool'</span><span class="p">]</span>  <span class="o">=</span> <span class="n">returnsBool</span>
@@ -345,13 +345,13 @@ XPath node-sets:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">e</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">e</span><span class="p">(</span><span class="s2">"new-node-set()/result"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span> <span class="n">t</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span> <span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span> <span class="n">t</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span> <span class="p">])</span>
 <span class="go">['Alpha', 'Beta', 'Gamma', 'Delta']</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">e</span><span class="p">(</span><span class="s2">"new-node-set()"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span> <span class="n">t</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span> <span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span> <span class="n">t</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span> <span class="p">])</span>
 <span class="go">['results1', 'results2', 'subresult']</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span> <span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span> <span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span> <span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">r</span> <span class="p">])</span>
 <span class="go">[2, 3, 0]</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span>
 <span class="go">'Alpha'</span>
@@ -370,13 +370,13 @@ Only the elements and their children are passed on, no outlying parents or
 tail texts will be available in the result.  This also means that in the above
 example, the <cite>subresult</cite> elements in <cite>results2</cite> and <cite>results3</cite> are no longer
 identical within the node-set, they belong to independent trees:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">subresult - subresult</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
 <span class="go">False</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">results2</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">())</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">())</span>
 <span class="go">None</span>
 </pre></div>
 <p>This is an implementation detail that you should be aware of, but you should
@@ -399,7 +399,7 @@ code like this:</p>
 <p>And then you can implement the element in Python like this:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyExtElement</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">XSLTExtension</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">self_node</span><span class="p">,</span> <span class="n">input_node</span><span class="p">,</span> <span class="n">output_parent</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"Hello from XSLT!"</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"Hello from XSLT!"</span><span class="p">)</span>
 <span class="gp">... </span>        <span class="n">output_parent</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"I did it!"</span>
 <span class="gp">... </span>        <span class="c1"># just copy own content input to output</span>
 <span class="gp">... </span>        <span class="n">output_parent</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span> <span class="nb">list</span><span class="p">(</span><span class="n">self_node</span><span class="p">)</span> <span class="p">)</span>
@@ -530,7 +530,7 @@ will work:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
diff --git a/doc/html/flattr-badge-large.png b/doc/html/flattr-badge-large.png
deleted file mode 100644 (file)
index 1105305..0000000
Binary files a/doc/html/flattr-badge-large.png and /dev/null differ
index f610bdc59d6b691b2e5b9a76c6b67b3cf381569b..d705b6c8061b4bba42e6c891fa2038132b7f9ac9 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>html5lib Parser</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="html5lib-parser">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu current" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">html5lib Parser</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu current" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">html5lib Parser</h1>
 
 <p><a class="reference external" href="http://code.google.com/p/html5lib/">html5lib</a> is a Python package that implements the HTML5 parsing algorithm
 which is heavily influenced by current browsers and based on the <a class="reference external" href="http://www.whatwg.org/specs/web-apps/current-work/">WHATWG
@@ -90,7 +90,7 @@ module.  Note that these are the parser classes provided by html5lib.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 11c0d509fb795ac7e4b10d923d4a82c20943214b..075738707d42b5e7a2793a46e2b7dd44e988a203 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>lxml - Processing XML and HTML with Python</title>
 <meta content="lxml - the most feature-rich and easy-to-use library for processing XML and HTML in the Python language" name="description" />
 <meta content="Python XML, XML processing, HTML, lxml, simple XML, ElementTree, etree, lxml.etree, objectify, XML parsing, XML validation, XPath, XSLT" name="keywords" />
@@ -26,7 +26,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu current" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml - XML and HTML with Python</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu current" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml - XML and HTML with Python</h1>
 
 <div class="pagequote line-block">
 <div class="line"><a class="reference external" href="https://mailman-mail5.webfaction.com/pipermail/lxml/20080131/019119.html">&#187; lxml takes all the pain out of XML. &#171;</a></div>
@@ -66,11 +66,15 @@ Thank you for your support.</p>
 <p class="center">Support lxml through <a class="reference external" href="https://github.com/users/scoder/sponsorship">GitHub Sponsors</a></p>
 <p class="center">via a <a class="reference external" href="https://tidelift.com/subscription/pkg/pypi-lxml">Tidelift subscription</a></p>
 <p class="center">or via PayPal:</p>
-<p class="center"><a class="reference external" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=R56JE3VCPDA9N"><img alt="Donate to the lxml project" src="https://lxml.de/paypal_btn_donateCC_LG.png" style="width: 160px; height: 47px;" /></a></p>
+<p class="center"><a class="reference external image-reference" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=R56JE3VCPDA9N"><img alt="Donate to the lxml project" src="https://lxml.de/paypal_btn_donateCC_LG.png" style="width: 160px; height: 47px;" /></a></p>
 <p>Please <a class="reference external" href="http://consulting.behnel.de/">contact Stefan Behnel</a>
 for other ways to support the lxml project,
 as well as commercial consulting, customisations and trainings on lxml and
 fast Python XML processing.</p>
+<p>Note that we are not accepting donations in crypto currencies.
+Much of the development and hosting for lxml is done in a carbon-neutral way
+or with compensated and very low emissions.
+Crypto currencies do not fit into that ambition.</p>
 <p><a class="reference external" href="https://travis-ci.org/">Travis-CI</a> and <a class="reference external" href="https://www.appveyor.com/">AppVeyor</a>
 support the lxml project with their build and CI servers.
 Jetbrains supports the lxml project by donating free licenses of their
@@ -81,7 +85,7 @@ Another supporter of the lxml project is
 </div>
 <div class="section" id="documentation">
 <h1>Documentation</h1>
-<p>The complete lxml documentation is available for download as <a class="reference external" href="lxmldoc-4.6.3.pdf">PDF
+<p>The complete lxml documentation is available for download as <a class="reference external" href="lxmldoc-4.6.4.pdf">PDF
 documentation</a>.  The HTML documentation from this web site is part of
 the normal <a class="reference external" href="#download">source download</a>.</p>
 <ul class="simple">
@@ -145,8 +149,8 @@ external C modules, including fast custom element class support.</p>
 Index</a> (PyPI).  It has the source
 that compiles on various platforms.  The source distribution is signed
 with <a class="reference external" href="pubkey.asc">this key</a>.</p>
-<p>The latest version is <a class="reference external" href="/files/lxml-4.6.3.tgz">lxml 4.6.3</a>, released 2021-03-21
-(<a class="reference external" href="/changes-4.6.3.html">changes for 4.6.3</a>).  <a class="reference external" href="#old-versions">Older versions</a>
+<p>The latest version is <a class="reference external" href="/files/lxml-4.6.4.tgz">lxml 4.6.4</a>, released 2021-11-01
+(<a class="reference external" href="/changes-4.6.4.html">changes for 4.6.4</a>).  <a class="reference external" href="#old-versions">Older versions</a>
 are listed below.</p>
 <p>Please take a look at the
 <a class="reference external" href="installation.html">installation instructions</a> !</p>
@@ -154,7 +158,7 @@ are listed below.</p>
 part of the source distribution, so if you want to download the
 documentation for offline use, take the source archive and copy the
 <tt class="docutils literal">doc/html</tt> directory out of the source tree, or use the
-<a class="reference external" href="lxmldoc-4.6.3.pdf">PDF documentation</a>.</p>
+<a class="reference external" href="lxmldoc-4.6.4.pdf">PDF documentation</a>.</p>
 <p>The latest <a class="reference external" href="https://github.com/lxml/lxml/archive/master.zip">installable developer sources</a>
 are available from Github.  It's also possible to check out
 the latest development version of lxml from Github directly, using a command
@@ -215,6 +219,7 @@ obstacle to using lxml in your codebase.</p>
 <a class="reference external" href="http://lxml.de/2.0/">2.0</a>,
 <a class="reference external" href="http://lxml.de/1.3/">1.3</a></p>
 <ul class="simple">
+<li><a class="reference external" href="/files/lxml-4.6.4.tgz">lxml 4.6.4</a>, released 2021-11-01 (<a class="reference external" href="/changes-4.6.4.html">changes for 4.6.4</a>)</li>
 <li><a class="reference external" href="/files/lxml-4.6.3.tgz">lxml 4.6.3</a>, released 2021-03-21 (<a class="reference external" href="/changes-4.6.3.html">changes for 4.6.3</a>)</li>
 <li><a class="reference external" href="/files/lxml-4.6.2.tgz">lxml 4.6.2</a>, released 2020-11-26 (<a class="reference external" href="/changes-4.6.2.html">changes for 4.6.2</a>)</li>
 <li><a class="reference external" href="/files/lxml-4.6.1.tgz">lxml 4.6.1</a>, released 2020-10-18 (<a class="reference external" href="/changes-4.6.1.html">changes for 4.6.1</a>)</li>
@@ -231,6 +236,12 @@ obstacle to using lxml in your codebase.</p>
 </div><div class="section" id="project-income-report">
 <h1>Project income report</h1>
 <ul class="simple">
+<li>Total project income in 2020: EUR 6065,86  (506.49 &#8364; / month)<ul>
+<li>Tidelift: EUR 4064.77</li>
+<li>Paypal: EUR 1401.09</li>
+<li>other: EUR 600.00</li>
+</ul>
+</li>
 <li>Total project income in 2019: EUR 717.52  (59.79 &#8364; / month)<ul>
 <li>Tidelift: EUR 360.30</li>
 <li>Paypal: EUR 157.22</li>
@@ -260,7 +271,7 @@ donation is non-refundable.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index c9f80a1cc4c0befce2d3c2052352418a02cde737..d1673c0e51a81774cd0a69f5dfaa6b7ed239f67b 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Installing lxml</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="installing-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu current" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Installing lxml</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu current" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Installing lxml</h1>
 
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
@@ -208,7 +208,7 @@ read the
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 790f8385580b5b61838119e9d407f9e95c9cc2ea..709ae5abb304165d1ec2e570cc5550e82473e092 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Why lxml?</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="why-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu current" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Why lxml?</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu current" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Why lxml?</h1>
 
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
@@ -82,7 +82,7 @@ having to learn new things -- XML is complicated enough.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 7345dc02c9ff1b3bae2a349af89d3f58c4c57f41..54079881fe2e31c1fbad77e6c548142e8c077ae9 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>How to read the source of lxml</title>
 <meta name="author" content="Stefan Behnel" />
 <meta content="How to read and work on the source code of lxml" name="description" />
@@ -27,7 +27,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="how-to-read-the-source-of-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu current" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">How to read the source of lxml</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu current" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">How to read the source of lxml</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -286,7 +286,7 @@ implemented in pure Python.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 5c9f700cf7e0dc31fffaaec9dd6985757da0a8f3..a38097f1a9124591351be4f37749271a4d632703 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>lxml.html</title>
 <meta name="author" content="Ian Bicking" />
 <link rel="stylesheet" href="style.css" type="text/css" />
@@ -25,7 +25,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="lxml-html">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu current" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml.html</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu current" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml.html</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -199,13 +199,13 @@ document in a doctest, you can do the following:</p>
 <span class="gp">... </span><span class="s1">   &lt;/body&gt;&lt;/html&gt;</span>
 <span class="gp">... </span><span class="s1">'''</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;html&gt;&lt;body onload="" color="white"&gt;&lt;p&gt;Hi !&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;html&gt; &lt;body color="white" onload=""&gt; &lt;p&gt;Hi    !&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;body color="white" onload=""&gt;</span>
 <span class="go">    &lt;p&gt;Hi !&lt;/p&gt;</span>
@@ -241,7 +241,7 @@ pages and fragments:</p>
 <span class="gp">... </span>  <span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">lxml</span><span class="o">.</span><span class="n">html</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;head&gt;</span>
 <span class="go">    &lt;link href="great.css" rel="stylesheet" type="text/css"&gt;</span>
@@ -412,7 +412,7 @@ You can, for instance, do:</p>
 <span class="gp">... </span>    <span class="n">name</span><span class="o">=</span><span class="s1">'John Smith'</span><span class="p">,</span>
 <span class="gp">... </span>    <span class="n">phone</span><span class="o">=</span><span class="s1">'555-555-3949'</span><span class="p">,</span>
 <span class="gp">... </span>    <span class="n">interest</span><span class="o">=</span><span class="nb">set</span><span class="p">([</span><span class="s1">'cats'</span><span class="p">,</span> <span class="s1">'llamas'</span><span class="p">]))</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">tostring</span><span class="p">(</span><span class="n">form</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">tostring</span><span class="p">(</span><span class="n">form</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;body&gt;</span>
 <span class="go">    &lt;form&gt;</span>
@@ -493,7 +493,7 @@ content that upsets browsers and tries to run evil code on the client side:</p>
 <p>To remove the all suspicious content from this unparsed document, use the
 <tt class="docutils literal">clean_html</tt> function:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml.html.clean</span> <span class="kn">import</span> <span class="n">clean_html</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">clean_html</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">clean_html</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;div&gt;&lt;style&gt;/* deleted */&lt;/style&gt;&lt;body&gt;</span>
 
 <span class="go">   &lt;a href=""&gt;a link&lt;/a&gt;</span>
@@ -511,8 +511,8 @@ content that upsets browsers and tries to run evil code on the client side:</p>
 which content is removed:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml.html.clean</span> <span class="kn">import</span> <span class="n">Cleaner</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">cleaner</span> <span class="o">=</span> <span class="n">Cleaner</span><span class="p">(</span><span class="n">page_structure</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">links</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">cleaner</span><span class="o">.</span><span class="n">clean_html</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">cleaner</span> <span class="o">=</span> <span class="n">Cleaner</span><span class="p">(</span><span class="n">page_structure</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">links</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">cleaner</span><span class="o">.</span><span class="n">clean_html</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;head&gt;</span>
 <span class="go">    &lt;link rel="alternate" src="evil-rss" type="text/rss"&gt;</span>
@@ -531,10 +531,10 @@ which content is removed:</p>
 <span class="go">  &lt;/body&gt;</span>
 <span class="go">&lt;/html&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">cleaner</span> <span class="o">=</span> <span class="n">Cleaner</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">links</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">add_nofollow</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
-<span class="gp">... </span>                  <span class="n">page_structure</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">safe_attrs_only</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">cleaner</span> <span class="o">=</span> <span class="n">Cleaner</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">links</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">add_nofollow</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+<span class="gp">... </span>                  <span class="n">page_structure</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe_attrs_only</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">cleaner</span><span class="o">.</span><span class="n">clean_html</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">cleaner</span><span class="o">.</span><span class="n">clean_html</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;head&gt;</span>
 <span class="go">  &lt;/head&gt;</span>
@@ -620,9 +620,9 @@ documents.</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">doc1</span> <span class="o">=</span> <span class="s1">'''&lt;p&gt;Here is some text.&lt;/p&gt;'''</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">doc2</span> <span class="o">=</span> <span class="s1">'''&lt;p&gt;Here is &lt;b&gt;a lot&lt;/b&gt; of &lt;i&gt;text&lt;/i&gt;.&lt;/p&gt;'''</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">doc3</span> <span class="o">=</span> <span class="s1">'''&lt;p&gt;Here is &lt;b&gt;a little&lt;/b&gt; &lt;i&gt;text&lt;/i&gt;.&lt;/p&gt;'''</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">htmldiff</span><span class="p">(</span><span class="n">doc1</span><span class="p">,</span> <span class="n">doc2</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">htmldiff</span><span class="p">(</span><span class="n">doc1</span><span class="p">,</span> <span class="n">doc2</span><span class="p">)</span>
 <span class="go">&lt;p&gt;Here is &lt;ins&gt;&lt;b&gt;a lot&lt;/b&gt; of &lt;i&gt;text&lt;/i&gt;.&lt;/ins&gt; &lt;del&gt;some text.&lt;/del&gt; &lt;/p&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">html_annotate</span><span class="p">([(</span><span class="n">doc1</span><span class="p">,</span> <span class="s1">'author1'</span><span class="p">),</span> <span class="p">(</span><span class="n">doc2</span><span class="p">,</span> <span class="s1">'author2'</span><span class="p">),</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">html_annotate</span><span class="p">([(</span><span class="n">doc1</span><span class="p">,</span> <span class="s1">'author1'</span><span class="p">),</span> <span class="p">(</span><span class="n">doc2</span><span class="p">,</span> <span class="s1">'author2'</span><span class="p">),</span>
 <span class="gp">... </span>                     <span class="p">(</span><span class="n">doc3</span><span class="p">,</span> <span class="s1">'author3'</span><span class="p">)])</span>
 <span class="go">&lt;p&gt;&lt;span title="author1"&gt;Here is&lt;/span&gt;</span>
 <span class="go">   &lt;b&gt;&lt;span title="author2"&gt;a&lt;/span&gt;</span>
@@ -639,7 +639,7 @@ version.  The default version, the output of which you see in the
 example, looks like:</p>
 <div class="syntax"><pre><span></span><span class="k">def</span> <span class="nf">default_markup</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">version</span><span class="p">):</span>
     <span class="k">return</span> <span class="s1">'&lt;span title="</span><span class="si">%s</span><span class="s1">"&gt;</span><span class="si">%s</span><span class="s1">&lt;/span&gt;'</span> <span class="o">%</span> <span class="p">(</span>
-        <span class="n">cgi</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="nb">unicode</span><span class="p">(</span><span class="n">version</span><span class="p">),</span> <span class="mi">1</span><span class="p">),</span> <span class="n">text</span><span class="p">)</span>
+        <span class="n">cgi</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">unicode</span><span class="p">(</span><span class="n">version</span><span class="p">),</span> <span class="mi">1</span><span class="p">),</span> <span class="n">text</span><span class="p">)</span>
 </pre></div>
 </div>
 <div class="section" id="examples">
@@ -696,7 +696,7 @@ microformat.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index f88dc2312a8592eed8071259c28fae7671ac13d1..14e6412f11966468a653a2c7d58c86fb5b0ec6a7 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>lxml.objectify</title>
 <meta name="authors" content="Stefan Behnel  Holger Joukl" />
 <link rel="stylesheet" href="style.css" type="text/css" />
@@ -25,7 +25,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="lxml-objectify">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu current" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml.objectify</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu current" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">lxml.objectify</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -100,20 +100,20 @@ behind the usual object attribute access pattern.  Asking an element for an
 attribute will return the sequence of children with corresponding tag names:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">b</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
 <span class="go">0</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">b</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
 <span class="go">1</span>
 </pre></div>
 <p>For convenience, you can omit the index '0' to access the first child:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="p">)</span>
 <span class="go">0</span>
@@ -151,11 +151,11 @@ methods for iteration, it supports an optional tag keyword argument:</p>
 </pre></div>
 <p>XML attributes are accessed as in the normal ElementTree API:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">,</span> <span class="n">myattr</span><span class="o">=</span><span class="s2">"someval"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"myattr"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"myattr"</span><span class="p">))</span>
 <span class="go">someval</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"c"</span><span class="p">,</span> <span class="s2">"oh-oh"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"c"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"c"</span><span class="p">))</span>
 <span class="go">oh-oh</span>
 </pre></div>
 <p>In addition to the normal ElementTree API for appending elements to trees,
@@ -164,9 +164,9 @@ case, the subtree is automatically deep copied and the tag name of its root is
 updated to match the attribute name:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"yet_another_child"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">new_child</span> <span class="o">=</span> <span class="n">el</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">new_child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">new_child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">new_child</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">yet_another_child</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="p">[</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"y"</span><span class="p">),</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"y"</span><span class="p">)</span> <span class="p">]</span>
@@ -187,22 +187,22 @@ updated to match the attribute name:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">subel</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">el</span><span class="p">,</span> <span class="s2">"sub"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">child</span> <span class="o">=</span> <span class="n">el</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">child</span><span class="o">.</span><span class="n">sub</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">child</span><span class="o">.</span><span class="n">sub</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">sub</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">child</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">el</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">child</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">sub</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">child</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">sub</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">sub</span>
 </pre></div>
 <p>Note that special care must be taken when changing the tag name of an element:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span> <span class="o">=</span> <span class="s2">"notB"</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">b</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">notB</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">notB</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">notB</span>
 </pre></div>
 </div>
@@ -215,17 +215,17 @@ the module:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">fileobject</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="s1">'&lt;test/&gt;'</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">fileobject</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">(),</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">(),</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
 <span class="go">True</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s1">'&lt;test/&gt;'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
 <span class="go">True</span>
 </pre></div>
 <p>To build a new tree in memory, <tt class="docutils literal">objectify</tt> replicates the standard
 factory function <tt class="docutils literal">Element()</tt> from <tt class="docutils literal">lxml.etree</tt>:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">obj_el</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"new"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">obj_el</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">obj_el</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
 <span class="go">True</span>
 </pre></div>
 <p>After creating such an Element, you can use the <a class="reference external" href="tutorial.html#the-element-class">usual API</a> of
@@ -237,11 +237,11 @@ from their tree.  However, all independent elements that you create
 through the <tt class="docutils literal">Element()</tt> factory of lxml.etree (instead of objectify)
 will not support the <tt class="docutils literal">objectify</tt> API by themselves:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">subel</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">obj_el</span><span class="p">,</span> <span class="s2">"sub"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">subel</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">subel</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
 <span class="go">True</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">independent_el</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"new"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">independent_el</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">independent_el</span><span class="p">,</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedElement</span><span class="p">))</span>
 <span class="go">False</span>
 </pre></div>
 </div>
@@ -252,11 +252,11 @@ will not support the <tt class="docutils literal">objectify</tt> API by themselv
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">root</span><span class="p">(</span>
 <span class="gp">... </span>  <span class="n">E</span><span class="o">.</span><span class="n">a</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span>
 <span class="gp">... </span>  <span class="n">E</span><span class="o">.</span><span class="n">b</span><span class="p">(</span><span class="mf">6.21</span><span class="p">),</span>
-<span class="gp">... </span>  <span class="n">E</span><span class="o">.</span><span class="n">c</span><span class="p">(</span><span class="bp">True</span><span class="p">),</span>
+<span class="gp">... </span>  <span class="n">E</span><span class="o">.</span><span class="n">c</span><span class="p">(</span><span class="kc">True</span><span class="p">),</span>
 <span class="gp">... </span>  <span class="n">E</span><span class="o">.</span><span class="n">d</span><span class="p">(</span><span class="s2">"how"</span><span class="p">,</span> <span class="n">tell</span><span class="o">=</span><span class="s2">"me"</span><span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns:py="http://codespeak.net/lxml/objectify/pytype"&gt;</span>
 <span class="go">  &lt;a py:pytype="int"&gt;5&lt;/a&gt;</span>
 <span class="go">  &lt;b py:pytype="float"&gt;6.21&lt;/b&gt;</span>
@@ -274,7 +274,7 @@ will not support the <tt class="docutils literal">objectify</tt> API by themselv
 <span class="gp">... </span>  <span class="n">HOWMANY</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns:py="http://codespeak.net/lxml/objectify/pytype"&gt;</span>
 <span class="go">  &lt;title py:pytype="str"&gt;The title&lt;/title&gt;</span>
 <span class="go">  &lt;how-many py:pytype="int"&gt;5&lt;/how-many&gt;</span>
@@ -284,12 +284,12 @@ will not support the <tt class="docutils literal">objectify</tt> API by themselv
 creates pytype annotated Elements without a namespace.  You can switch off the
 pytype annotation by passing False to the <tt class="docutils literal">annotate</tt> keyword argument of the
 constructor.  You can also pass a default namespace and an <tt class="docutils literal">nsmap</tt>:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">myE</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ElementMaker</span><span class="p">(</span><span class="n">annotate</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
-<span class="gp">... </span>          <span class="n">namespace</span><span class="o">=</span><span class="s2">"http://my/ns"</span><span class="p">,</span> <span class="n">nsmap</span><span class="o">=</span><span class="p">{</span><span class="bp">None</span> <span class="p">:</span> <span class="s2">"http://my/ns"</span><span class="p">})</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">myE</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ElementMaker</span><span class="p">(</span><span class="n">annotate</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+<span class="gp">... </span>          <span class="n">namespace</span><span class="o">=</span><span class="s2">"http://my/ns"</span><span class="p">,</span> <span class="n">nsmap</span><span class="o">=</span><span class="p">{</span><span class="kc">None</span> <span class="p">:</span> <span class="s2">"http://my/ns"</span><span class="p">})</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">myE</span><span class="o">.</span><span class="n">root</span><span class="p">(</span> <span class="n">myE</span><span class="o">.</span><span class="n">someint</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns="http://my/ns"&gt;</span>
 <span class="go">  &lt;someint&gt;2&lt;/someint&gt;</span>
 <span class="go">&lt;/root&gt;</span>
@@ -304,7 +304,7 @@ the lookup will use the namespace of the parent:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">b</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"{http://ns/}b"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"{http://other/}c"</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 </pre></div>
 <p>Note that the <tt class="docutils literal">SubElement()</tt> factory of <tt class="docutils literal">lxml.etree</tt> does not
@@ -312,10 +312,10 @@ inherit any namespaces when creating a new subelement.  Element
 creation must be explicit about the namespace, and is simplified
 through the E-factory as described above.</p>
 <p>Lookups, however, inherit namespaces implicitly:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
     <span class="o">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: {http://ns/}c</span>
@@ -323,18 +323,18 @@ through the E-factory as described above.</p>
 <p>To access an element in a different namespace than its parent, you can
 use <tt class="docutils literal">getattr()</tt>:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"{http://other/}c"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://other/}c</span>
 </pre></div>
 <p>For convenience, there is also a quick way through item access:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="s2">"{http://other/}c"</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://other/}c</span>
 </pre></div>
 <p>The same approach must be used to access children with tag names that are not
 valid Python identifiers:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"{http://ns/}tag-name"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}tag-name</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">new_el</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"{http://ns/}new-element"</span><span class="p">)</span>
@@ -343,27 +343,27 @@ valid Python identifiers:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">el</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">new_el</span><span class="p">,</span> <span class="s2">"{http://ns/}child"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span> <span class="n">new_el</span><span class="p">,</span> <span class="n">new_el</span> <span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]))</span>
 <span class="go">2</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}tag-name</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">child</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">child</span><span class="p">))</span>
 <span class="go">3</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">]</span><span class="o">.</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}child</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"tag-name"</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}child</span>
 </pre></div>
 <p>or for names that have a special meaning in lxml.objectify:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;text&gt;TEXT&lt;/text&gt;&lt;/root&gt;"</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">'NoneType' object has no attribute 'text'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"text"</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="s2">"text"</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">TEXT</span>
 </pre></div>
 </div>
@@ -389,7 +389,7 @@ parse the schema from a file-like object (or file or filename):</p>
 <span class="gp">... </span><span class="s1">    &lt;/xsd:complexType&gt;</span>
 <span class="gp">... </span><span class="s1">  &lt;/xsd:schema&gt;</span>
 <span class="gp">... </span><span class="s1">'''</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">schema</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSchema</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">f</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">schema</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSchema</span><span class="p">(</span><span class="n">file</span><span class="o">=</span><span class="n">f</span><span class="p">)</span>
 </pre></div>
 <p>When creating the validating parser, we must make sure it <a class="reference external" href="#advance-element-class-lookup">returns
 objectify trees</a>.  This is best done with the <tt class="docutils literal">makeparser()</tt>
@@ -400,7 +400,7 @@ function:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">xml</span> <span class="o">=</span> <span class="s2">"&lt;a&gt;&lt;b&gt;test&lt;/b&gt;&lt;/a&gt;"</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">a</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">xml</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">b</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">b</span><span class="p">)</span>
 <span class="go">test</span>
 </pre></div>
 <p>Or an invalid document:</p>
@@ -423,75 +423,75 @@ represented by the <tt class="docutils literal">ObjectPath</tt> class:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">d</span>  <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"{http://other/}d"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">path</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.b.c"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
 <span class="go">root.b.c</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">path</span><span class="o">.</span><span class="n">hasattr</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}c</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.b.c"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}c</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.{http://other/}d"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://other/}d</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.{not}there"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.</span><span class="si">{not}</span><span class="s2">there"</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: {not}there</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"{not}there"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"</span><span class="si">{not}</span><span class="s2">there"</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">ValueError</span>: <span class="n">root element does not match: need {not}there, got {http://ns/}root</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.b[1]"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"root.{http://ns/}b[1]"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 </pre></div>
 <p>Apart from strings, ObjectPath also accepts lists of path segments:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">([</span><span class="s1">'root'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">])</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}c</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">([</span><span class="s1">'root'</span><span class="p">,</span> <span class="s1">'{http://ns/}b[1]'</span><span class="p">])</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 </pre></div>
 <p>You can also use relative paths starting with a '.' to ignore the actual root
 element and only inherit its namespace:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">".b[1]"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">([</span><span class="s1">''</span><span class="p">,</span> <span class="s1">'b[1]'</span><span class="p">])</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}b</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">".unknown[1]"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: {http://ns/}unknown</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">".{http://other/}unknown[1]"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: {http://other/}unknown</span>
 </pre></div>
 <p>For convenience, a single dot represents the empty ObjectPath (identity):</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">"."</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://ns/}root</span>
 </pre></div>
 <p>ObjectPath objects can be used to manipulate trees:</p>
@@ -508,15 +508,15 @@ element and only inherit its namespace:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">path</span><span class="o">.</span><span class="n">setattr</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"my value"</span><span class="p">)</span> <span class="c1"># creates children as necessary</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">path</span><span class="o">.</span><span class="n">hasattr</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">my value</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">some</span><span class="o">.</span><span class="n">child</span><span class="p">[</span><span class="s2">"{http://other/}unknown"</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">some</span><span class="o">.</span><span class="n">child</span><span class="p">[</span><span class="s2">"{http://other/}unknown"</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">my value</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span> <span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span> <span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="p">))</span>
 <span class="go">1</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">path</span><span class="o">.</span><span class="n">addattr</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"my new value"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span> <span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span> <span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="p">))</span>
 <span class="go">2</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">el</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">path</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">['my value', 'my new value']</span>
@@ -529,7 +529,7 @@ element and only inherit its namespace:</p>
 <p>Note, however, that indexing is only supported in this context if the children
 exist.  Indexing of non existing children will not extend or create a list of
 such children but raise an exception:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">path</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">".{non}existing[1]"</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">path</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectPath</span><span class="p">(</span><span class="s2">".</span><span class="si">{non}</span><span class="s2">existing[1]"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">path</span><span class="o">.</span><span class="n">setattr</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"my value"</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
   <span class="c">...</span>
@@ -549,26 +549,26 @@ operators:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="n">root</span><span class="o">.</span><span class="n">b</span>
 <span class="go">16</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+=</span> <span class="n">root</span><span class="o">.</span><span class="n">b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
 <span class="go">16</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="mi">2</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
 <span class="go">4</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="mi">1</span> <span class="o">+</span> <span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="mi">1</span> <span class="o">+</span> <span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
 <span class="go">3</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="bp">False</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="kc">False</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"false!"</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"false!"</span><span class="p">)</span>
 <span class="go">false!</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">d</span> <span class="o">+</span> <span class="s2">" test !"</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">d</span> <span class="o">+</span> <span class="s2">" test !"</span><span class="p">)</span>
 <span class="go">hoi test !</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">d</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">d</span> <span class="o">%</span> <span class="p">(</span><span class="mi">1234</span><span class="p">,</span> <span class="mi">12345</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">d</span> <span class="o">%</span> <span class="p">(</span><span class="mi">1234</span><span class="p">,</span> <span class="mi">12345</span><span class="p">))</span>
 <span class="go">1234 - 12345</span>
 </pre></div>
 <p>However, data elements continue to provide the objectify API.  This means that
@@ -576,16 +576,16 @@ sequence operations such as <tt class="docutils literal">len()</tt>, slicing and
 cannot behave as the Python types.  Like all other tree elements, they show
 the normal slicing behaviour of objectify elements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a&gt;test&lt;/a&gt;&lt;b&gt;toast&lt;/b&gt;&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="s1">' me'</span><span class="p">)</span> <span class="c1"># behaves like a string, right?</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="s1">' me'</span><span class="p">)</span> <span class="c1"># behaves like a string, right?</span>
 <span class="go">test me</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span> <span class="c1"># but there's only one 'a' element!</span>
 <span class="go">1</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">a</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="p">]</span>
 <span class="go">['a']</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">a</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
 <span class="go">test</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="p">]</span>
 <span class="go">['test']</span>
@@ -618,9 +618,9 @@ to change values, just assign them directly to the attribute:</p>
 <span class="gr">TypeError</span>: <span class="n">attribute 'pyval' of 'StringElement' objects is not writable</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="mi">25</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
 <span class="go">25</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">pyval</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">pyval</span><span class="p">)</span>
 <span class="go">25</span>
 </pre></div>
 <p>In other words, <tt class="docutils literal">objectify</tt> data elements behave like immutable Python
@@ -641,7 +641,7 @@ elements:</p>
 <span class="gp">... </span><span class="s2">&lt;/root&gt;</span>
 <span class="gp">... </span><span class="s2">"""</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 1 [IntElement]</span>
 <span class="go">      * attr1 = 'foo'</span>
@@ -655,24 +655,24 @@ elements:</p>
 </pre></div>
 <p>You can freely switch between different types for the same child:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a&gt;5&lt;/a&gt;&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 5 [IntElement]</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="s1">'nice string!'</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 'nice string!' [StringElement]</span>
 <span class="go">      * py:pytype = 'str'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="bp">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="kc">True</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = True [BoolElement]</span>
 <span class="go">      * py:pytype = 'bool'</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 1 [IntElement]</span>
 <span class="go">      * py:pytype = 'int'</span>
@@ -682,7 +682,7 @@ elements:</p>
 <span class="go">      * py:pytype = 'int'</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 1 [IntElement]</span>
 <span class="go">      * py:pytype = 'int'</span>
@@ -710,7 +710,7 @@ objectify elements like this:</p>
 <span class="gp">... </span><span class="s2">&lt;/root&gt;</span>
 <span class="gp">... </span><span class="s2">"""</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 1 [IntElement]</span>
 <span class="go">      * attr1 = 'foo'</span>
@@ -723,7 +723,7 @@ objectify elements like this:</p>
 <span class="go">      * xsi:nil = 'true'</span>
 </pre></div>
 <p>This behaviour can be switched off in the same way:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">enable_recursive_str</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">enable_recursive_str</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
 </pre></div>
 </div>
 </div>
@@ -759,7 +759,7 @@ classes used in these cases.  By default, <tt class="docutils literal">tree_clas
 <p>The "type hint" mechanism deploys an XML attribute defined as
 <tt class="docutils literal">lxml.objectify.PYTYPE_ATTRIBUTE</tt>.  It may contain any of the following
 string values: int, long, float, str, unicode, NoneType:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">PYTYPE_ATTRIBUTE</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">PYTYPE_ATTRIBUTE</span><span class="p">)</span>
 <span class="go">{http://codespeak.net/lxml/objectify/pytype}pytype</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">ns</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">PYTYPE_ATTRIBUTE</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'}'</span><span class="p">)</span>
 
@@ -771,11 +771,11 @@ string values: int, long, float, str, unicode, NoneType:</p>
 <span class="gp">... </span><span class="s2">&lt;/root&gt;</span>
 <span class="gp">... </span><span class="s2">"""</span> <span class="o">%</span> <span class="n">ns</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="mi">10</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span> <span class="o">+</span> <span class="mi">10</span><span class="p">)</span>
 <span class="go">510</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span> <span class="o">+</span> <span class="mi">10</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">b</span> <span class="o">+</span> <span class="mi">10</span><span class="p">)</span>
 <span class="go">15</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
 <span class="go">None</span>
 </pre></div>
 <p>Note that you can change the name and namespace used for this
@@ -784,14 +784,14 @@ function, in case your application ever needs to.  There is also a
 utility function <tt class="docutils literal">annotate()</tt> that recursively generates this
 attribute for the elements of a tree:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a&gt;test&lt;/a&gt;&lt;b&gt;5&lt;/b&gt;&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 'test' [StringElement]</span>
 <span class="go">    b = 5 [IntElement]</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 'test' [StringElement]</span>
 <span class="go">      * py:pytype = 'str'</span>
@@ -812,7 +812,7 @@ Python types:</p>
 <span class="gp">... </span><span class="s1">     &lt;s xsi:type="xsd:string"&gt;5&lt;/s&gt;</span>
 <span class="gp">... </span><span class="s1">   &lt;/root&gt;</span>
 <span class="gp">... </span><span class="s1">   '''</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    d = 5.0 [FloatElement]</span>
 <span class="go">      * xsi:type = 'xsd:double'</span>
@@ -826,7 +826,7 @@ generates the "xsi:type" attribute for the elements of a tree:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span>
 <span class="gp">... </span><span class="s1">   &lt;root&gt;&lt;a&gt;test&lt;/a&gt;&lt;b&gt;5&lt;/b&gt;&lt;c&gt;true&lt;/c&gt;&lt;/root&gt;</span>
 <span class="gp">... </span><span class="s1">   '''</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 'test' [StringElement]</span>
 <span class="go">    b = 5 [IntElement]</span>
@@ -834,7 +834,7 @@ generates the "xsi:type" attribute for the elements of a tree:</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">xsiannotate</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    a = 'test' [StringElement]</span>
 <span class="go">      * xsi:type = 'xsd:string'</span>
@@ -856,7 +856,7 @@ and/or 'xsi:type' information:</p>
 <span class="gp">... </span><span class="s1">  &lt;s xsi:type="xsd:string"&gt;5&lt;/s&gt;</span>
 <span class="gp">... </span><span class="s1">&lt;/root&gt;'''</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    d = 5.0 [FloatElement]</span>
 <span class="go">      * py:pytype = 'float'</span>
@@ -868,7 +868,7 @@ and/or 'xsi:type' information:</p>
 <span class="go">      * py:pytype = 'str'</span>
 <span class="go">      * xsi:type = 'xsd:string'</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">deannotate</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    d = 5 [IntElement]</span>
 <span class="go">    i = 5 [IntElement]</span>
@@ -887,7 +887,7 @@ arguments 'pytype' (default: True) and 'xsi' (default: True).
 <span class="gp">... </span><span class="s1">  &lt;n xsi:nil="true"/&gt;</span>
 <span class="gp">... </span><span class="s1">&lt;/root&gt;'''</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    d = 5.0 [FloatElement]</span>
 <span class="go">      * py:pytype = 'float'</span>
@@ -901,8 +901,8 @@ arguments 'pytype' (default: True) and 'xsi' (default: True).
 <span class="go">    n = None [NoneElement]</span>
 <span class="go">      * py:pytype = 'NoneType'</span>
 <span class="go">      * xsi:nil = 'true'</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">deannotate</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xsi_nil</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">deannotate</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xsi_nil</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    d = 5 [IntElement]</span>
 <span class="go">    i = 5 [IntElement]</span>
@@ -924,20 +924,20 @@ Python value in one step.  You can pass the required Python type name or the
 XSI type name:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">DataElement</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">_pytype</span><span class="o">=</span><span class="s2">"int"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    x = 5 [IntElement]</span>
 <span class="go">      * py:pytype = 'int'</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">DataElement</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">_pytype</span><span class="o">=</span><span class="s2">"str"</span><span class="p">,</span> <span class="n">myattr</span><span class="o">=</span><span class="s2">"someval"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    x = '5' [StringElement]</span>
 <span class="go">      * myattr = 'someval'</span>
 <span class="go">      * py:pytype = 'str'</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">DataElement</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">_xsi</span><span class="o">=</span><span class="s2">"integer"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">root = None [ObjectifiedElement]</span>
 <span class="go">    x = 5 [IntElement]</span>
 <span class="go">      * py:pytype = 'int'</span>
@@ -948,8 +948,8 @@ tries to correctly prefix the xsi:type attribute value for you:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">s</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">DataElement</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">_xsi</span><span class="o">=</span><span class="s2">"string"</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">deannotate</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xsi</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">deannotate</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xsi</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns:py="http://codespeak.net/lxml/objectify/pytype" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;</span>
 <span class="go">  &lt;s xsi:type="xsd:string"&gt;5&lt;/s&gt;</span>
 <span class="go">&lt;/root&gt;</span>
@@ -959,12 +959,12 @@ tries to correctly prefix the xsi:type attribute value for you:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">nsmap</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span> <span class="ow">in</span> <span class="n">namespaces</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span><span class="p">))</span>
 <span class="go">py - http://codespeak.net/lxml/objectify/pytype</span>
 <span class="go">xsd - http://www.w3.org/2001/XMLSchema</span>
 <span class="go">xsi - http://www.w3.org/2001/XMLSchema-instance</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"{http://www.w3.org/2001/XMLSchema-instance}type"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"{http://www.w3.org/2001/XMLSchema-instance}type"</span><span class="p">))</span>
 <span class="go">xsd:string</span>
 </pre></div>
 <p>While you can set custom namespace prefixes, it is necessary to provide valid
@@ -974,12 +974,12 @@ namespace information if you choose to do so:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">nsmap</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span> <span class="ow">in</span> <span class="n">namespaces</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span><span class="p">))</span>
 <span class="go">foo - http://www.w3.org/2001/XMLSchema</span>
 <span class="go">py - http://codespeak.net/lxml/objectify/pytype</span>
 <span class="go">xsi - http://www.w3.org/2001/XMLSchema-instance</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"{http://www.w3.org/2001/XMLSchema-instance}type"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"{http://www.w3.org/2001/XMLSchema-instance}type"</span><span class="p">))</span>
 <span class="go">foo:string</span>
 </pre></div>
 <p>Note how lxml chose a default prefix for the XML Schema Instance
@@ -990,12 +990,12 @@ namespace.  We can override it as in the following example:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">nsmap</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">namespaces</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span> <span class="ow">in</span> <span class="n">namespaces</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">namespace</span><span class="p">))</span>
 <span class="go">foo - http://www.w3.org/2001/XMLSchema</span>
 <span class="go">myxsi - http://www.w3.org/2001/XMLSchema-instance</span>
 <span class="go">py - http://codespeak.net/lxml/objectify/pytype</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"{http://www.w3.org/2001/XMLSchema-instance}type"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"{http://www.w3.org/2001/XMLSchema-instance}type"</span><span class="p">))</span>
 <span class="go">foo:string</span>
 </pre></div>
 <p>Care must be taken if different namespace prefixes have been used for the same
@@ -1003,15 +1003,15 @@ namespace.  Namespace information gets merged to avoid duplicate definitions
 when adding a new sub-element to a tree, but this mechanism does not adapt the
 prefixes of attribute values:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s2">"""&lt;root xmlns:schema="http://www.w3.org/2001/XMLSchema"/&gt;"""</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns:schema="http://www.w3.org/2001/XMLSchema"/&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">DataElement</span><span class="p">(</span><span class="s2">"17"</span><span class="p">,</span> <span class="n">_xsi</span><span class="o">=</span><span class="s2">"string"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;value xmlns:py="http://codespeak.net/lxml/objectify/pytype" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="str" xsi:type="xsd:string"&gt;17&lt;/value&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">s</span> <span class="o">=</span> <span class="n">s</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns:schema="http://www.w3.org/2001/XMLSchema"&gt;</span>
 <span class="go">  &lt;s xmlns:py="http://codespeak.net/lxml/objectify/pytype" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="str" xsi:type="xsd:string"&gt;17&lt;/s&gt;</span>
 <span class="go">&lt;/root&gt;</span>
@@ -1020,7 +1020,7 @@ prefixes of attribute values:</p>
 choose to deviate from the standard prefixes.  A convenient way to do this for
 xsi:type attributes is to use the <tt class="docutils literal">xsiannotate()</tt> utility:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">objectify</span><span class="o">.</span><span class="n">xsiannotate</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root xmlns:schema="http://www.w3.org/2001/XMLSchema"&gt;</span>
 <span class="go">  &lt;s xmlns:py="http://codespeak.net/lxml/objectify/pytype" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="str" xsi:type="schema:string"&gt;17&lt;/s&gt;</span>
 <span class="go">&lt;/root&gt;</span>
@@ -1040,7 +1040,7 @@ call should be placed into the element <tt class="docutils literal">_init()</tt>
 <p>The registration of data classes uses the <tt class="docutils literal">PyType</tt> class:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">ChristmasDate</span><span class="p">(</span><span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifiedDataElement</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">call_santa</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"Ho ho ho!"</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"Ho ho ho!"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">checkChristmasDate</span><span class="p">(</span><span class="n">date_string</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">if</span> <span class="ow">not</span> <span class="n">date_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'24.12.'</span><span class="p">):</span>
@@ -1088,7 +1088,7 @@ function defined above:</p>
 <span class="gp">... </span><span class="s1">     &lt;a xsi:type="date"&gt;12.24.2000&lt;/a&gt;</span>
 <span class="gp">... </span><span class="s1">   &lt;/root&gt;</span>
 <span class="gp">... </span><span class="s1">   '''</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="p">)</span>
 <span class="go">12.24.2000</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">call_santa</span><span class="p">()</span>
 <span class="go">Ho ho ho!</span>
@@ -1122,10 +1122,10 @@ this alters the document infoset, so if you consider the removed
 spaces as data in your specific use case, you should go with a normal
 parser and just set the element class lookup.  Most applications,
 however, will work fine with the following setup:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">makeparser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">makeparser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 </pre></div>
 <p>What this does internally, is:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">lookup</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">ObjectifyElementClassLookup</span><span class="p">()</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">set_element_class_lookup</span><span class="p">(</span><span class="n">lookup</span><span class="p">)</span>
@@ -1165,7 +1165,7 @@ support any XPath expression.</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index b4600bb26580b8e9110f29b382d62bae6dab5141..8d49b2e303d335c7605443f90a14f9b04d98eb99 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Parsing XML and HTML with lxml</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="parsing-xml-and-html-with-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu current" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Parsing XML and HTML with lxml</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu current" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Parsing XML and HTML with lxml</h1>
 
 <p>lxml provides a very simple and powerful API for parsing XML and HTML.  It
 supports one-step parsing as well as step-by-step parsing using an
@@ -100,7 +100,7 @@ keyword argument:</p>
 <h2>Parser options</h2>
 <p>The parsers accept a number of setup options as keyword arguments.  The above
 example is easily extended to clean up namespaces during parsing:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">ns_clean</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">ns_clean</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span>   <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">xml</span><span class="p">),</span> <span class="n">parser</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">())</span>
 <span class="go">b'&lt;a xmlns="test"&gt;&lt;b/&gt;&lt;/a&gt;'</span>
@@ -147,7 +147,7 @@ different IDs if the hash lookup is not used afterwards.</li>
 <p>Parsers have an <tt class="docutils literal">error_log</tt> property that lists the errors and
 warnings of the last parser run:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">error_log</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">error_log</span><span class="p">))</span>
 <span class="go">0</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;</span><span class="se">\n</span><span class="s2">&lt;/b&gt;"</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>  <span class="c1"># doctest: +ELLIPSIS</span>
@@ -155,15 +155,15 @@ warnings of the last parser run:</p>
   <span class="c">...</span>
 <span class="gr">lxml.etree.XMLSyntaxError</span>: <span class="n">Opening and ending tag mismatch: root line 1 and b, line 2, column 5...</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">error_log</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">error_log</span><span class="p">))</span>
 <span class="go">1</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">error</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">error_log</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
 <span class="go">Opening and ending tag mismatch: root line 1 and b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">line</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">line</span><span class="p">)</span>
 <span class="go">2</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">column</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">column</span><span class="p">)</span>
 <span class="go">5</span>
 </pre></div>
 <p>Each entry in the log has the following properties:</p>
@@ -201,8 +201,8 @@ this feature.</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span>   <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">broken_html</span><span class="p">),</span> <span class="n">parser</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">(),</span>
-<span class="gp">... </span>                        <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">"html"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+<span class="gp">... </span>                        <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">"html"</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;head&gt;</span>
 <span class="go">    &lt;title&gt;test&lt;/title&gt;</span>
@@ -215,8 +215,8 @@ this feature.</p>
 <p>Lxml has an HTML function, similar to the XML shortcut known from
 ElementTree:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">html</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">HTML</span><span class="p">(</span><span class="n">broken_html</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">"html"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">"html"</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;head&gt;</span>
 <span class="go">    &lt;title&gt;test&lt;/title&gt;</span>
@@ -256,21 +256,21 @@ original encoding.  Since lxml 3.5, the doctype references are mutable.</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">xhtml</span><span class="p">))</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">docinfo</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">public_id</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">public_id</span><span class="p">)</span>
 <span class="go">-//W3C//DTD XHTML 1.0 Transitional//EN</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">system_url</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">system_url</span><span class="p">)</span>
 <span class="go">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">docinfo</span><span class="o">.</span><span class="n">doctype</span> <span class="o">==</span> <span class="n">doctype_string</span>
 <span class="go">True</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">xml_version</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">xml_version</span><span class="p">)</span>
 <span class="go">1.0</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">encoding</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">docinfo</span><span class="o">.</span><span class="n">encoding</span><span class="p">)</span>
 <span class="go">ascii</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">docinfo</span><span class="o">.</span><span class="n">system_url</span> <span class="o">=</span> <span class="bp">None</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">docinfo</span><span class="o">.</span><span class="n">public_id</span> <span class="o">=</span> <span class="bp">None</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">docinfo</span><span class="o">.</span><span class="n">system_url</span> <span class="o">=</span> <span class="kc">None</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">docinfo</span><span class="o">.</span><span class="n">public_id</span> <span class="o">=</span> <span class="kc">None</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">))</span>
 <span class="go">&lt;!DOCTYPE html&gt;</span>
 <span class="go">&lt;html&gt;&lt;body/&gt;&lt;/html&gt;</span>
 </pre></div>
@@ -282,15 +282,15 @@ original encoding.  Since lxml 3.5, the doctype references are mutable.</p>
 a target object to the parser:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">EchoTarget</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">attrib</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"start </span><span class="si">%s</span><span class="s2"> </span><span class="si">%r</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="nb">dict</span><span class="p">(</span><span class="n">attrib</span><span class="p">)))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"start </span><span class="si">%s</span><span class="s2"> </span><span class="si">%r</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="nb">dict</span><span class="p">(</span><span class="n">attrib</span><span class="p">)))</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"end </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"end </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"data </span><span class="si">%r</span><span class="s2">"</span> <span class="o">%</span> <span class="n">data</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"data </span><span class="si">%r</span><span class="s2">"</span> <span class="o">%</span> <span class="n">data</span><span class="p">)</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"comment </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">text</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"comment </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">text</span><span class="p">)</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"close"</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"close"</span><span class="p">)</span>
 <span class="gp">... </span>        <span class="k">return</span> <span class="s2">"closed!"</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">target</span> <span class="o">=</span> <span class="n">EchoTarget</span><span class="p">())</span>
@@ -304,7 +304,7 @@ a target object to the parser:</p>
 <span class="go">end element</span>
 <span class="go">close</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="go">closed!</span>
 </pre></div>
 <p>It is important for the <tt class="docutils literal">.close()</tt> method to reset the parser target
@@ -319,7 +319,7 @@ like:</p>
 <span class="go">end element</span>
 <span class="go">close</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="go">closed!</span>
 </pre></div>
 <p>Starting with lxml 2.3, the <tt class="docutils literal">.close()</tt> method will also be called in
@@ -350,7 +350,7 @@ that the parser can reuse them afterwards.</p>
 <span class="gr">lxml.etree.XMLSyntaxError</span>: <span class="n">Opening and ending tag mismatch...</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">events</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
 <span class="go">start element {}</span>
 <span class="go">data u'some'</span>
 <span class="go">close</span>
@@ -366,9 +366,9 @@ object.  An example for a parser target that builds a tree is the
 <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;element&gt;some&lt;!--comment--&gt;text&lt;/element&gt;"</span><span class="p">,</span>
 <span class="gp">... </span>                   <span class="n">parser</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">element</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">comment</span>
 </pre></div>
 </div>
@@ -393,9 +393,9 @@ retrieve the root Element of the parse result document, and to unlock the
 parser:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">a</span>
 </pre></div>
 <p>If you do not call <tt class="docutils literal">close()</tt>, the parser will stay locked and
@@ -422,7 +422,7 @@ normal <tt class="docutils literal">error_log</tt> and vice versa.</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
 <span class="go">close</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="go">closed!</span>
 </pre></div>
 <p>Again, this prevents the automatic creation of an XML tree and leaves
@@ -444,7 +444,7 @@ processed as far as possible in each step.</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">print_events</span><span class="p">(</span><span class="n">parser</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;root&gt;some text'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">print_events</span><span class="p">(</span><span class="n">parser</span><span class="p">)</span>
@@ -498,11 +498,11 @@ stack and pop the last entry on the 'end-ns' event.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">print_events</span><span class="p">(</span><span class="n">events</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
 <span class="gp">... </span>        <span class="k">if</span> <span class="n">action</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'start'</span><span class="p">,</span> <span class="s1">'end'</span><span class="p">):</span>
-<span class="gp">... </span>            <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>            <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="gp">... </span>        <span class="k">elif</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'start-ns'</span><span class="p">:</span>
-<span class="gp">... </span>            <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span>
+<span class="gp">... </span>            <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span>
 <span class="gp">... </span>        <span class="k">else</span><span class="p">:</span>
-<span class="gp">... </span>            <span class="k">print</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
+<span class="gp">... </span>            <span class="nb">print</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">event_types</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">,</span> <span class="s2">"start-ns"</span><span class="p">,</span> <span class="s2">"end-ns"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLPullParser</span><span class="p">(</span><span class="n">event_types</span><span class="p">)</span>
@@ -539,15 +539,15 @@ that are no longer needed:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;root&gt;&lt;element key="value"&gt;text&lt;/element&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;element&gt;&lt;child /&gt;&lt;/element&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">elem</span><span class="p">)))</span>  <span class="c1"># processing</span>
-<span class="gp">... </span>    <span class="n">elem</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>               <span class="c1"># delete children</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">elem</span><span class="p">)))</span>  <span class="c1"># processing</span>
+<span class="gp">... </span>    <span class="n">elem</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>               <span class="c1"># delete children</span>
 <span class="go">element: 0</span>
 <span class="go">child: 0</span>
 <span class="go">element: 1</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;empty-element xmlns="http://testns/" /&gt;&lt;/root&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">elem</span><span class="p">)))</span>  <span class="c1"># processing</span>
-<span class="gp">... </span>    <span class="n">elem</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>               <span class="c1"># delete children</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">elem</span><span class="p">)))</span>  <span class="c1"># processing</span>
+<span class="gp">... </span>    <span class="n">elem</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>               <span class="c1"># delete children</span>
 <span class="go">{http://testns/}empty-element: 0</span>
 <span class="go">root: 3</span>
 
@@ -570,8 +570,8 @@ to save more memory during parsing, you can clean up the preceding siblings
 of the current element:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
 <span class="gp">... </span>    <span class="c1"># ... do something with the element</span>
-<span class="gp">... </span>    <span class="n">element</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>   <span class="c1"># clean up children</span>
-<span class="gp">... </span>    <span class="k">while</span> <span class="n">element</span><span class="o">.</span><span class="n">getprevious</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+<span class="gp">... </span>    <span class="n">element</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>   <span class="c1"># clean up children</span>
+<span class="gp">... </span>    <span class="k">while</span> <span class="n">element</span><span class="o">.</span><span class="n">getprevious</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
 <span class="gp">... </span>        <span class="k">del</span> <span class="n">element</span><span class="o">.</span><span class="n">getparent</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>  <span class="c1"># clean up preceding siblings</span>
 </pre></div>
 <p>The <tt class="docutils literal">while</tt> loop deletes multiple siblings in a row.  This is only necessary
@@ -594,7 +594,7 @@ specific tag or namespace:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;empty-element xmlns="http://testns/" /&gt;&lt;/root&gt;'</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">end: element</span>
 <span class="go">end: element</span>
 
@@ -606,7 +606,7 @@ specific tag or namespace:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;empty-element xmlns="http://testns/" /&gt;&lt;/root&gt;'</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">start: {http://testns/}empty-element</span>
 <span class="go">end: {http://testns/}empty-element</span>
 </pre></div>
@@ -628,11 +628,11 @@ XML structures.</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
 <span class="gp">... </span>    <span class="k">if</span> <span class="n">action</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'start'</span><span class="p">,</span> <span class="s1">'end'</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="gp">... </span>    <span class="k">elif</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'pi'</span><span class="p">:</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: -</span><span class="si">%s</span><span class="s2">=</span><span class="si">%s</span><span class="s2">-"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: -</span><span class="si">%s</span><span class="s2">=</span><span class="si">%s</span><span class="s2">-"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="gp">... </span>    <span class="k">else</span><span class="p">:</span> <span class="c1"># 'comment'</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: -</span><span class="si">%s</span><span class="s2">-"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: -</span><span class="si">%s</span><span class="s2">-"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">pi: -some=pi -</span>
 <span class="go">comment: - a comment -</span>
 <span class="go">start: root</span>
@@ -646,7 +646,7 @@ XML structures.</p>
 <span class="go">end: root</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 </pre></div>
 </div>
@@ -658,13 +658,13 @@ it returns from its <tt class="docutils literal">.start()</tt> and <tt class="do
 by the pull parser as the second item of the parse events tuple.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Target</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">,</span> <span class="n">attrib</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s1">'-&gt; start(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s1">'-&gt; start(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
 <span class="gp">... </span>        <span class="k">return</span> <span class="s1">'&gt;&gt;START: </span><span class="si">%s</span><span class="s1">&lt;&lt;'</span> <span class="o">%</span> <span class="n">tag</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s1">'-&gt; end(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s1">'-&gt; end(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
 <span class="gp">... </span>        <span class="k">return</span> <span class="s1">'&gt;&gt;END: </span><span class="si">%s</span><span class="s1">&lt;&lt;'</span> <span class="o">%</span> <span class="n">tag</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s1">'-&gt; close()'</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s1">'-&gt; close()'</span><span class="p">)</span>
 <span class="gp">... </span>        <span class="k">return</span> <span class="s2">"CLOSED!"</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">event_types</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'start'</span><span class="p">,</span> <span class="s1">'end'</span><span class="p">)</span>
@@ -679,7 +679,7 @@ by the pull parser as the second item of the parse events tuple.</p>
 <span class="go">-&gt; end(root)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
 <span class="go">start: &gt;&gt;START: root&lt;&lt;</span>
 <span class="go">start: &gt;&gt;START: child1&lt;&lt;</span>
 <span class="go">end: &gt;&gt;END: child1&lt;&lt;</span>
@@ -687,7 +687,7 @@ by the pull parser as the second item of the parse events tuple.</p>
 <span class="go">end: &gt;&gt;END: child2&lt;&lt;</span>
 <span class="go">end: &gt;&gt;END: root&lt;&lt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">close</span><span class="p">())</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">close</span><span class="p">())</span>
 <span class="go">-&gt; close()</span>
 <span class="go">CLOSED!</span>
 </pre></div>
@@ -711,7 +711,7 @@ filters attributes before they are being added to the tree:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span><span class="s1">'&lt;root&gt;&lt;child1 test="123" /&gt;&lt;child2 evil="YES" /&gt;&lt;/root&gt;'</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">parser</span><span class="o">.</span><span class="n">read_events</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">(</span><span class="si">%r</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">attrib</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">(</span><span class="si">%r</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">attrib</span><span class="p">))</span>
 <span class="go">end: child1({'test': '123'})</span>
 <span class="go">end: child2({})</span>
 <span class="go">end: root({})</span>
@@ -738,7 +738,7 @@ single iterator for them:</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">context</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterparse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">xml</span><span class="p">))</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">end: element</span>
 <span class="go">end: element</span>
 <span class="go">end: {http://testns/}empty-element</span>
@@ -753,7 +753,7 @@ of the iterator:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">events</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">context</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterparse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">xml</span><span class="p">),</span> <span class="n">events</span><span class="o">=</span><span class="n">events</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">start: root</span>
 <span class="go">start: element</span>
 <span class="go">end: element</span>
@@ -777,7 +777,7 @@ ElementTrees.  Here is an example for a tree parsed by <tt class="docutils liter
 <span class="gp">... </span>            <span class="n">f</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">),</span> <span class="n">tag</span><span class="o">=</span><span class="s2">"element"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">start: element</span>
 <span class="go">end: element</span>
 <span class="go">start: element</span>
@@ -792,7 +792,7 @@ input again:</p>
 <span class="gp">... </span>            <span class="n">root</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">),</span> <span class="n">tag</span><span class="o">=</span><span class="s2">"element"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="go">start: element</span>
 <span class="go">end: element</span>
 <span class="go">start: element</span>
@@ -811,7 +811,7 @@ iterator can be instructed to skip over an entire subtree with its
 <span class="gp">&gt;&gt;&gt; </span><span class="n">context</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterwalk</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">))</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span><span class="p">))</span>
 <span class="gp">... </span>    <span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'start'</span> <span class="ow">and</span> <span class="n">elem</span><span class="o">.</span><span class="n">tag</span> <span class="o">==</span> <span class="s1">'a'</span><span class="p">:</span>
 <span class="gp">... </span>        <span class="n">context</span><span class="o">.</span><span class="n">skip_subtree</span><span class="p">()</span>  <span class="c1"># ignore &lt;b&gt;</span>
 <span class="go">start: root</span>
@@ -854,7 +854,7 @@ number of other byte encodings if asked for:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;test&gt; &amp;#63697; + &amp;#63698; &lt;/test&gt;'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'UTF-8'</span><span class="p">,</span> <span class="n">xml_declaration</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'UTF-8'</span><span class="p">,</span> <span class="n">xml_declaration</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 <span class="go">b'&lt;test&gt; \xef\xa3\x91 + \xef\xa3\x92 &lt;/test&gt;'</span>
 </pre></div>
 <p>As an extension, lxml.etree recognises the name 'unicode' as an argument
@@ -893,7 +893,7 @@ with UTF-8 is also considerably faster in most cases.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 28f5456461a25148f3b745d939a437e74af4f4ad..5b66f92f762e710cdf71dc00686da448906a05fd 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Benchmarks and Speed</title>
 <meta name="author" content="Stefan Behnel" />
 <meta content="Performance evaluation of lxml and ElementTree: fast operations, common pitfalls and optimisation hints." name="description" />
@@ -27,7 +27,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="benchmarks-and-speed">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu current" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Benchmarks and Speed</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu current" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Benchmarks and Speed</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -109,18 +109,11 @@ benchmarking suite for all ElementTree implementations.  New benchmarks are
 very easy to add as tiny test methods, so if you write a performance test for
 a specific part of the API yourself, please consider sending it to the lxml
 mailing list.</p>
-<p>The timings presented below compare lxml 3.1.1 (with libxml2 2.9.0) to the
+<p>The timings presented below compare lxml 4.6.3 (with libxml2 2.9.10) to the
 latest released versions of ElementTree (with cElementTree as accelerator
-module) in the standard library of CPython 3.3.0.  They were run
-single-threaded on a 2.9GHz 64bit double core Intel i7 machine under
-Ubuntu Linux 12.10 (Quantal).  The C libraries were compiled with the
-same platform specific optimisation flags.  The Python interpreter was
-also manually compiled for the platform.  Note that many of the following
-ElementTree timings are therefore better than what a normal Python
-installation with the standard library (c)ElementTree modules would yield.
-Note also that CPython 2.7 and 3.2+ come with a newer ElementTree version,
-so older Python installations will not perform as good for (c)ElementTree,
-and sometimes substantially worse.</p>
+module) in the standard library of CPython 3.8.10.  They were run
+single-threaded on a 2.3GHz 64bit double core Intel i5 machine under
+Ubuntu Linux 20.04 (Focal).</p>
 <p>The scripts run a number of simple tests on the different libraries, using
 different XML tree configurations: different tree sizes (T1-4), with or
 without attributes (-/A), with or without ASCII string or unicode text
@@ -153,50 +146,50 @@ is native to libxml2.  While 20 to 40 times faster than (c)ElementTree
 lxml is still more than 10 times as fast as the much improved
 ElementTree 1.3 in recent Python versions:</p>
 <pre class="literal-block">
-lxe: tostring_utf16  (S-TR T1)    7.9958 msec/pass
-cET: tostring_utf16  (S-TR T1)   83.1358 msec/pass
+lxe: tostring_utf16  (S-TR T1)    5.9340 msec/pass
+cET: tostring_utf16  (S-TR T1)   38.3270 msec/pass
 
-lxe: tostring_utf16  (UATR T1)    8.3222 msec/pass
-cET: tostring_utf16  (UATR T1)   84.4688 msec/pass
+lxe: tostring_utf16  (UATR T1)    6.2032 msec/pass
+cET: tostring_utf16  (UATR T1)   37.7944 msec/pass
 
-lxe: tostring_utf16  (S-TR T2)    8.2297 msec/pass
-cET: tostring_utf16  (S-TR T2)   87.3415 msec/pass
+lxe: tostring_utf16  (S-TR T2)    6.1841 msec/pass
+cET: tostring_utf16  (S-TR T2)   40.2577 msec/pass
 
-lxe: tostring_utf8   (S-TR T2)    6.5677 msec/pass
-cET: tostring_utf8   (S-TR T2)   76.2064 msec/pass
+lxe: tostring_utf8   (S-TR T2)    4.6697 msec/pass
+cET: tostring_utf8   (S-TR T2)   30.5173 msec/pass
 
-lxe: tostring_utf8   (U-TR T3)    1.1952 msec/pass
-cET: tostring_utf8   (U-TR T3)   22.0058 msec/pass
+lxe: tostring_utf8   (U-TR T3)    1.2085 msec/pass
+cET: tostring_utf8   (U-TR T3)   9.0246 msec/pass
 </pre>
 <p>The difference is somewhat smaller for plain text serialisation:</p>
 <pre class="literal-block">
-lxe: tostring_text_ascii     (S-TR T1)    2.7738 msec/pass
-cET: tostring_text_ascii     (S-TR T1)    4.7629 msec/pass
+lxe: tostring_text_ascii     (S-TR T1)    2.6727 msec/pass
+cET: tostring_text_ascii     (S-TR T1)    2.9683 msec/pass
 
-lxe: tostring_text_ascii     (S-TR T3)    0.8273 msec/pass
-cET: tostring_text_ascii     (S-TR T3)    1.5273 msec/pass
+lxe: tostring_text_ascii     (S-TR T3)    0.6952 msec/pass
+cET: tostring_text_ascii     (S-TR T3)    1.0073 msec/pass
 
-lxe: tostring_text_utf16     (S-TR T1)    2.7659 msec/pass
-cET: tostring_text_utf16     (S-TR T1)   10.5038 msec/pass
+lxe: tostring_text_utf16     (S-TR T1)    2.7366 msec/pass
+cET: tostring_text_utf16     (S-TR T1)   7.3647 msec/pass
 
-lxe: tostring_text_utf16     (U-TR T1)    2.8017 msec/pass
-cET: tostring_text_utf16     (U-TR T1)   10.5207 msec/pass
+lxe: tostring_text_utf16     (U-TR T1)    3.0322 msec/pass
+cET: tostring_text_utf16     (U-TR T1)   7.5922 msec/pass
 </pre>
 <p>The <tt class="docutils literal">tostring()</tt> function also supports serialisation to a Python
 unicode string object, which is currently faster in ElementTree
-under CPython 3.3:</p>
+under CPython 3.8:</p>
 <pre class="literal-block">
-lxe: tostring_text_unicode   (S-TR T1)    2.6896 msec/pass
-cET: tostring_text_unicode   (S-TR T1)    1.0056 msec/pass
+lxe: tostring_text_unicode   (S-TR T1)    2.7645 msec/pass
+cET: tostring_text_unicode   (S-TR T1)    1.1806 msec/pass
 
-lxe: tostring_text_unicode   (U-TR T1)    2.7366 msec/pass
-cET: tostring_text_unicode   (U-TR T1)    1.0154 msec/pass
+lxe: tostring_text_unicode   (U-TR T1)    2.9871 msec/pass
+cET: tostring_text_unicode   (U-TR T1)    1.1659 msec/pass
 
-lxe: tostring_text_unicode   (S-TR T3)    0.7997 msec/pass
-cET: tostring_text_unicode   (S-TR T3)    0.3154 msec/pass
+lxe: tostring_text_unicode   (S-TR T3)    0.7446 msec/pass
+cET: tostring_text_unicode   (S-TR T3)    0.4532 msec/pass
 
 lxe: tostring_text_unicode   (U-TR T4)    0.0048 msec/pass
-cET: tostring_text_unicode   (U-TR T4)    0.0160 msec/pass
+cET: tostring_text_unicode   (U-TR T4)    0.0134 msec/pass
 </pre>
 <p>For parsing, lxml.etree and cElementTree compete for the medal.
 Depending on the input, either of the two can be faster.  The (c)ET
@@ -204,80 +197,79 @@ libraries use a very thin layer on top of the expat parser, which is
 known to be very fast.  Here are some timings from the benchmarking
 suite:</p>
 <pre class="literal-block">
-lxe: parse_bytesIO   (SAXR T1)   13.0246 msec/pass
-cET: parse_bytesIO   (SAXR T1)    8.2929 msec/pass
+lxe: parse_bytesIO   (SAXR T1)   14.2074 msec/pass
+cET: parse_bytesIO   (SAXR T1)    7.9336 msec/pass
 
-lxe: parse_bytesIO   (S-XR T3)    1.3542 msec/pass
-cET: parse_bytesIO   (S-XR T3)    2.4023 msec/pass
+lxe: parse_bytesIO   (S-XR T3)    1.4477 msec/pass
+cET: parse_bytesIO   (S-XR T3)    2.1925 msec/pass
 
-lxe: parse_bytesIO   (UAXR T3)    7.5610 msec/pass
-cET: parse_bytesIO   (UAXR T3)   11.2455 msec/pass
+lxe: parse_bytesIO   (UAXR T3)    8.4128 msec/pass
+cET: parse_bytesIO   (UAXR T3)   12.2926 msec/pass
 </pre>
 <p>And another couple of timings <a class="reference external" href="http://svn.effbot.org/public/elementtree-1.3/benchmark.py">from a benchmark</a> that Fredrik Lundh
 <a class="reference external" href="http://effbot.org/zone/celementtree.htm#benchmarks">used to promote cElementTree</a>, comparing a number of different
 parsers.  First, parsing a 274KB XML file containing Shakespeare's
 Hamlet:</p>
 <pre class="literal-block">
-xml.etree.ElementTree.parse done in 0.017 seconds
+xml.etree.ElementTree.parse done in 0.006 seconds
 xml.etree.cElementTree.parse done in 0.007 seconds
-xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.007 seconds
-lxml.etree.parse done in 0.003 seconds
-drop_whitespace.parse done in 0.003 seconds
+xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.006 seconds
+lxml.etree.parse done in 0.004 seconds
+drop_whitespace.parse done in 0.004 seconds
 lxml.etree.XMLParser.feed(): 6636 nodes read in 0.004 seconds
-minidom tree read in 0.080 seconds
+minidom tree read in 0.066 seconds
 </pre>
 <p>And a 3.4MB XML file containing the Old Testament:</p>
 <pre class="literal-block">
-xml.etree.ElementTree.parse done in 0.038 seconds
-xml.etree.cElementTree.parse done in 0.030 seconds
-xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.030 seconds
-lxml.etree.parse done in 0.016 seconds
-drop_whitespace.parse done in 0.015 seconds
-lxml.etree.XMLParser.feed(): 25317 nodes read in 0.022 seconds
-minidom tree read in 0.288 seconds
+xml.etree.ElementTree.parse done in 0.037 seconds
+xml.etree.cElementTree.parse done in 0.036 seconds
+xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.036 seconds
+lxml.etree.parse done in 0.025 seconds
+drop_whitespace.parse done in 0.022 seconds
+lxml.etree.XMLParser.feed(): 25317 nodes read in 0.026 seconds
+minidom tree read in 0.194 seconds
 </pre>
 <p>Here are the same benchmarks again, but including the memory usage
 of the process in KB before and after parsing (using os.fork() to
 make sure we start from a clean state each time).  For the 274KB
 hamlet.xml file:</p>
 <pre class="literal-block">
-Memory usage: 7284
-xml.etree.ElementTree.parse done in 0.017 seconds
-Memory usage: 9432 (+2148)
+Memory usage: 9256
+xml.etree.ElementTree.parse done in 0.006 seconds
+Memory usage: 12764 (+3508)
 xml.etree.cElementTree.parse done in 0.007 seconds
-Memory usage: 9432 (+2152)
-xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.007 seconds
-Memory usage: 9448 (+2164)
-lxml.etree.parse done in 0.003 seconds
-Memory usage: 11032 (+3748)
-drop_whitespace.parse done in 0.003 seconds
-Memory usage: 10224 (+2940)
+Memory usage: 12764 (+3508)
+xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.006 seconds
+Memory usage: 12720 (+3464)
+lxml.etree.parse done in 0.004 seconds
+Memory usage: 15052 (+5796)
+drop_whitespace.parse done in 0.004 seconds
+Memory usage: 14040 (+4784)
 lxml.etree.XMLParser.feed(): 6636 nodes read in 0.004 seconds
-Memory usage: 11804 (+4520)
-minidom tree read in 0.080 seconds
-Memory usage: 12324 (+5040)
+Memory usage: 15812 (+6556)
+minidom tree read in 0.066 seconds
+Memory usage: 15332 (+6076)
 </pre>
 <p>And for the 3.4MB Old Testament XML file:</p>
 <pre class="literal-block">
-Memory usage: 10420
-xml.etree.ElementTree.parse done in 0.038 seconds
-Memory usage: 20660 (+10240)
-xml.etree.cElementTree.parse done in 0.030 seconds
-Memory usage: 20660 (+10240)
-xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.030 seconds
-Memory usage: 20844 (+10424)
-lxml.etree.parse done in 0.016 seconds
-Memory usage: 27624 (+17204)
-drop_whitespace.parse done in 0.015 seconds
-Memory usage: 24468 (+14052)
-lxml.etree.XMLParser.feed(): 25317 nodes read in 0.022 seconds
-Memory usage: 29844 (+19424)
-minidom tree read in 0.288 seconds
-Memory usage: 28788 (+18368)
+Memory usage: 12456
+xml.etree.ElementTree.parse done in 0.037 seconds
+Memory usage: 23288 (+10832)
+xml.etree.cElementTree.parse done in 0.036 seconds
+Memory usage: 23288 (+10832)
+xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.036 seconds
+Memory usage: 23644 (+11220)
+lxml.etree.parse done in 0.025 seconds
+Memory usage: 31404 (+18948)
+drop_whitespace.parse done in 0.022 seconds
+Memory usage: 28752 (+16296)
+lxml.etree.XMLParser.feed(): 25317 nodes read in 0.026 seconds
+Memory usage: 33924 (+21500)
+minidom tree read in 0.194 seconds
+Memory usage: 31284 (+18828)
 </pre>
 <p>As can be seen from the sizes, both lxml.etree and cElementTree are
-rather memory friendly compared to the pure Python libraries
-ElementTree and (especially) minidom.  Comparing to older CPython
+rather memory friendly and fast.  Comparing to older CPython
 versions, the memory footprint of the minidom library was considerably
 reduced in CPython 3.3, by about a factor of 4 in this case.</p>
 <p>For plain parser performance, lxml.etree and cElementTree tend to stay
@@ -285,26 +277,26 @@ rather close to each other, usually within a factor of two, with
 winners well distributed over both sides.  Similar timings can be
 observed for the <tt class="docutils literal">iterparse()</tt> function:</p>
 <pre class="literal-block">
-lxe: iterparse_bytesIO   (SAXR T1)   17.9198 msec/pass
-cET: iterparse_bytesIO   (SAXR T1)   14.4982 msec/pass
+lxe: iterparse_bytesIO   (SAXR T1)   20.3598 msec/pass
+cET: iterparse_bytesIO   (SAXR T1)   10.8948 msec/pass
 
-lxe: iterparse_bytesIO   (UAXR T3)    8.8522 msec/pass
-cET: iterparse_bytesIO   (UAXR T3)   12.9857 msec/pass
+lxe: iterparse_bytesIO   (UAXR T3)    10.1640 msec/pass
+cET: iterparse_bytesIO   (UAXR T3)   12.9926 msec/pass
 </pre>
 <p>However, if you benchmark the complete round-trip of a serialise-parse
 cycle, the numbers will look similar to these:</p>
 <pre class="literal-block">
-lxe: write_utf8_parse_bytesIO   (S-TR T1)   19.8867 msec/pass
-cET: write_utf8_parse_bytesIO   (S-TR T1)   80.7259 msec/pass
+lxe: write_utf8_parse_bytesIO   (S-TR T1)   18.9857 msec/pass
+cET: write_utf8_parse_bytesIO   (S-TR T1)   35.7475 msec/pass
 
-lxe: write_utf8_parse_bytesIO   (UATR T2)   23.7896 msec/pass
-cET: write_utf8_parse_bytesIO   (UATR T2)   98.0766 msec/pass
+lxe: write_utf8_parse_bytesIO   (UATR T2)   22.4853 msec/pass
+cET: write_utf8_parse_bytesIO   (UATR T2)   42.6254 msec/pass
 
-lxe: write_utf8_parse_bytesIO   (S-TR T3)    3.0684 msec/pass
-cET: write_utf8_parse_bytesIO   (S-TR T3)   24.6122 msec/pass
+lxe: write_utf8_parse_bytesIO   (S-TR T3)    3.3801 msec/pass
+cET: write_utf8_parse_bytesIO   (S-TR T3)   11.2493 msec/pass
 
-lxe: write_utf8_parse_bytesIO   (SATR T4)    0.3495 msec/pass
-cET: write_utf8_parse_bytesIO   (SATR T4)    1.9610 msec/pass
+lxe: write_utf8_parse_bytesIO   (SATR T4)    0.4263 msec/pass
+cET: write_utf8_parse_bytesIO   (SATR T4)    1.0326 msec/pass
 </pre>
 <p>For applications that require a high parser throughput of large files,
 and that do little to no serialization, both cET and lxml.etree are a
@@ -346,14 +338,14 @@ restructuring.  This can be seen from the tree setup times of the
 benchmark (given in seconds):</p>
 <pre class="literal-block">
 lxe:       --     S-     U-     -A     SA     UA
-     T1: 0.0299 0.0343 0.0344 0.0293 0.0345 0.0342
-     T2: 0.0368 0.0423 0.0418 0.0427 0.0474 0.0459
-     T3: 0.0088 0.0084 0.0086 0.0251 0.0258 0.0261
-     T4: 0.0002 0.0002 0.0002 0.0005 0.0006 0.0006
+     T1: 0.0219 0.0254 0.0257 0.0216 0.0259 0.0259
+     T2: 0.0234 0.0279 0.0283 0.0271 0.0318 0.0307
+     T3: 0.0051 0.0050 0.0058 0.0218 0.0233 0.0231
+     T4: 0.0001 0.0001 0.0001 0.0004 0.0004 0.0004
 cET:       --     S-     U-     -A     SA     UA
-     T1: 0.0050 0.0045 0.0093 0.0044 0.0043 0.0043
-     T2: 0.0073 0.0075 0.0074 0.0201 0.0075 0.0074
-     T3: 0.0033 0.0213 0.0032 0.0034 0.0033 0.0035
+     T1: 0.0035 0.0029 0.0078 0.0031 0.0031 0.0029
+     T2: 0.0047 0.0051 0.0053 0.0046 0.0055 0.0048
+     T3: 0.0016 0.0216 0.0027 0.0021 0.0023 0.0026
      T4: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
 </pre>
 <p>The timings are somewhat close to each other, although cET can be
@@ -370,30 +362,30 @@ the overhead in creating them.</p>
 a shallow copy of their list of children, lxml has to create a Python
 object for each child and collect them in a list:</p>
 <pre class="literal-block">
-lxe: root_list_children        (--TR T1)    0.0038 msec/pass
-cET: root_list_children        (--TR T1)    0.0010 msec/pass
+lxe: root_list_children        (--TR T1)    0.0036 msec/pass
+cET: root_list_children        (--TR T1)    0.0005 msec/pass
 
-lxe: root_list_children        (--TR T2)    0.0455 msec/pass
-cET: root_list_children        (--TR T2)    0.0050 msec/pass
+lxe: root_list_children        (--TR T2)    0.0634 msec/pass
+cET: root_list_children        (--TR T2)    0.0086 msec/pass
 </pre>
 <p>This handicap is also visible when accessing single children:</p>
 <pre class="literal-block">
-lxe: first_child               (--TR T2)    0.0424 msec/pass
-cET: first_child               (--TR T2)    0.0384 msec/pass
+lxe: first_child               (--TR T2)    0.0601 msec/pass
+cET: first_child               (--TR T2)    0.0548 msec/pass
 
-lxe: last_child                (--TR T1)    0.0477 msec/pass
-cET: last_child                (--TR T1)    0.0467 msec/pass
+lxe: last_child                (--TR T1)    0.0570 msec/pass
+cET: last_child                (--TR T1)    0.0534 msec/pass
 </pre>
 <p>... unless you also add the time to find a child index in a bigger
 list.  ET and cET use Python lists here, which are based on arrays.
 The data structure used by libxml2 is a linked tree, and thus, a
 linked list of children:</p>
 <pre class="literal-block">
-lxe: middle_child              (--TR T1)    0.0710 msec/pass
-cET: middle_child              (--TR T1)    0.0420 msec/pass
+lxe: middle_child              (--TR T1)    0.0892 msec/pass
+cET: middle_child              (--TR T1)    0.0510 msec/pass
 
-lxe: middle_child              (--TR T2)    1.7393 msec/pass
-cET: middle_child              (--TR T2)    0.0396 msec/pass
+lxe: middle_child              (--TR T2)    2.3038 msec/pass
+cET: middle_child              (--TR T2)    0.0508 msec/pass
 </pre>
 </div>
 <div class="section" id="element-creation">
@@ -402,18 +394,18 @@ cET: middle_child              (--TR T2)    0.0396 msec/pass
 in.  This results in a major performance difference for creating independent
 Elements that end up in independently created documents:</p>
 <pre class="literal-block">
-lxe: create_elements           (--TC T2)    1.0045 msec/pass
-cET: create_elements           (--TC T2)    0.0753 msec/pass
+lxe: create_elements           (--TC T2)    0.8032 msec/pass
+cET: create_elements           (--TC T2)    0.0675 msec/pass
 </pre>
 <p>Therefore, it is always preferable to create Elements for the document they
 are supposed to end up in, either as SubElements of an Element or using the
 explicit <tt class="docutils literal">Element.makeelement()</tt> call:</p>
 <pre class="literal-block">
-lxe: makeelement               (--TC T2)    1.0586 msec/pass
-cET: makeelement               (--TC T2)    0.1483 msec/pass
+lxe: makeelement               (--TC T2)    0.8030 msec/pass
+cET: makeelement               (--TC T2)    0.0625 msec/pass
 
-lxe: create_subelements        (--TC T2)    0.8826 msec/pass
-cET: create_subelements        (--TC T2)    0.0827 msec/pass
+lxe: create_subelements        (--TC T2)    0.8621 msec/pass
+cET: create_subelements        (--TC T2)    0.0923 msec/pass
 </pre>
 <p>So, if the main performance bottleneck of an application is creating large XML
 trees in memory through calls to Element and SubElement, cET is the best
@@ -427,11 +419,11 @@ requires lxml to do recursive adaptations throughout the moved tree structure.</
 <p>The following benchmark appends all root children of the second tree to the
 root of the first tree:</p>
 <pre class="literal-block">
-lxe: append_from_document      (--TR T1,T2)    1.0812 msec/pass
-cET: append_from_document      (--TR T1,T2)    0.1104 msec/pass
+lxe: append_from_document      (--TR T1,T2)    1.3800 msec/pass
+cET: append_from_document      (--TR T1,T2)    0.0513 msec/pass
 
-lxe: append_from_document      (--TR T3,T4)    0.0155 msec/pass
-cET: append_from_document      (--TR T3,T4)    0.0060 msec/pass
+lxe: append_from_document      (--TR T3,T4)    0.0150 msec/pass
+cET: append_from_document      (--TR T3,T4)    0.0026 msec/pass
 </pre>
 <p>Although these are fairly small numbers compared to parsing, this easily shows
 the different performance classes for lxml and (c)ET.  Where the latter do not
@@ -441,19 +433,19 @@ with the size of the tree that is moved.</p>
 <p>This difference is not always as visible, but applies to most parts of the
 API, like inserting newly created elements:</p>
 <pre class="literal-block">
-lxe: insert_from_document         (--TR T1,T2)    3.9763 msec/pass
-cET: insert_from_document         (--TR T1,T2)    0.1459 msec/pass
+lxe: insert_from_document         (--TR T1,T2)    5.2345 msec/pass
+cET: insert_from_document         (--TR T1,T2)    0.0732 msec/pass
 </pre>
 <p>or replacing the child slice by a newly created element:</p>
 <pre class="literal-block">
-lxe: replace_children_element   (--TC T1)    0.0749 msec/pass
-cET: replace_children_element   (--TC T1)    0.0081 msec/pass
+lxe: replace_children_element   (--TC T1)    0.0720 msec/pass
+cET: replace_children_element   (--TC T1)    0.0105 msec/pass
 </pre>
 <p>as opposed to replacing the slice with an existing element from the
 same document:</p>
 <pre class="literal-block">
-lxe: replace_children           (--TC T1)    0.0052 msec/pass
-cET: replace_children           (--TC T1)    0.0036 msec/pass
+lxe: replace_children           (--TC T1)    0.0060 msec/pass
+cET: replace_children           (--TC T1)    0.0050 msec/pass
 </pre>
 <p>While these numbers are too small to provide a major performance
 impact in practice, you should keep this difference in mind when you
@@ -465,14 +457,14 @@ thus avoiding the merge overhead when inserting it into that tree.</p>
 <h2>deepcopy</h2>
 <p>Deep copying a tree is fast in lxml:</p>
 <pre class="literal-block">
-lxe: deepcopy_all              (--TR T1)    3.1650 msec/pass
-cET: deepcopy_all              (--TR T1)   53.9973 msec/pass
+lxe: deepcopy_all              (--TR T1)    4.1246 msec/pass
+cET: deepcopy_all              (--TR T1)   2.5451 msec/pass
 
-lxe: deepcopy_all              (-ATR T2)    3.7365 msec/pass
-cET: deepcopy_all              (-ATR T2)   61.6267 msec/pass
+lxe: deepcopy_all              (-ATR T2)    4.7867 msec/pass
+cET: deepcopy_all              (-ATR T2)   2.7504 msec/pass
 
-lxe: deepcopy_all              (S-TR T3)    0.7913 msec/pass
-cET: deepcopy_all              (S-TR T3)   13.6220 msec/pass
+lxe: deepcopy_all              (S-TR T3)    1.0097 msec/pass
+cET: deepcopy_all              (S-TR T3)   0.6278 msec/pass
 </pre>
 <p>So, for example, if you have a database-like scenario where you parse in a
 large tree and then search and copy independent subtrees from it for further
@@ -486,31 +478,31 @@ traversal of the XML tree and especially if few elements are of
 interest or the target element tag name is known, the <tt class="docutils literal">.iter()</tt>
 method is a good choice:</p>
 <pre class="literal-block">
-lxe: iter_all             (--TR T1)    1.0529 msec/pass
-cET: iter_all             (--TR T1)    0.2635 msec/pass
+lxe: iter_all             (--TR T1)    1.3661 msec/pass
+cET: iter_all             (--TR T1)    0.2670 msec/pass
 
-lxe: iter_islice          (--TR T2)    0.0110 msec/pass
-cET: iter_islice          (--TR T2)    0.0050 msec/pass
+lxe: iter_islice          (--TR T2)    0.0122 msec/pass
+cET: iter_islice          (--TR T2)    0.0033 msec/pass
 
-lxe: iter_tag             (--TR T2)    0.0079 msec/pass
-cET: iter_tag             (--TR T2)    0.0112 msec/pass
+lxe: iter_tag             (--TR T2)    0.0098 msec/pass
+cET: iter_tag             (--TR T2)    0.0086 msec/pass
 
-lxe: iter_tag_all         (--TR T2)    0.1822 msec/pass
-cET: iter_tag_all         (--TR T2)    0.5343 msec/pass
+lxe: iter_tag_all         (--TR T2)    0.6840 msec/pass
+cET: iter_tag_all         (--TR T2)    0.4323 msec/pass
 </pre>
 <p>This translates directly into similar timings for <tt class="docutils literal">Element.findall()</tt>:</p>
 <pre class="literal-block">
-lxe: findall              (--TR T2)    1.7176 msec/pass
-cET: findall              (--TR T2)    0.9973 msec/pass
+lxe: findall              (--TR T2)    3.9611 msec/pass
+cET: findall              (--TR T2)    0.9227 msec/pass
 
-lxe: findall              (--TR T3)    0.3967 msec/pass
-cET: findall              (--TR T3)    0.2525 msec/pass
+lxe: findall              (--TR T3)    0.3989 msec/pass
+cET: findall              (--TR T3)    0.2670 msec/pass
 
-lxe: findall_tag          (--TR T2)    0.2258 msec/pass
-cET: findall_tag          (--TR T2)    0.5770 msec/pass
+lxe: findall_tag          (--TR T2)    0.7420 msec/pass
+cET: findall_tag          (--TR T2)    0.4942 msec/pass
 
-lxe: findall_tag          (--TR T3)    0.1085 msec/pass
-cET: findall_tag          (--TR T3)    0.1919 msec/pass
+lxe: findall_tag          (--TR T3)    0.1099 msec/pass
+cET: findall_tag          (--TR T3)    0.1748 msec/pass
 </pre>
 <p>Note that all three libraries currently use the same Python
 implementation for <tt class="docutils literal">.findall()</tt>, except for their native tree
@@ -528,38 +520,38 @@ provides more than one way of accessing it and you should take care which part
 of the lxml API you use.  The most straight forward way is to call the
 <tt class="docutils literal">xpath()</tt> method on an Element or ElementTree:</p>
 <pre class="literal-block">
-lxe: xpath_method         (--TC T1)    0.3982 msec/pass
-lxe: xpath_method         (--TC T2)    7.8895 msec/pass
-lxe: xpath_method         (--TC T3)    0.0477 msec/pass
-lxe: xpath_method         (--TC T4)    0.3982 msec/pass
+lxe: xpath_method         (--TC T1)    0.2828 msec/pass
+lxe: xpath_method         (--TC T2)    5.4705 msec/pass
+lxe: xpath_method         (--TC T3)    0.0324 msec/pass
+lxe: xpath_method         (--TC T4)    0.2804 msec/pass
 </pre>
 <p>This is well suited for testing and when the XPath expressions are as diverse
 as the trees they are called on.  However, if you have a single XPath
 expression that you want to apply to a larger number of different elements,
 the <tt class="docutils literal">XPath</tt> class is the most efficient way to do it:</p>
 <pre class="literal-block">
-lxe: xpath_class          (--TC T1)    0.0713 msec/pass
-lxe: xpath_class          (--TC T2)    1.1325 msec/pass
-lxe: xpath_class          (--TC T3)    0.0215 msec/pass
-lxe: xpath_class          (--TC T4)    0.0722 msec/pass
+lxe: xpath_class          (--TC T1)    0.0570 msec/pass
+lxe: xpath_class          (--TC T2)    0.6924 msec/pass
+lxe: xpath_class          (--TC T3)    0.0148 msec/pass
+lxe: xpath_class          (--TC T4)    0.0446 msec/pass
 </pre>
 <p>Note that this still allows you to use variables in the expression, so you can
 parse it once and then adapt it through variables at call time.  In other
 cases, where you have a fixed Element or ElementTree and want to run different
 expressions on it, you should consider the <tt class="docutils literal">XPathEvaluator</tt>:</p>
 <pre class="literal-block">
-lxe: xpath_element        (--TR T1)    0.1101 msec/pass
-lxe: xpath_element        (--TR T2)    2.0473 msec/pass
-lxe: xpath_element        (--TR T3)    0.0267 msec/pass
-lxe: xpath_element        (--TR T4)    0.1087 msec/pass
+lxe: xpath_element        (--TR T1)    0.0684 msec/pass
+lxe: xpath_element        (--TR T2)    1.0865 msec/pass
+lxe: xpath_element        (--TR T3)    0.0174 msec/pass
+lxe: xpath_element        (--TR T4)    0.0665 msec/pass
 </pre>
 <p>While it looks slightly slower, creating an XPath object for each of the
 expressions generates a much higher overhead here:</p>
 <pre class="literal-block">
-lxe: xpath_class_repeat           (--TC T1   )    0.3884 msec/pass
-lxe: xpath_class_repeat           (--TC T2   )    7.6182 msec/pass
-lxe: xpath_class_repeat           (--TC T3   )    0.0465 msec/pass
-lxe: xpath_class_repeat           (--TC T4   )    0.3877 msec/pass
+lxe: xpath_class_repeat           (--TC T1   )    0.2813 msec/pass
+lxe: xpath_class_repeat           (--TC T2   )    5.4042 msec/pass
+lxe: xpath_class_repeat           (--TC T3   )    0.0339 msec/pass
+lxe: xpath_class_repeat           (--TC T4   )    0.2706 msec/pass
 </pre>
 <p>Note that tree iteration can be substantially faster than XPath if
 your code short-circuits after the first couple of elements were
@@ -568,25 +560,25 @@ regardless of how much of it will actually be used.</p>
 <p>Here is an example where only the first matching element is being
 searched, a case for which XPath has syntax support as well:</p>
 <pre class="literal-block">
-lxe: find_single                (--TR T2)    0.0184 msec/pass
-cET: find_single                (--TR T2)    0.0052 msec/pass
+lxe: find_single                (--TR T2)    0.0031 msec/pass
+cET: find_single                (--TR T2)    0.0026 msec/pass
 
-lxe: iter_single                (--TR T2)    0.0024 msec/pass
-cET: iter_single                (--TR T2)    0.0007 msec/pass
+lxe: iter_single                (--TR T2)    0.0019 msec/pass
+cET: iter_single                (--TR T2)    0.0002 msec/pass
 
-lxe: xpath_single               (--TR T2)    0.0033 msec/pass
+lxe: xpath_single               (--TR T2)    0.0861 msec/pass
 </pre>
 <p>When looking for the first two elements out of many, the numbers
 explode for XPath, as restricting the result subset requires a
 more complex expression:</p>
 <pre class="literal-block">
-lxe: iterfind_two               (--TR T2)    0.0184 msec/pass
-cET: iterfind_two               (--TR T2)    0.0062 msec/pass
+lxe: iterfind_two               (--TR T2)    0.0050 msec/pass
+cET: iterfind_two               (--TR T2)    0.0036 msec/pass
 
-lxe: iter_two                   (--TR T2)    0.0029 msec/pass
-cET: iter_two                   (--TR T2)    0.0017 msec/pass
+lxe: iter_two                   (--TR T2)    0.0021 msec/pass
+cET: iter_two                   (--TR T2)    0.0014 msec/pass
 
-lxe: xpath_two                  (--TR T2)    0.2768 msec/pass
+lxe: xpath_two                  (--TR T2)    0.0916 msec/pass
 </pre>
 </div>
 <div class="section" id="a-longer-example">
@@ -718,21 +710,21 @@ instantiated over and over again.</p>
 tree.  It avoids step-by-step Python element instantiations along the path,
 which can substantially improve the access time:</p>
 <pre class="literal-block">
-lxe: attribute                  (--TR T1)    4.1828 msec/pass
-lxe: attribute                  (--TR T2)   17.3802 msec/pass
-lxe: attribute                  (--TR T4)    3.8657 msec/pass
+lxe: attribute                  (--TR T1)    2.4018 msec/pass
+lxe: attribute                  (--TR T2)   16.3755 msec/pass
+lxe: attribute                  (--TR T4)    2.3725 msec/pass
 
-lxe: objectpath                 (--TR T1)    0.9289 msec/pass
-lxe: objectpath                 (--TR T2)   13.3109 msec/pass
-lxe: objectpath                 (--TR T4)    0.9289 msec/pass
+lxe: objectpath                 (--TR T1)    1.1816 msec/pass
+lxe: objectpath                 (--TR T2)   14.4675 msec/pass
+lxe: objectpath                 (--TR T4)    1.2276 msec/pass
 
-lxe: attributes_deep            (--TR T1)    6.2900 msec/pass
-lxe: attributes_deep            (--TR T2)   20.4713 msec/pass
-lxe: attributes_deep            (--TR T4)    6.1679 msec/pass
+lxe: attributes_deep            (--TR T1)    3.7086 msec/pass
+lxe: attributes_deep            (--TR T2)   17.5436 msec/pass
+lxe: attributes_deep            (--TR T4)    3.8407 msec/pass
 
-lxe: objectpath_deep            (--TR T1)    1.3049 msec/pass
-lxe: objectpath_deep            (--TR T2)   14.0815 msec/pass
-lxe: objectpath_deep            (--TR T4)    1.3051 msec/pass
+lxe: objectpath_deep            (--TR T1)    1.4980 msec/pass
+lxe: objectpath_deep            (--TR T2)   14.7266 msec/pass
+lxe: objectpath_deep            (--TR T4)    1.4834 msec/pass
 </pre>
 <p>Note, however, that parsing ObjectPath expressions is not for free either, so
 this is most effective for frequently accessing the same element.</p>
@@ -754,17 +746,17 @@ expressions to be more selective.  By choosing the right trees (or even
 subtrees and elements) to cache, you can trade memory usage against access
 speed:</p>
 <pre class="literal-block">
-lxe: attribute_cached           (--TR T1)    3.1357 msec/pass
-lxe: attribute_cached           (--TR T2)   15.8911 msec/pass
-lxe: attribute_cached           (--TR T4)    2.9194 msec/pass
+lxe: attribute_cached           (--TR T1)    1.9207 msec/pass
+lxe: attribute_cached           (--TR T2)   15.6903 msec/pass
+lxe: attribute_cached           (--TR T4)    1.8718 msec/pass
 
-lxe: attributes_deep_cached     (--TR T1)    3.8984 msec/pass
-lxe: attributes_deep_cached     (--TR T2)   16.8300 msec/pass
-lxe: attributes_deep_cached     (--TR T4)    3.6936 msec/pass
+lxe: attributes_deep_cached     (--TR T1)    2.6512 msec/pass
+lxe: attributes_deep_cached     (--TR T2)   16.7937 msec/pass
+lxe: attributes_deep_cached     (--TR T4)    2.5539 msec/pass
 
-lxe: objectpath_deep_cached     (--TR T1)    0.7496 msec/pass
-lxe: objectpath_deep_cached     (--TR T2)   12.3763 msec/pass
-lxe: objectpath_deep_cached     (--TR T4)    0.7427 msec/pass
+lxe: objectpath_deep_cached     (--TR T1)    0.8519 msec/pass
+lxe: objectpath_deep_cached     (--TR T2)   13.9337 msec/pass
+lxe: objectpath_deep_cached     (--TR T4)    0.8645 msec/pass
 </pre>
 <p>Things to note: you cannot currently use <tt class="docutils literal">weakref.WeakKeyDictionary</tt> objects
 for this as lxml's element objects do not support weak references (which are
@@ -798,7 +790,7 @@ random.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 5fa07be1420b1892f91c1eb95133452c2820863b..64d7b61f32cfd7e154aca40dfd80bda39ea90741 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Document loading and URL resolving</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="document-loading-and-url-resolving">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu current" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Document loading and URL resolving</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu current" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Document loading and URL resolving</h1>
 
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
@@ -61,7 +61,7 @@ on <a class="reference external" href="http://xmlsoft.org/catalog.html">how to s
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">DTDResolver</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">Resolver</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"Resolving URL '</span><span class="si">%s</span><span class="s2">'"</span> <span class="o">%</span> <span class="n">url</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"Resolving URL '</span><span class="si">%s</span><span class="s2">'"</span> <span class="o">%</span> <span class="n">url</span><span class="p">)</span>
 <span class="gp">... </span>        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">resolve_string</span><span class="p">(</span>
 <span class="gp">... </span>            <span class="s1">'&lt;!ENTITY myentity "[resolved text: </span><span class="si">%s</span><span class="s1">]"&gt;'</span> <span class="o">%</span> <span class="n">url</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
 </pre></div>
@@ -83,7 +83,7 @@ registered resolver (or the default resolver) is consulted.  Resolving always
 terminates if <tt class="docutils literal">resolve()</tt> returns the result of any of the above
 <tt class="docutils literal"><span class="pre">resolve_*()</span></tt> methods.</p>
 <p>Resolvers are registered local to a parser:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">load_dtd</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">load_dtd</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span><span class="o">.</span><span class="n">resolvers</span><span class="o">.</span><span class="n">add</span><span class="p">(</span> <span class="n">DTDResolver</span><span class="p">()</span> <span class="p">)</span>
 </pre></div>
 <p>Note that we instantiate a parser that loads the DTD.  This is not done by the
@@ -93,7 +93,7 @@ document that requires resolving a URL, it will call our custom resolver:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="n">xml</span><span class="p">),</span> <span class="n">parser</span><span class="p">)</span>
 <span class="go">Resolving URL 'MissingDTD.dtd'</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">[resolved text: MissingDTD.dtd]</span>
 </pre></div>
 <p>The entity in the document was correctly resolved by the generated DTD
@@ -116,7 +116,7 @@ resolver that only responds to a specific prefix:</p>
 <span class="gp">... </span><span class="s1">             '''</span> <span class="o">%</span> <span class="n">prefix</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">pubid</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
 <span class="gp">... </span>        <span class="k">if</span> <span class="n">url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">):</span>
-<span class="gp">... </span>            <span class="k">print</span><span class="p">(</span><span class="s2">"Resolved url </span><span class="si">%s</span><span class="s2"> as prefix </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">))</span>
+<span class="gp">... </span>            <span class="nb">print</span><span class="p">(</span><span class="s2">"Resolved url </span><span class="si">%s</span><span class="s2"> as prefix </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">))</span>
 <span class="gp">... </span>            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">resolve_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result_xml</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
 </pre></div>
 <p>We demonstrate this in XSLT and use the following stylesheet as an example:</p>
@@ -189,7 +189,7 @@ needs to resolve the <tt class="docutils literal">hoi</tt> URI in the call to th
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">honk_parser</span><span class="o">.</span><span class="n">resolvers</span><span class="o">.</span><span class="n">add</span><span class="p">(</span> <span class="n">PrefixResolver</span><span class="p">(</span><span class="s2">"hoi"</span><span class="p">)</span> <span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">honk_doc</span><span class="p">)</span>
 <span class="go">Resolved url hoi:test as prefix hoi</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
 <span class="go">&lt;?xml version="1.0"?&gt;</span>
 <span class="go">&lt;test&gt;hoi-TEST&lt;/test&gt;</span>
 </pre></div>
@@ -199,7 +199,7 @@ that this is completely independent of the XML file you transform, as the URI
 is resolved from within the stylesheet context:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">normal_doc</span><span class="p">)</span>
 <span class="go">Resolved url hoi:test as prefix hoi</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
 <span class="go">&lt;?xml version="1.0"?&gt;</span>
 <span class="go">&lt;test&gt;hoi-TEST&lt;/test&gt;</span>
 </pre></div>
@@ -227,7 +227,7 @@ operations:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">normal_doc</span><span class="p">)</span>
 <span class="go">Resolved url hoi:test as prefix hoi</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">ac</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XSLTAccessControl</span><span class="p">(</span><span class="n">read_network</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">ac</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XSLTAccessControl</span><span class="p">(</span><span class="n">read_network</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">transform</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XSLT</span><span class="p">(</span><span class="n">honk_doc</span><span class="p">,</span> <span class="n">access_control</span><span class="o">=</span><span class="n">ac</span><span class="p">)</span>
 <span class="go">Resolved url honk:test as prefix honk</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">normal_doc</span><span class="p">)</span>
@@ -250,7 +250,7 @@ documents or raises exceptions if access is denied.</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 4103192baf0fd7021dfdca8f782516b0f11a0d77..b0c1b82392045ded3740b38c6ed33a9ace23b395 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Sax support</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="sax-support">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu current" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Sax support</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu current" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Sax support</h1>
 
 <p>In this document we'll describe lxml's SAX support.  lxml has support for
 producing SAX events for an ElementTree or Element.  lxml can also turn SAX
@@ -48,11 +48,11 @@ do this, we use the special SAX content handler defined by lxml named
 <span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span> <span class="o">=</span> <span class="n">lxml</span><span class="o">.</span><span class="n">sax</span><span class="o">.</span><span class="n">ElementTreeContentHandler</span><span class="p">()</span>
 </pre></div>
 <p>Now let's fire some SAX events at it:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">startElementNS</span><span class="p">((</span><span class="bp">None</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">,</span> <span class="p">{})</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">startElementNS</span><span class="p">((</span><span class="bp">None</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">),</span> <span class="s1">'b'</span><span class="p">,</span> <span class="p">{(</span><span class="bp">None</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">):</span> <span class="s1">'bar'</span><span class="p">})</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">startElementNS</span><span class="p">((</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">,</span> <span class="p">{})</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">startElementNS</span><span class="p">((</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">),</span> <span class="s1">'b'</span><span class="p">,</span> <span class="p">{(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">):</span> <span class="s1">'bar'</span><span class="p">})</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">characters</span><span class="p">(</span><span class="s1">'Hello world'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">endElementNS</span><span class="p">((</span><span class="bp">None</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">),</span> <span class="s1">'b'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">endElementNS</span><span class="p">((</span><span class="bp">None</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">endElementNS</span><span class="p">((</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">),</span> <span class="s1">'b'</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">handler</span><span class="o">.</span><span class="n">endElementNS</span><span class="p">((</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">),</span> <span class="s1">'a'</span><span class="p">)</span>
 </pre></div>
 <p>This constructs an equivalent tree.  You can access it through the <tt class="docutils literal">etree</tt>
 property of the handler:</p>
@@ -77,7 +77,7 @@ content handler.:</p>
 <span class="gp">... </span>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 <span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">a_amount</span> <span class="o">=</span> <span class="mi">0</span>
 <span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">b_amount</span> <span class="o">=</span> <span class="mi">0</span>
-<span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="bp">None</span>
+<span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="kc">None</span>
 <span class="gp">...</span>
 <span class="gp">... </span>    <span class="k">def</span> <span class="nf">startElementNS</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">qname</span><span class="p">,</span> <span class="n">attributes</span><span class="p">):</span>
 <span class="gp">... </span>        <span class="n">uri</span><span class="p">,</span> <span class="n">localname</span> <span class="o">=</span> <span class="n">name</span>
@@ -117,14 +117,14 @@ DOM implementation cannot generate SAX events from a DOM tree.</p>
 </pre></div>
 <p>PullDOM makes the result available through the <tt class="docutils literal">document</tt> attribute:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">dom</span> <span class="o">=</span> <span class="n">handler</span><span class="o">.</span><span class="n">document</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">dom</span><span class="o">.</span><span class="n">firstChild</span><span class="o">.</span><span class="n">localName</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">dom</span><span class="o">.</span><span class="n">firstChild</span><span class="o">.</span><span class="n">localName</span><span class="p">)</span>
 <span class="go">a</span>
 </pre></div>
 </div>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 88cc3426eb5185b8d4152cc825b5c3c8f832066c..13c11255c21c2c139d4d402adeddcba32a38c5ac 100644 (file)
@@ -8,5 +8,5 @@
   </head>
   <body>
     <h1>Sitemap of lxml.de - Processing XML and HTML with Python</h1>
-  <div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li></ul><li><a href="http://lxml.de/files/">Download files</a></li></div></div></body>
+  <div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li></ul><li><a href="http://lxml.de/files/">Download files</a></li></div></div></body>
 </html>
\ No newline at end of file
index 4cc454aac75bd9dc6c16e41469ce106a0bbe7f61..7d1b0e6756495111ca84778679542ad391c57be1 100644 (file)
@@ -164,7 +164,7 @@ div.banner {
     border: 2px solid darkred;
     color: darkgreen;
     line-height: 1em;
-    margin: 1ex;
+    margin: 3ex 1ex 1ex;
     padding: 3pt;
 }
 
@@ -321,6 +321,18 @@ html > .pagequote {
     position: fixed;
 }
 
+div.admonition {
+    border: solid 1px;
+    border-radius: 1ex;
+    margin: 0.5ex;
+    padding: 0.5ex 1.5ex 0.5ex 1.5ex;
+    background: lightyellow;
+}
+
+div.admonition > .admonition-title {
+    background: yellow;
+}
+
 code {
     color: Black;
     background-color: #f0f0f0;
index 0be5f45aeeb0c8f52b007f5a01535a45509dc2a3..f659e406186f954b0b866f2cc32117208a0c0109 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>The lxml.etree Tutorial</title>
 <meta name="author" content="Stefan Behnel" />
 <meta content="The lxml tutorial on XML processing with Python" name="description" />
@@ -27,7 +27,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="the-lxml-etree-tutorial">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu current" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">The lxml.etree Tutorial</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu current" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">The lxml.etree Tutorial</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -76,29 +76,29 @@ functionality that is specific to <tt class="docutils literal">lxml.etree</tt>,
 of) the following import chain as a fall-back to the original ElementTree:</p>
 <div class="syntax"><pre><span></span><span class="k">try</span><span class="p">:</span>
   <span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
-  <span class="k">print</span><span class="p">(</span><span class="s2">"running with lxml.etree"</span><span class="p">)</span>
+  <span class="nb">print</span><span class="p">(</span><span class="s2">"running with lxml.etree"</span><span class="p">)</span>
 <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
   <span class="k">try</span><span class="p">:</span>
     <span class="c1"># Python 2.5</span>
-    <span class="kn">import</span> <span class="nn">xml.etree.cElementTree</span> <span class="kn">as</span> <span class="nn">etree</span>
-    <span class="k">print</span><span class="p">(</span><span class="s2">"running with cElementTree on Python 2.5+"</span><span class="p">)</span>
+    <span class="kn">import</span> <span class="nn">xml.etree.cElementTree</span> <span class="k">as</span> <span class="nn">etree</span>
+    <span class="nb">print</span><span class="p">(</span><span class="s2">"running with cElementTree on Python 2.5+"</span><span class="p">)</span>
   <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
     <span class="k">try</span><span class="p">:</span>
       <span class="c1"># Python 2.5</span>
-      <span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">etree</span>
-      <span class="k">print</span><span class="p">(</span><span class="s2">"running with ElementTree on Python 2.5+"</span><span class="p">)</span>
+      <span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">etree</span>
+      <span class="nb">print</span><span class="p">(</span><span class="s2">"running with ElementTree on Python 2.5+"</span><span class="p">)</span>
     <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
       <span class="k">try</span><span class="p">:</span>
         <span class="c1"># normal cElementTree install</span>
-        <span class="kn">import</span> <span class="nn">cElementTree</span> <span class="kn">as</span> <span class="nn">etree</span>
-        <span class="k">print</span><span class="p">(</span><span class="s2">"running with cElementTree"</span><span class="p">)</span>
+        <span class="kn">import</span> <span class="nn">cElementTree</span> <span class="k">as</span> <span class="nn">etree</span>
+        <span class="nb">print</span><span class="p">(</span><span class="s2">"running with cElementTree"</span><span class="p">)</span>
       <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
         <span class="k">try</span><span class="p">:</span>
           <span class="c1"># normal ElementTree install</span>
-          <span class="kn">import</span> <span class="nn">elementtree.ElementTree</span> <span class="kn">as</span> <span class="nn">etree</span>
-          <span class="k">print</span><span class="p">(</span><span class="s2">"running with ElementTree"</span><span class="p">)</span>
+          <span class="kn">import</span> <span class="nn">elementtree.ElementTree</span> <span class="k">as</span> <span class="nn">etree</span>
+          <span class="nb">print</span><span class="p">(</span><span class="s2">"running with ElementTree"</span><span class="p">)</span>
         <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
-          <span class="k">print</span><span class="p">(</span><span class="s2">"Failed to import ElementTree from any known place"</span><span class="p">)</span>
+          <span class="nb">print</span><span class="p">(</span><span class="s2">"Failed to import ElementTree from any known place"</span><span class="p">)</span>
 </pre></div>
 <p>To aid in writing portable code, this tutorial makes it clear in the examples
 which part of the presented API is an extension of <tt class="docutils literal">lxml.etree</tt> over the
@@ -112,7 +112,7 @@ easily created through the <tt class="docutils literal">Element</tt> factory:</p
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
 </pre></div>
 <p>The XML tag name of elements is accessed through the <tt class="docutils literal">tag</tt> property:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 </pre></div>
 <p>Elements are organised in an XML tree structure.  To create child elements and
@@ -126,7 +126,7 @@ to do this: the <tt class="docutils literal">SubElement</tt> factory.  It accept
 <span class="gp">&gt;&gt;&gt; </span><span class="n">child3</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"child3"</span><span class="p">)</span>
 </pre></div>
 <p>To see that this is really XML, you can serialise the tree you have created:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;child1/&gt;</span>
 <span class="go">  &lt;child2/&gt;</span>
@@ -139,10 +139,10 @@ to do this: the <tt class="docutils literal">SubElement</tt> factory.  It accept
 elements mimic the behaviour of normal Python lists as closely as
 possible:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">child</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child1</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">3</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="c1"># lxml.etree only!</span>
@@ -151,7 +151,7 @@ possible:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">children</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child1</span>
 <span class="go">child2</span>
 <span class="go">child3</span>
@@ -160,39 +160,39 @@ possible:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">start</span> <span class="o">=</span> <span class="n">root</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">end</span>   <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">:]</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">start</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">start</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child0</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">end</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">end</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child3</span>
 </pre></div>
 <p>Prior to ElementTree 1.3 and lxml 2.0, you could also check the truth value of
 an Element to see if it has children, i.e. if the list of children is empty:</p>
 <div class="syntax"><pre><span></span><span class="k">if</span> <span class="n">root</span><span class="p">:</span>   <span class="c1"># this no longer works!</span>
-    <span class="k">print</span><span class="p">(</span><span class="s2">"The root element has children"</span><span class="p">)</span>
+    <span class="nb">print</span><span class="p">(</span><span class="s2">"The root element has children"</span><span class="p">)</span>
 </pre></div>
 <p>This is no longer supported as people tend to expect that a "something"
 evaluates to True and expect Elements to be "something", may they have
 children or not.  So, many users find it surprising that any Element
 would evaluate to False in an if-statement like the above.  Instead,
 use <tt class="docutils literal">len(element)</tt>, which is both more explicit and less error prone.</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">iselement</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>  <span class="c1"># test if it's some kind of Element</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">iselement</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>  <span class="c1"># test if it's some kind of Element</span>
 <span class="go">True</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">root</span><span class="p">):</span>                 <span class="c1"># test if it has children</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"The root element has children"</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"The root element has children"</span><span class="p">)</span>
 <span class="go">The root element has children</span>
 </pre></div>
 <p>There is another important case where the behaviour of Elements in lxml
 (in 2.0 and later) deviates from that of lists and from that of the
 original ElementTree (prior to version 1.3 or Python 2.7/3.2):</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child0</span>
 <span class="go">child1</span>
 <span class="go">child2</span>
 <span class="go">child3</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>  <span class="c1"># this moves the element in lxml.etree!</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child3</span>
 <span class="go">child1</span>
 <span class="go">child2</span>
@@ -227,9 +227,9 @@ from Python's standard library:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"neu"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">element</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">root</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">element</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">child1</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span> <span class="n">c</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">root</span> <span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span> <span class="n">c</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">root</span> <span class="p">])</span>
 <span class="go">['child3', 'child1', 'child2']</span>
 </pre></div>
 <p>The siblings (or neighbours) of an element are accessed as next and previous
@@ -250,13 +250,13 @@ factory:</p>
 </pre></div>
 <p>Attributes are just unordered name-value pairs, so a very convenient way
 of dealing with them is through the dictionary-like interface of Elements:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"interesting"</span><span class="p">))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"interesting"</span><span class="p">))</span>
 <span class="go">totally</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">))</span>
 <span class="go">None</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">,</span> <span class="s2">"Huhu"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">))</span>
 <span class="go">Huhu</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
@@ -266,7 +266,7 @@ of dealing with them is through the dictionary-like interface of Elements:</p>
 <span class="go">['hello', 'interesting']</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1"> = </span><span class="si">%r</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1"> = </span><span class="si">%r</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
 <span class="go">hello = 'Huhu'</span>
 <span class="go">interesting = 'totally'</span>
 </pre></div>
@@ -275,15 +275,15 @@ getting a 'real' dictionary-like object, e.g. for passing it around,
 you can use the <tt class="docutils literal">attrib</tt> property:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">attributes</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">attrib</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"interesting"</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"interesting"</span><span class="p">])</span>
 <span class="go">totally</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"no-such-attribute"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"no-such-attribute"</span><span class="p">))</span>
 <span class="go">None</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">attributes</span><span class="p">[</span><span class="s2">"hello"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"Guten Tag"</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"hello"</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">attributes</span><span class="p">[</span><span class="s2">"hello"</span><span class="p">])</span>
 <span class="go">Guten Tag</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hello"</span><span class="p">))</span>
 <span class="go">Guten Tag</span>
 </pre></div>
 <p>Note that <tt class="docutils literal">attrib</tt> is a dict-like object backed by the Element itself.
@@ -303,7 +303,7 @@ tree, copy it into a dict:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s2">"root"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"TEXT"</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">TEXT</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
@@ -347,7 +347,7 @@ still want the tail text of its children).  For this purpose, the
 <tt class="docutils literal">tostring()</tt> function accepts the keyword argument <tt class="docutils literal">with_tail</tt>:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">br</span><span class="p">)</span>
 <span class="go">b'&lt;br/&gt;TAIL'</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">br</span><span class="p">,</span> <span class="n">with_tail</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span> <span class="c1"># lxml.etree only!</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">br</span><span class="p">,</span> <span class="n">with_tail</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="c1"># lxml.etree only!</span>
 <span class="go">b'&lt;br/&gt;'</span>
 </pre></div>
 <p>If you want to read <em>only</em> the text, i.e. without any intermediate
@@ -362,14 +362,14 @@ comes to the rescue, this time using the <tt class="docutils literal">method</tt
 <h2>Using XPath to find text</h2>
 <p>Another way to extract the text content of a tree is <a class="reference external" href="xpathxslt.html#xpath">XPath</a>, which
 also allows you to extract the separate text chunks into a list:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">html</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"string()"</span><span class="p">))</span> <span class="c1"># lxml.etree only!</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">html</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"string()"</span><span class="p">))</span> <span class="c1"># lxml.etree only!</span>
 <span class="go">TEXTTAIL</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">html</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"//text()"</span><span class="p">))</span> <span class="c1"># lxml.etree only!</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">html</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"//text()"</span><span class="p">))</span> <span class="c1"># lxml.etree only!</span>
 <span class="go">['TEXT', 'TAIL']</span>
 </pre></div>
 <p>If you want to use this more often, you can wrap it in a function:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">build_text_list</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//text()"</span><span class="p">)</span> <span class="c1"># lxml.etree only!</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">build_text_list</span><span class="p">(</span><span class="n">html</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">build_text_list</span><span class="p">(</span><span class="n">html</span><span class="p">))</span>
 <span class="go">['TEXT', 'TAIL']</span>
 </pre></div>
 <p>Note that a string result returned by XPath is a special 'smart'
@@ -377,32 +377,32 @@ object that knows about its origins.  You can ask it where it came
 from through its <tt class="docutils literal">getparent()</tt> method, just as you would with
 Elements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">texts</span> <span class="o">=</span> <span class="n">build_text_list</span><span class="p">(</span><span class="n">html</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
 <span class="go">TEXT</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parent</span> <span class="o">=</span> <span class="n">texts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">body</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
 <span class="go">TAIL</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">br</span>
 </pre></div>
 <p>You can also find out if it's normal text content or tail text:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">is_text</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">is_text</span><span class="p">)</span>
 <span class="go">True</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">is_text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">is_text</span><span class="p">)</span>
 <span class="go">False</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">is_tail</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">texts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">is_tail</span><span class="p">)</span>
 <span class="go">True</span>
 </pre></div>
 <p>While this works for the results of the <tt class="docutils literal">text()</tt> function, lxml will
 not tell you the origin of a string value that was constructed by the
 XPath functions <tt class="docutils literal">string()</tt> or <tt class="docutils literal">concat()</tt>:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">stringify</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"string()"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">stringify</span><span class="p">(</span><span class="n">html</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">stringify</span><span class="p">(</span><span class="n">html</span><span class="p">))</span>
 <span class="go">TEXTTAIL</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">stringify</span><span class="p">(</span><span class="n">html</span><span class="p">)</span><span class="o">.</span><span class="n">getparent</span><span class="p">())</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">stringify</span><span class="p">(</span><span class="n">html</span><span class="p">)</span><span class="o">.</span><span class="n">getparent</span><span class="p">())</span>
 <span class="go">None</span>
 </pre></div>
 </div>
@@ -418,7 +418,7 @@ serialised the tree to XML:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"child"</span><span class="p">)</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"Child 2"</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s2">"another"</span><span class="p">)</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"Child 3"</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;child&gt;Child 1&lt;/child&gt;</span>
 <span class="go">  &lt;child&gt;Child 2&lt;/child&gt;</span>
@@ -426,7 +426,7 @@ serialised the tree to XML:</p>
 <span class="go">&lt;/root&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">root - None</span>
 <span class="go">child - Child 1</span>
 <span class="go">child - Child 2</span>
@@ -436,12 +436,12 @@ serialised the tree to XML:</p>
 <tt class="docutils literal">iter()</tt> to have it filter for you.  Starting with lxml 3.0, you can also
 pass more than one tag to intercept on multiple tags during iteration.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s2">"child"</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">child - Child 1</span>
 <span class="go">child - Child 2</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s2">"another"</span><span class="p">,</span> <span class="s2">"child"</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">child - Child 1</span>
 <span class="go">child - Child 2</span>
 <span class="go">another - Child 3</span>
@@ -454,10 +454,10 @@ make sure only Element objects are returned, you can pass the
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">Comment</span><span class="p">(</span><span class="s2">"some comment"</span><span class="p">))</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">):</span>  <span class="c1"># or 'str' in Python 3</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>  <span class="c1"># or 'str' in Python 3</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="gp">... </span>    <span class="k">else</span><span class="p">:</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"SPECIAL: </span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"SPECIAL: </span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">root - None</span>
 <span class="go">child - Child 1</span>
 <span class="go">child - Child 2</span>
@@ -466,14 +466,14 @@ make sure only Element objects are returned, you can pass the
 <span class="go">SPECIAL: &lt;!--some comment--&gt; - some comment</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">tag</span><span class="o">=</span><span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">root - None</span>
 <span class="go">child - Child 1</span>
 <span class="go">child - Child 2</span>
 <span class="go">another - Child 3</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">tag</span><span class="o">=</span><span class="n">etree</span><span class="o">.</span><span class="n">Entity</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">&amp;#234;</span>
 </pre></div>
 <p>Note that passing a wildcard <tt class="docutils literal">"*"</tt> tag name will also yield all
@@ -494,15 +494,15 @@ ASCII:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;root&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;/root&gt;'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xml_declaration</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">xml_declaration</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;?xml version='1.0' encoding='ASCII'?&gt;</span>
 <span class="go">&lt;root&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;/root&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'iso-8859-1'</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">'iso-8859-1'</span><span class="p">))</span>
 <span class="go">&lt;?xml version='1.0' encoding='iso-8859-1'?&gt;</span>
 <span class="go">&lt;root&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;/root&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;a&gt;</span>
 <span class="go">    &lt;b/&gt;</span>
@@ -514,12 +514,12 @@ ASCII:</p>
 whitespace indentation to the tree before serialising it, using the
 <tt class="docutils literal">indent()</tt> function (added in lxml 4.5):</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s1">'&lt;root&gt;&lt;a&gt;&lt;b/&gt;</span><span class="se">\n</span><span class="s1">&lt;/a&gt;&lt;/root&gt;'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">&lt;root&gt;&lt;a&gt;&lt;b/&gt;</span>
 <span class="go">&lt;/a&gt;&lt;/root&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;a&gt;</span>
 <span class="go">    &lt;b/&gt;</span>
@@ -532,7 +532,7 @@ whitespace indentation to the tree before serialising it, using the
 <span class="go">'\n    '</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">space</span><span class="o">=</span><span class="s2">"    "</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">    &lt;a&gt;</span>
 <span class="go">        &lt;b/&gt;</span>
@@ -558,7 +558,7 @@ HTML or extract the text content by passing the <tt class="docutils literal">met
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">'html'</span><span class="p">)</span>
 <span class="go">b'&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Hello&lt;br&gt;World&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">'html'</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">'html'</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">&lt;head&gt;&lt;/head&gt;</span>
 <span class="go">&lt;body&gt;&lt;p&gt;Hello&lt;br&gt;World&lt;/p&gt;&lt;/body&gt;</span>
@@ -603,14 +603,14 @@ general document handling.</p>
 <span class="gp">... </span><span class="s1">'''</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">xml_version</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">xml_version</span><span class="p">)</span>
 <span class="go">1.0</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
 <span class="go">&lt;!DOCTYPE root SYSTEM "test"&gt;</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">public_id</span> <span class="o">=</span> <span class="s1">'-//W3C//DTD XHTML 1.0 Transitional//EN'</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">system_url</span> <span class="o">=</span> <span class="s1">'file://local.dtd'</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">docinfo</span><span class="o">.</span><span class="n">doctype</span><span class="p">)</span>
 <span class="go">&lt;!DOCTYPE root PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "file://local.dtd"&gt;</span>
 </pre></div>
 <p>An <tt class="docutils literal">ElementTree</tt> is also what you get back when you call the
@@ -620,7 +620,7 @@ parsing section below).</p>
 serialises as a complete document, as opposed to a single <tt class="docutils literal">Element</tt>.
 This includes top-level processing instructions and comments, as well
 as a DOCTYPE and other DTD content in the document:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">))</span>  <span class="c1"># lxml 1.3.4 and later</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="p">))</span>  <span class="c1"># lxml 1.3.4 and later</span>
 <span class="go">&lt;!DOCTYPE root PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "file://local.dtd" [</span>
 <span class="go">&lt;!ENTITY tasty "parsnips"&gt;</span>
 <span class="go">]&gt;</span>
@@ -631,7 +631,7 @@ as a DOCTYPE and other DTD content in the document:</p>
 <p>In the original xml.etree.ElementTree implementation and in lxml
 up to 1.3.3, the output looks the same as when serialising only
 the root Element:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()))</span>
 <span class="go">&lt;root&gt;</span>
 <span class="go">  &lt;a&gt;parsnips&lt;/a&gt;</span>
 <span class="go">&lt;/root&gt;</span>
@@ -654,7 +654,7 @@ different parser as second argument.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">some_xml_data</span> <span class="o">=</span> <span class="s2">"&lt;root&gt;data&lt;/root&gt;"</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">some_xml_data</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;root&gt;data&lt;/root&gt;'</span>
@@ -665,7 +665,7 @@ different parser as second argument.</p>
 <p>The <tt class="docutils literal">XML()</tt> function behaves like the <tt class="docutils literal">fromstring()</tt> function, but is
 commonly used to write XML literals right into the source:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;data&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;root&gt;data&lt;/root&gt;'</span>
@@ -696,7 +696,7 @@ doing this all together and use the string parsing functions above.</p>
 <p>Note that <tt class="docutils literal">parse()</tt> returns an ElementTree object, not an Element object as
 the string parser functions:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">root</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;root&gt;data&lt;/root&gt;'</span>
@@ -723,7 +723,7 @@ from while the response is streaming in.</p>
 <h2>Parser objects</h2>
 <p>By default, <tt class="docutils literal">lxml.etree</tt> uses a standard parser with a default setup.  If
 you want to configure the parser, you can create a new instance:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="c1"># lxml.etree only!</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="c1"># lxml.etree only!</span>
 </pre></div>
 <p>This creates a parser that removes empty text between tags while parsing,
 which can reduce the size of the tree and avoid dangling tail text if you know
@@ -737,8 +737,8 @@ that whitespace-only content is not meaningful for your data.  An example:</p>
 content at leaf elements tends to be data content (even if blank).  You can
 easily remove it in an additional step by traversing the tree:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s2">"*"</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
-<span class="gp">... </span>        <span class="n">element</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="bp">None</span>
+<span class="gp">... </span>    <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
+<span class="gp">... </span>        <span class="n">element</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="kc">None</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="go">b'&lt;root&gt;&lt;a/&gt;&lt;b/&gt;&lt;/root&gt;'</span>
@@ -807,7 +807,7 @@ fashion.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">some_file_like</span> <span class="o">=</span> <span class="n">BytesIO</span><span class="p">(</span><span class="sa">b</span><span class="s2">"&lt;root&gt;&lt;a&gt;data&lt;/a&gt;&lt;/root&gt;"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterparse</span><span class="p">(</span><span class="n">some_file_like</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">, </span><span class="si">%4s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">, </span><span class="si">%4s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">end,    a, data</span>
 <span class="go">end, root, None</span>
 </pre></div>
@@ -817,7 +817,7 @@ element, but you can control this through the <tt class="docutils literal">event
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterparse</span><span class="p">(</span><span class="n">some_file_like</span><span class="p">,</span>
 <span class="gp">... </span>                                      <span class="n">events</span><span class="o">=</span><span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">)):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%5s</span><span class="s2">, </span><span class="si">%4s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%5s</span><span class="s2">, </span><span class="si">%4s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
 <span class="go">start, root, None</span>
 <span class="go">start,    a, data</span>
 <span class="go">  end,    a, data</span>
@@ -838,10 +838,10 @@ have completely read through yet.</p>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterparse</span><span class="p">(</span><span class="n">some_file_like</span><span class="p">):</span>
 <span class="gp">... </span>    <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span> <span class="o">==</span> <span class="s1">'b'</span><span class="p">:</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="gp">... </span>    <span class="k">elif</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span> <span class="o">==</span> <span class="s1">'a'</span><span class="p">:</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s2">"** cleaning up the subtree"</span><span class="p">)</span>
-<span class="gp">... </span>        <span class="n">element</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">"** cleaning up the subtree"</span><span class="p">)</span>
+<span class="gp">... </span>        <span class="n">element</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="go">data</span>
 <span class="go">** cleaning up the subtree</span>
 <span class="go">None</span>
@@ -862,8 +862,8 @@ for data extraction.</p>
 <span class="gp">... </span><span class="s1">&lt;/root&gt;'''</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterparse</span><span class="p">(</span><span class="n">xml_file</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="s1">'a'</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1"> -- </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">findtext</span><span class="p">(</span><span class="s1">'b'</span><span class="p">),</span> <span class="n">element</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-<span class="gp">... </span>    <span class="n">element</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1"> -- </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">findtext</span><span class="p">(</span><span class="s1">'b'</span><span class="p">),</span> <span class="n">element</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="n">element</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">keep_tail</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="go">ABC -- abc</span>
 <span class="go">MORE DATA -- more data</span>
 <span class="go">XYZ -- xyz</span>
@@ -888,13 +888,13 @@ events are generated:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">parser_target</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">events</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s1">'&lt;root test="true"/&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
 <span class="go">1</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'event: </span><span class="si">%s</span><span class="s1"> - tag: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">event</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'event: </span><span class="si">%s</span><span class="s1"> - tag: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">event</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
 <span class="gp">... </span>    <span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">event</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s1">' * </span><span class="si">%s</span><span class="s1"> = </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s1">' * </span><span class="si">%s</span><span class="s1"> = </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
 <span class="go">event: start - tag: root</span>
 <span class="go"> * test = true</span>
 </pre></div>
@@ -902,19 +902,19 @@ events are generated:</p>
 should take care that the <tt class="docutils literal">.close()</tt> method really resets the
 target to a usable state (also in the case of an error!).</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">events</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s1">'&lt;root test="true"/&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
 <span class="go">2</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">events</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s1">'&lt;root test="true"/&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
 <span class="go">3</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">events</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="s1">'&lt;root test="true"/&gt;'</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">parser_target</span><span class="o">.</span><span class="n">close_count</span><span class="p">)</span>
 <span class="go">4</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'event: </span><span class="si">%s</span><span class="s1"> - tag: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">event</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'event: </span><span class="si">%s</span><span class="s1"> - tag: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">event</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
 <span class="gp">... </span>    <span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">event</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-<span class="gp">... </span>        <span class="k">print</span><span class="p">(</span><span class="s1">' * </span><span class="si">%s</span><span class="s1"> = </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s1">' * </span><span class="si">%s</span><span class="s1"> = </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
 <span class="go">event: start - tag: root</span>
 <span class="go"> * test = true</span>
 </pre></div>
@@ -929,7 +929,7 @@ wherever possible and deploys the real namespace (the URI) instead:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">body</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="s2">"{http://www.w3.org/1999/xhtml}body"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">body</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"Hello World"</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;html:html xmlns:html="http://www.w3.org/1999/xhtml"&gt;</span>
 <span class="go">  &lt;html:body&gt;Hello World&lt;/html:body&gt;</span>
 <span class="go">&lt;/html:html&gt;</span>
@@ -950,13 +950,13 @@ the Element factory function, e.g. to define the default namespace:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">XHTML_NAMESPACE</span> <span class="o">=</span> <span class="s2">"http://www.w3.org/1999/xhtml"</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">XHTML</span> <span class="o">=</span> <span class="s2">"{</span><span class="si">%s</span><span class="s2">}"</span> <span class="o">%</span> <span class="n">XHTML_NAMESPACE</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">NSMAP</span> <span class="o">=</span> <span class="p">{</span><span class="bp">None</span> <span class="p">:</span> <span class="n">XHTML_NAMESPACE</span><span class="p">}</span> <span class="c1"># the default namespace (no prefix)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">NSMAP</span> <span class="o">=</span> <span class="p">{</span><span class="kc">None</span> <span class="p">:</span> <span class="n">XHTML_NAMESPACE</span><span class="p">}</span> <span class="c1"># the default namespace (no prefix)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">xhtml</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="n">XHTML</span> <span class="o">+</span> <span class="s2">"html"</span><span class="p">,</span> <span class="n">nsmap</span><span class="o">=</span><span class="n">NSMAP</span><span class="p">)</span> <span class="c1"># lxml only!</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">body</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">XHTML</span> <span class="o">+</span> <span class="s2">"body"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">body</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"Hello World"</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</span>
 <span class="go">  &lt;body&gt;Hello World&lt;/body&gt;</span>
 <span class="go">&lt;/html&gt;</span>
@@ -964,29 +964,29 @@ the Element factory function, e.g. to define the default namespace:</p>
 <p>You can also use the <tt class="docutils literal">QName</tt> helper class to build or split qualified
 tag names:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">tag</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">QName</span><span class="p">(</span><span class="s1">'http://www.w3.org/1999/xhtml'</span><span class="p">,</span> <span class="s1">'html'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">localname</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">localname</span><span class="p">)</span>
 <span class="go">html</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">namespace</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">namespace</span><span class="p">)</span>
 <span class="go">http://www.w3.org/1999/xhtml</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">{http://www.w3.org/1999/xhtml}html</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tag</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">QName</span><span class="p">(</span><span class="s1">'{http://www.w3.org/1999/xhtml}html'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">localname</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">localname</span><span class="p">)</span>
 <span class="go">html</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">namespace</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">namespace</span><span class="p">)</span>
 <span class="go">http://www.w3.org/1999/xhtml</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s1">'{http://www.w3.org/1999/xhtml}html'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tag</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">QName</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">localname</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">localname</span><span class="p">)</span>
 <span class="go">html</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tag</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">QName</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s1">'script'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">{http://www.w3.org/1999/xhtml}script</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tag</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">QName</span><span class="p">(</span><span class="s1">'{http://www.w3.org/1999/xhtml}html'</span><span class="p">,</span> <span class="s1">'script'</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tag</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">{http://www.w3.org/1999/xhtml}script</span>
 </pre></div>
 <p>lxml.etree allows you to look up the current namespaces defined for a
@@ -1019,12 +1019,12 @@ serialise-parse roundtrip, even if they appear in a namespaced
 element.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">body</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">XHTML</span> <span class="o">+</span> <span class="s2">"bgcolor"</span><span class="p">,</span> <span class="s2">"#CCFFAA"</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">xhtml</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</span>
 <span class="go">  &lt;body xmlns:html="http://www.w3.org/1999/xhtml" html:bgcolor="#CCFFAA"&gt;Hello World&lt;/body&gt;</span>
 <span class="go">&lt;/html&gt;</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">body</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"bgcolor"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">body</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"bgcolor"</span><span class="p">))</span>
 <span class="go">None</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">body</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">XHTML</span> <span class="o">+</span> <span class="s2">"bgcolor"</span><span class="p">)</span>
 <span class="go">'#CCFFAA'</span>
@@ -1034,18 +1034,18 @@ element.</p>
 <span class="gp">... </span>    <span class="s2">"//{</span><span class="si">%s</span><span class="s2">}body"</span> <span class="o">%</span> <span class="n">XHTML_NAMESPACE</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">results</span> <span class="o">=</span> <span class="n">find_xhtml_body</span><span class="p">(</span><span class="n">xhtml</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://www.w3.org/1999/xhtml}body</span>
 </pre></div>
 <p>For convenience, you can use <tt class="docutils literal">"*"</tt> wildcards in all iterators of <tt class="docutils literal">lxml.etree</tt>,
 both for tag names and namespaces:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'*'</span><span class="p">):</span> <span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>   <span class="c1"># any element</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'*'</span><span class="p">):</span> <span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>   <span class="c1"># any element</span>
 <span class="go">{http://www.w3.org/1999/xhtml}html</span>
 <span class="go">{http://www.w3.org/1999/xhtml}body</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'{http://www.w3.org/1999/xhtml}*'</span><span class="p">):</span> <span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'{http://www.w3.org/1999/xhtml}*'</span><span class="p">):</span> <span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://www.w3.org/1999/xhtml}html</span>
 <span class="go">{http://www.w3.org/1999/xhtml}body</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'{*}body'</span><span class="p">):</span> <span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'{*}body'</span><span class="p">):</span> <span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{http://www.w3.org/1999/xhtml}body</span>
 </pre></div>
 <p>To look for elements that do not have a namespace, either use the
@@ -1054,9 +1054,9 @@ plain tag name or provide the empty namespace explicitly:</p>
 <span class="go">['{http://www.w3.org/1999/xhtml}body']</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'body'</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">[]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'{}body'</span><span class="p">)</span> <span class="p">]</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'</span><span class="si">{}</span><span class="s1">body'</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">[]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'{}*'</span><span class="p">)</span> <span class="p">]</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">xhtml</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s1">'</span><span class="si">{}</span><span class="s1">*'</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">[]</span>
 </pre></div>
 </div>
@@ -1085,7 +1085,7 @@ HTML:</p>
 <span class="gp">... </span>  <span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;html&gt;</span>
 <span class="go">  &lt;head&gt;</span>
 <span class="go">    &lt;title&gt;This is a sample document&lt;/title&gt;</span>
@@ -1125,7 +1125,7 @@ simple vocabulary for an XML language:</p>
 <span class="gp">... </span>  <span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">my_doc</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">my_doc</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;p:doc xmlns:p="http://my.de/fault/namespace"&gt;</span>
 <span class="go">  &lt;p:title&gt;The dog and the hog&lt;/p:title&gt;</span>
 <span class="go">  &lt;p:section&gt;</span>
@@ -1170,32 +1170,32 @@ expression</li>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a x='123'&gt;aText&lt;b/&gt;&lt;c/&gt;&lt;b/&gt;&lt;/a&gt;&lt;/root&gt;"</span><span class="p">)</span>
 </pre></div>
 <p>Find a child of an Element:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"b"</span><span class="p">))</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"b"</span><span class="p">))</span>
 <span class="go">None</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"a"</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"a"</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">a</span>
 </pre></div>
 <p>Find an Element anywhere in the tree:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="p">[</span> <span class="n">b</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iterfind</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">)</span> <span class="p">]</span>
 <span class="go">['b', 'b']</span>
 </pre></div>
 <p>Find Elements with a certain attribute:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s2">".//a[@x]"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s2">".//a[@x]"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">a</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s2">".//a[@y]"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s2">".//a[@y]"</span><span class="p">))</span>
 <span class="go">[]</span>
 </pre></div>
 <p>In lxml 3.4, there is a new helper to generate a structural ElementPath
 expression for an Element:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">a</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
 <span class="go">a/b[1]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
 <span class="go">a/c</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
 <span class="go">a/b[2]</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getelementpath</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="o">==</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
 <span class="go">True</span>
@@ -1207,11 +1207,11 @@ of being self-contained even for documents that use namespaces.</p>
 <p>The <tt class="docutils literal">.iter()</tt> method is a special case that only finds specific tags
 in the tree by their name, not based on a path.  That means that the
 following commands are equivalent in the success case:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">)</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">iterfind</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">))</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">iterfind</span><span class="p">(</span><span class="s2">".//b"</span><span class="p">))</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s2">"b"</span><span class="p">))</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="s2">"b"</span><span class="p">))</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 </pre></div>
 <p>Note that the <tt class="docutils literal">.find()</tt> method simply returns None if no match is found,
@@ -1220,7 +1220,7 @@ whereas the other two examples would raise a <tt class="docutils literal">StopIt
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index a89fb137587e1b4e5ac8c8dea177861a624efb25..3562445d6ef6ebe82f5c5053b6e3069b65016e14 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>Validation with lxml</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="validation-with-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu current" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Validation with lxml</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu current" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">Validation with lxml</h1>
 
 <p>Apart from the built-in DTD support in parsers, lxml currently supports three
 schema languages: <a class="reference external" href="http://en.wikipedia.org/wiki/Document_Type_Definition">DTD</a>, <a class="reference external" href="http://www.relaxng.org/">Relax NG</a> and <a class="reference external" href="http://www.w3.org/XML/Schema">XML Schema</a>.  All three provide
@@ -56,7 +56,7 @@ libxml2 2.6.30.</p>
 a DTD or an XML schema.  The DTD is retrieved automatically based on
 the DOCTYPE of the parsed document.  All you have to do is use a
 parser that has DTD validation enabled:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">dtd_validation</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">dtd_validation</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 </pre></div>
 <p>Obviously, a request for validation enables the DTD loading feature.
 There are two other options that enable loading the DTD, but that do
@@ -106,15 +106,15 @@ into the constructor to parse a DTD:</p>
 </pre></div>
 <p>Now you can use it to validate documents:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;b/&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">dtd</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">dtd</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">True</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;b&gt;&lt;a/&gt;&lt;/b&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">dtd</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">dtd</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
 <span class="go">False</span>
 </pre></div>
 <p>The reason for the validation failure can be found in the error log:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">dtd</span><span class="o">.</span><span class="n">error_log</span><span class="o">.</span><span class="n">filter_from_errors</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">dtd</span><span class="o">.</span><span class="n">error_log</span><span class="o">.</span><span class="n">filter_from_errors</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span>
 <span class="go">&lt;string&gt;:1:0:ERROR:VALID:DTD_NOT_EMPTY: Element b was declared EMPTY this one has content</span>
 </pre></div>
 <p>As an alternative to parsing from a file, you can use the
@@ -127,7 +127,7 @@ in the system catalog:</p>
 <tt class="docutils literal">iterelements</tt> provides an iterator over the element declarations:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">dtd</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">DTD</span><span class="p">(</span><span class="n">StringIO</span><span class="p">(</span><span class="s1">'&lt;!ELEMENT a EMPTY&gt;&lt;!ELEMENT b EMPTY&gt;'</span><span class="p">))</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">dtd</span><span class="o">.</span><span class="n">iterelements</span><span class="p">():</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">el</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
 <span class="go">a</span>
 <span class="go">b</span>
 </pre></div>
@@ -236,7 +236,7 @@ method. This is sometimes used in conditional statements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">invalid</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="s1">'&lt;a&gt;&lt;c&gt;&lt;/c&gt;&lt;/a&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">doc2</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">invalid</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="ow">not</span> <span class="n">relaxng</span><span class="p">(</span><span class="n">doc2</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
 <span class="go">invalid!</span>
 </pre></div>
 <p>If you prefer getting an exception when validating, you can use the
@@ -255,16 +255,16 @@ method. This is sometimes used in conditional statements:</p>
 look up the error log of the validation process and check it for relevant
 messages:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">log</span> <span class="o">=</span> <span class="n">relaxng</span><span class="o">.</span><span class="n">error_log</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">log</span><span class="o">.</span><span class="n">last_error</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">log</span><span class="o">.</span><span class="n">last_error</span><span class="p">)</span>
 <span class="go">&lt;string&gt;:1:0:ERROR:RELAXNGV:RELAXNG_ERR_ELEMWRONG: Did not expect element c there</span>
 </pre></div>
 <p>You can see that the error (ERROR) happened during RelaxNG validation
 (RELAXNGV).  The message then tells you what went wrong.  You can also
 look at the error domain and its type directly:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">error</span> <span class="o">=</span> <span class="n">log</span><span class="o">.</span><span class="n">last_error</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">domain_name</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">domain_name</span><span class="p">)</span>
 <span class="go">RELAXNGV</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span>
 <span class="go">RELAXNG_ERR_ELEMWRONG</span>
 </pre></div>
 <p>Note that this error log is local to the RelaxNG object.  It will only
@@ -320,7 +320,7 @@ This is sometimes used in conditional statements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">invalid</span> <span class="o">=</span> <span class="n">StringIO</span><span class="p">(</span><span class="s1">'&lt;a&gt;&lt;c&gt;&lt;/c&gt;&lt;/a&gt;'</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">doc2</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">invalid</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="ow">not</span> <span class="n">xmlschema</span><span class="p">(</span><span class="n">doc2</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
 <span class="go">invalid!</span>
 </pre></div>
 <p>If you prefer getting an exception when validating, you can use the
@@ -338,9 +338,9 @@ This is sometimes used in conditional statements:</p>
 <p>Error reporting works as for the RelaxNG class:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">log</span> <span class="o">=</span> <span class="n">xmlschema</span><span class="o">.</span><span class="n">error_log</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">error</span> <span class="o">=</span> <span class="n">log</span><span class="o">.</span><span class="n">last_error</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">domain_name</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">domain_name</span><span class="p">)</span>
 <span class="go">SCHEMASV</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span>
 <span class="go">SCHEMAV_ELEMENT_CONTENT</span>
 </pre></div>
 <p>If you were to print this log entry, you would get something like the
@@ -405,7 +405,7 @@ This can be useful for conditional statements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">is_valid</span> <span class="o">=</span> <span class="n">isoschematron</span><span class="o">.</span><span class="n">Schematron</span><span class="p">(</span><span class="n">sct_doc</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="ow">not</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
 <span class="go">invalid!</span>
 </pre></div>
 <p>Built on a pure-xslt implementation, the actual validator is created as an
@@ -546,7 +546,7 @@ This is sometimes used in conditional statements:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">is_valid</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">Schematron</span><span class="p">(</span><span class="n">sct_doc</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="ow">not</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">"invalid!"</span><span class="p">)</span>
 <span class="go">invalid!</span>
 </pre></div>
 <p>Note that libxml2 restricts error reporting to the parsing step (when creating
@@ -556,7 +556,7 @@ reporting during validation.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
index 89d345545756094e8eec0c922e2278648e9d2984..9fb005a05a811b68971dbdeab623ac812bd0523a 100644 (file)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <title>XPath and XSLT with lxml</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,7 +24,7 @@ function hide_menu() {
 </script><meta name="viewport" content="width=device-width, initial-scale=1" /></head>
 <body onclick="hide_menu()">
 <div class="document" id="xpath-and-xslt-with-lxml">
-<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu current" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 3-menu"><li class="menu title"><a href="changes-4.6.3.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">XPath and XSLT with lxml</h1>
+<div class="sidemenu" id="sidemenu"><div class="menutrigger" onclick="trigger_menu(event)">Menu</div><div class="menu"><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#project-income-report">Project income report</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#where-to-get-it">Where to get it</a></li><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-dev-sources">Building lxml from dev sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#source-builds-on-ms-windows">Source builds on MS Windows</a></li><li class="menu item"><a href="installation.html#source-builds-on-macos-x">Source builds on MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="apidoc lxml-menu"><li class="menu title"><a href="apidoc/lxml.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu current" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#passing-generated-trees-through-python">Passing generated trees through Python</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 4 6 4-menu"><li class="menu title"><a href="changes-4.6.4.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="/sitemap.html">Sitemap</a></li></ul></div></div><div class="banner"><div class="banner_image"><img src="python-xml-title.png" /></div><div class="banner_link"><a href="index.html#support-the-project">Like the tool? <br class="first" />Help making it better! <br class="second" />Your donation helps!</a></div></div><h1 class="title">XPath and XSLT with lxml</h1>
 
 <p>lxml supports XPath 1.0, XSLT 1.0 and the EXSLT extensions through
 libxml2 and libxslt in a standards compliant way.</p>
@@ -69,9 +69,15 @@ frequent evaluation: <tt class="docutils literal">XPath</tt> and <tt class="docu
 comparison</a> to learn when to use which.  Their semantics when used on
 Elements and ElementTrees are the same as for the <tt class="docutils literal">xpath()</tt> method described
 here.</p>
-<p>Note that the <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods are usually faster than the full-blown XPath
-support.  They also support incremental tree processing through the <tt class="docutils literal">.iterfind()</tt>
-method, whereas XPath always collects all results before returning them.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">The <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods are usually <em>faster</em> than the full-blown XPath
+support.  They also support incremental tree processing through the
+<tt class="docutils literal">.iterfind()</tt> method, whereas XPath always collects all results before
+returning them.  They are therefore recommended over XPath for both speed
+and memory reasons, whenever there is no need for highly selective XPath
+queries.</p>
+</div>
 <div class="section" id="the-xpath-method">
 <h2>The <tt class="docutils literal">xpath()</tt> method</h2>
 <p>For ElementTree, the xpath method performs a global XPath query against the
@@ -109,13 +115,13 @@ against the element (if relative) or against the root tree (if absolute):</p>
 <p>The <tt class="docutils literal">xpath()</tt> method has support for XPath variables:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">expr</span> <span class="o">=</span> <span class="s2">"//*[local-name() = $name]"</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"foo"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"foo"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">foo</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"bar"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"bar"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">bar</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"$text"</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="s2">"Hello World!"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s2">"$text"</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="s2">"Hello World!"</span><span class="p">))</span>
 <span class="go">Hello World!</span>
 </pre></div>
 </div>
@@ -194,14 +200,14 @@ relationship using the keyword argument <tt class="docutils literal">smart_strin
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find_text</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//text()"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">text</span> <span class="o">=</span> <span class="n">find_text</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
 <span class="go">TEXT</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">text</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">text</span><span class="o">.</span><span class="n">getparent</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">TEXT</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="n">find_text</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//text()"</span><span class="p">,</span> <span class="n">smart_strings</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">find_text</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//text()"</span><span class="p">,</span> <span class="n">smart_strings</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">text</span> <span class="o">=</span> <span class="n">find_text</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
 <span class="go">TEXT</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="nb">hasattr</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s1">'getparent'</span><span class="p">)</span>
 <span class="go">False</span>
@@ -218,7 +224,7 @@ structural, absolute XPath expression to find that element:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">d2</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s2">"d"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getpath</span><span class="p">(</span><span class="n">d2</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getpath</span><span class="p">(</span><span class="n">d2</span><span class="p">))</span>
 <span class="go">/c/d[2]</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">getpath</span><span class="p">(</span><span class="n">d2</span><span class="p">))</span> <span class="o">==</span> <span class="p">[</span><span class="n">d2</span><span class="p">]</span>
 <span class="go">True</span>
@@ -230,7 +236,7 @@ structural, absolute XPath expression to find that element:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;b/&gt;&lt;/root&gt;"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//b"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 </pre></div>
 <p>The compilation takes as much time as in the <tt class="docutils literal">xpath()</tt> method, but it is
@@ -240,9 +246,9 @@ for repeated evaluation of the same XPath expression.</p>
 variables:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">count_elements</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"count(//*[local-name() = $name])"</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">count_elements</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"a"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">count_elements</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"a"</span><span class="p">))</span>
 <span class="go">1.0</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">count_elements</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"b"</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">count_elements</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"b"</span><span class="p">))</span>
 <span class="go">2.0</span>
 </pre></div>
 <p>This supports very efficient evaluation of modified versions of an XPath
@@ -251,7 +257,7 @@ expression, as compilation is still only required once.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root xmlns='NS'&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;b/&gt;&lt;/root&gt;"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//n:b"</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">'n'</span><span class="p">:</span><span class="s1">'NS'</span><span class="p">})</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{NS}b</span>
 </pre></div>
 </div>
@@ -263,7 +269,7 @@ expression, as compilation is still only required once.</p>
 <span class="gp">... </span>                   <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">'re'</span><span class="p">:</span><span class="n">regexpNS</span><span class="p">})</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a&gt;aB&lt;/a&gt;&lt;b&gt;aBc&lt;/b&gt;&lt;/root&gt;"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
 <span class="go">aBc</span>
 </pre></div>
 <p>You can disable this with the boolean keyword argument <tt class="docutils literal">regexp</tt> which
@@ -278,10 +284,10 @@ XPathEvaluator helper for instantiation:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;b/&gt;&lt;/root&gt;"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">xpatheval</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathEvaluator</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">xpatheval</span><span class="p">,</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathElementEvaluator</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">xpatheval</span><span class="p">,</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPathElementEvaluator</span><span class="p">))</span>
 <span class="go">True</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">xpatheval</span><span class="p">(</span><span class="s2">"//b"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">xpatheval</span><span class="p">(</span><span class="s2">"//b"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">b</span>
 </pre></div>
 <p>This class provides efficient support for evaluating different XPath
@@ -306,12 +312,12 @@ write:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XML</span><span class="p">(</span><span class="s2">"&lt;root xmlns='ns'&gt;&lt;a&gt;&lt;b/&gt;&lt;/a&gt;&lt;b/&gt;&lt;/root&gt;"</span><span class="p">)</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">"//p:b"</span><span class="p">,</span> <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">'p'</span> <span class="p">:</span> <span class="s1">'ns'</span><span class="p">})</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{ns}b</span>
 </pre></div>
 <p><tt class="docutils literal">ETXPath</tt> allows you to change this to:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ETXPath</span><span class="p">(</span><span class="s2">"//{ns}b"</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ETXPath</span><span class="p">(</span><span class="s2">"//</span><span class="si">{ns}</span><span class="s2">b"</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
 <span class="go">{ns}b</span>
 </pre></div>
 </div>
@@ -541,17 +547,17 @@ error log.</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="nb">bytes</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="go">b'&lt;?xml version="1.0"?&gt;\n&lt;foo&gt;Text&lt;/foo&gt;\n'</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">transform</span><span class="o">.</span><span class="n">error_log</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">transform</span><span class="o">.</span><span class="n">error_log</span><span class="p">)</span>
 <span class="go">&lt;string&gt;:0:0:ERROR:XSLT:ERR_OK: STARTING</span>
 <span class="go">&lt;string&gt;:0:0:ERROR:XSLT:ERR_OK: DONE</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">transform</span><span class="o">.</span><span class="n">error_log</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'message from line </span><span class="si">%s</span><span class="s1">, col </span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'message from line </span><span class="si">%s</span><span class="s1">, col </span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span>
 <span class="gp">... </span>               <span class="n">entry</span><span class="o">.</span><span class="n">line</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">column</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">message</span><span class="p">))</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'domain: </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%d</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">domain_name</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">domain</span><span class="p">))</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'type: </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%d</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">type_name</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'level: </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%d</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">level_name</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">level</span><span class="p">))</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s1">'filename: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">entry</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'domain: </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%d</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">domain_name</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">domain</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'type: </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%d</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">type_name</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">type</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'level: </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%d</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">level_name</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">level</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">'filename: </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">entry</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
 <span class="go">message from line 0, col 0: STARTING</span>
 <span class="go">domain: XSLT (22)</span>
 <span class="go">type: ERR_OK (0)</span>
@@ -616,7 +622,7 @@ maintainable.</p>
 <h2>Profiling</h2>
 <p>If you want to know how your stylesheet performed, pass the <tt class="docutils literal">profile_run</tt>
 keyword to the transform:</p>
-<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="s2">"/a/b/text()"</span><span class="p">,</span> <span class="n">profile_run</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">result</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="s2">"/a/b/text()"</span><span class="p">,</span> <span class="n">profile_run</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">profile</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">xslt_profile</span>
 </pre></div>
 <p>The value of the <tt class="docutils literal">xslt_profile</tt> property is an ElementTree with profiling
@@ -635,7 +641,7 @@ If you want to free it from memory, just do:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2021-03-21.
+Generated on: 2021-11-02.
 
 </div>
 </body>
diff --git a/doc/licenses/ZopePublicLicense.txt b/doc/licenses/ZopePublicLicense.txt
deleted file mode 100644 (file)
index 44e0648..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-Zope Public License (ZPL) Version 2.0
------------------------------------------------
-
-This software is Copyright (c) Zope Corporation (tm) and
-Contributors. All rights reserved.
-
-This license has been certified as open source. It has also
-been designated as GPL compatible by the Free Software
-Foundation (FSF).
-
-Redistribution and use in source and binary forms, with or
-without modification, are permitted provided that the
-following conditions are met:
-
-1. Redistributions in source code must retain the above
-   copyright notice, this list of conditions, and the following
-   disclaimer.
-
-2. Redistributions in binary form must reproduce the above
-   copyright notice, this list of conditions, and the following
-   disclaimer in the documentation and/or other materials
-   provided with the distribution.
-
-3. The name Zope Corporation (tm) must not be used to
-   endorse or promote products derived from this software
-   without prior written permission from Zope Corporation.
-
-4. The right to distribute this software or to use it for
-   any purpose does not give you the right to use Servicemarks
-   (sm) or Trademarks (tm) of Zope Corporation. Use of them is
-   covered in a separate agreement (see
-   http://www.zope.com/Marks).
-
-5. If any files are modified, you must cause the modified
-   files to carry prominent notices stating that you changed
-   the files and the date of any change.
-
-Disclaimer
-
-  THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS''
-  AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
-  NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
-  NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-  DAMAGE.
-
-
-This software consists of contributions made by Zope
-Corporation and many individuals on behalf of Zope
-Corporation.  Specific attributions are listed in the
-accompanying credits file.
index ead457d6fea8919a6acafdf732b2d40fa6fc6aa3..75fedd5ec7b59128261441f8119115b8b940974b 100644 (file)
@@ -159,8 +159,8 @@ Index <http://pypi.python.org/pypi/lxml/>`_ (PyPI).  It has the source
 that compiles on various platforms.  The source distribution is signed
 with `this key <pubkey.asc>`_.
 
-The latest version is `lxml 4.6.3`_, released 2021-03-21
-(`changes for 4.6.3`_).  `Older versions <#old-versions>`_
+The latest version is `lxml 4.6.4`_, released 2021-11-01
+(`changes for 4.6.4`_).  `Older versions <#old-versions>`_
 are listed below.
 
 Please take a look at the
@@ -256,7 +256,9 @@ See the websites of lxml
 ..
    and the `latest in-development version <http://lxml.de/dev/>`_.
 
-.. _`PDF documentation`: lxmldoc-4.6.3.pdf
+.. _`PDF documentation`: lxmldoc-4.6.4.pdf
+
+* `lxml 4.6.4`_, released 2021-11-01 (`changes for 4.6.4`_)
 
 * `lxml 4.6.3`_, released 2021-03-21 (`changes for 4.6.3`_)
 
@@ -282,6 +284,7 @@ See the websites of lxml
 
 * `older releases <http://lxml.de/4.3/#old-versions>`_
 
+.. _`lxml 4.6.4`: /files/lxml-4.6.4.tgz
 .. _`lxml 4.6.3`: /files/lxml-4.6.3.tgz
 .. _`lxml 4.6.2`: /files/lxml-4.6.2.tgz
 .. _`lxml 4.6.1`: /files/lxml-4.6.1.tgz
@@ -294,6 +297,7 @@ See the websites of lxml
 .. _`lxml 4.4.1`: /files/lxml-4.4.1.tgz
 .. _`lxml 4.4.0`: /files/lxml-4.4.0.tgz
 
+.. _`changes for 4.6.4`: /changes-4.6.4.html
 .. _`changes for 4.6.3`: /changes-4.6.3.html
 .. _`changes for 4.6.2`: /changes-4.6.2.html
 .. _`changes for 4.6.1`: /changes-4.6.1.html
index c65233563dbc02d12f2d120ec78e3270d79fa819..36da5de99ee76432ef41fffdd895ad7eac0e3e80 100644 (file)
@@ -194,7 +194,7 @@ def convert_changelog(lxml_path, changelog_file_path, rst2html_script, styleshee
         out_file.close()
 
 
-def publish(dirname, lxml_path, release):
+def publish(dirname, lxml_path, release, with_donations=True):
     if not os.path.exists(dirname):
         os.mkdir(dirname)
 
@@ -245,7 +245,8 @@ def publish(dirname, lxml_path, release):
     menu = Element("div", {'class': 'sidemenu', 'id': 'sidemenu'})
     SubElement(menu, 'div', {'class': 'menutrigger', 'onclick': 'trigger_menu(event)'}).text = "Menu"
     menu_div = SubElement(menu, 'div', {'class': 'menu'})
-    inject_banner(menu_div)
+    if with_donations:
+        inject_banner(menu_div)
 
     # build HTML pages and parse them back
     for section, text_files in SITE_STRUCTURE:
@@ -266,13 +267,14 @@ def publish(dirname, lxml_path, release):
                 rest2html(script, path, outpath, stylesheet_url)
                 tree = parse(outpath)
 
-                page_div = tree.getroot()[1][0]  # html->body->div[class=document]
-                inject_banner(page_div)
+                if with_donations:
+                    page_div = tree.getroot()[1][0]  # html->body->div[class=document]
+                    inject_banner(page_div)
 
-                if filename == 'main.txt':
-                    # inject donation buttons
-                    #inject_flatter_button(tree)
-                    inject_donate_buttons(lxml_path, script, tree)
+                    if filename == 'main.txt':
+                        # inject donation buttons
+                        #inject_flatter_button(tree)
+                        inject_donate_buttons(lxml_path, script, tree)
 
                 trees[filename] = (tree, basename, outpath)
                 build_menu(tree, basename, section_head)
@@ -324,4 +326,7 @@ def publish(dirname, lxml_path, release):
 
 
 if __name__ == '__main__':
-    publish(sys.argv[1], sys.argv[2], sys.argv[3])
+    no_donations = '--no-donations' in sys.argv[1:]
+    if no_donations:
+        sys.argv.remove('--no-donations')
+    publish(sys.argv[1], sys.argv[2], sys.argv[3], with_donations=not no_donations)
index 4151dc8cbe791ba93d50cba4429a880bc1e2cfdc..2bb73b7cee71c32a12cefd69d0acc46012b55fb4 100644 (file)
@@ -63,6 +63,10 @@ PYGMENTS_IMPORT = r"""
 \input{_part_pygments.tex}
 """
 
+EPYDOC_IMPORT = r"""
+\input{_part_epydoc.tex}
+"""
+
 def write_chapter(master, title, filename):
     filename = os.path.join(os.path.dirname(filename),
                             "_part_%s" % os.path.basename(filename))
@@ -175,7 +179,6 @@ def tex_postprocess(src_path, dest_path, want_header=False, process_line=noop):
         raise Exception("Bueee, no title in %s" % src_path)
     return title, header
 
-
 def publish(dirname, lxml_path, release):
     if not os.path.exists(dirname):
         os.mkdir(dirname)
@@ -250,12 +253,12 @@ def publish(dirname, lxml_path, release):
     # integrate generated API docs
 
     print("Integrating API docs")
-    apidocsname = 'lxml.tex'
-    apipath = os.path.join(dirname, "..", "api", "_build", "latex", apidocsname)
+    apidocsname = 'api.tex'
+    apipath = os.path.join(dirname, apidocsname)
     tex_postprocess(apipath, os.path.join(dirname, "_part_%s" % apidocsname),
                     process_line=fix_relative_hyperrefs)
-    #copy_epydoc_macros(apipath, os.path.join(dirname, '_part_epydoc.tex'),
-    #                   set(header))
+    copy_epydoc_macros(apipath, os.path.join(dirname, '_part_epydoc.tex'),
+                       set(header))
 
     # convert CHANGES.txt
 
@@ -284,9 +287,9 @@ def publish(dirname, lxml_path, release):
     for hln in header:
         if hln.startswith(r"\documentclass"):
             #hln = hln.replace('article', 'book')
-            hln = DOCUMENT_CLASS
+            hln = DOCUMENT_CLASS + EPYDOC_IMPORT
         elif hln.startswith(r"\begin{document}"):
-            # pygments support
+            # pygments and epydoc support
             master.write(PYGMENTS_IMPORT)
         elif hln.startswith(r"\title{"):
             hln = replace_content(
diff --git a/doc/pdf/pubkey.asc b/doc/pdf/pubkey.asc
deleted file mode 100644 (file)
index f72804c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.2 (GNU/Linux)
-
-mQGiBEQf3JQRBACciSqxoX0q3VurkRENVVtG/pVqtFh/d2CohbVJlLCrO4s7nnPj
-CTfZFt6tmykZjsLJl24XpEJt0O/C0jLcaBqvXVgVvRXHz4DjEYYuQF4LPthhI4MA
-4T7ExptX4lU5g3BVJ46vPU8uRBbbxarBRas9rYewgnrYKWpZZCa7yMq+9wCgnyyR
-Si4E3viLwi77jda135nA6vcD/iqu8zIl9/dFuUcOvxJrhrm+UdY72puZ1TVczSAH
-GOqMjrKkfyHlaJh/ZzWENpTZIfOdVhy7Chvva18vH4Wz7jKj5UeIpRrBvjAD28r3
-Y3W5bfsnpPkvDOyU1vqBsw4q+/250GXEX0JqV2Rbf5yLVgEZPdGrswO460dr4UVS
-8RS0BACYTmyrz57AugHc5tRkqNw6o7ux2deOT0c3AbUcOWtOocGumCsUf+M1nOrc
-VWkeBWTv4HIIiecWYY/KwIemTthQGjxywaZDxOlBT0BOL/+vfYTq/plZULXr+g90
-rSe82+kLl9N5onkBDJKeDIcJDzRoxIRPV1i0Om/5JBI4jmUnv7QnU3RlZmFuIEJl
-aG5lbCA8c2NvZGVyQHVzZXJzLmJlcmxpb3MuZGU+iF8EExECACAFAkQiqKYCGwMG
-CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRANPVNpCNOgHi+2AJ0a0JH8iP3RqrOL
-JefvHz1dSl3MxACYo7Ma6CeIgsGnyaSSdNOmNVXn+IhGBBARAgAGBQJEIqk0AAoJ
-ELO5mMzzmgZbmCcAoKZ2En1IlsxBpaPPxgWYrUOWfc6hAKCBWODMMOYptCBkSrjg
-m3gsrjHgYbQsU3RlZmFuIEJlaG5lbCA8c2NvZGVyQHVzZXJzLnNvdXJjZWZvcmdl
-Lm5ldD6IYAQTEQIAIAUCRB/clAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJ
-EA09U2kI06Aen2YAn0hvuDs+Gslq9vPRFFbsFNJI40PmAJ0chjiiEy0xV5C+n6YX
-XFuldRDILYhGBBARAgAGBQJEIp4AAAoJELO5mMzzmgZbgKQAn3pWrmFdj8YaEyuR
-tEjKVZJDQ6ZVAJ0Y1igwADT40BPra+G/xiLa3YbCrrkCDQREH9ynEAgAiR4/0r0d
-doViNECfSLClllu5K0Bo1SEiMtvVNC3sJYgVzBddD8Xn8UAdjyAgmaL5FC2FsNQu
-RxxKkNlHNYCq8ZSWtZaL2MQ+SyMUyHv6VXVCGuSW0COpzbx58u+SZpjyESJ1kaZc
-73SaIw6kv/dVQHjurwmlo1lg3dLZ3PG08WGCYUMqkkv2K+J7+puzE2Cjo31gTq4s
-LYDCV26wjVQ6BqT2EcHQhVEjh0xq5ugc908cr/2FQAKkTifEbF+OVBGWiFMGgri+
-6+G54/BV/RakpvNCFYBiZHn/M9mQaWt7XoTmnEQ1ldq5KNlRhkqnQRF/NK5VpGcQ
-29As28aqpZTECwADBgf/WlRvBRI1Q1eIv2falEv7C6sOxqc3kr5z1uUBTRG5v9t6
-ff9k/J4oC6cnQx00GK3ZR8ija6bl8zwu+0m0M3rW49Krb1rsiT7r4ahOZ7p9RRro
-oG3NbUJYgMG10D1nxpaioYqa/m+PpILJM0wfYZZEuX0xkZcOB24yb+J7EIcGR09T
-mMd5sXtdTU+w/p7Xi2cP61uQ8qixyHBH8E06qgW2JtVFV9rGn7CNUOvkNaUBRnY5
-QxhdkvKJRx7voOLYWZFUBIWgto+6vmTgKmc2Ho6qddzME9UgwUNcknRgm0cf6Cxr
-6zPtxZl8a6KemjQcK7kARSmMNCDkqp/Pohe519A5vYhJBBgRAgAJBQJEH9ynAhsM
-AAoJEA09U2kI06Aesv4AnjiVQVLzqnNS/64vvMMP1UARY3HtAJ90YxNGhRNIhWYL
-UU16oJlGD/9M1Q==
-=gWy2
------END PGP PUBLIC KEY BLOCK-----
index 1a0c9ad6bb6ec1bb3cf64e794c556700dbd43bf6..c6f2edb428480ff96f9f28ba6424bab8a7eea4dd 100644 (file)
@@ -88,18 +88,11 @@ very easy to add as tiny test methods, so if you write a performance test for
 a specific part of the API yourself, please consider sending it to the lxml
 mailing list.
 
-The timings presented below compare lxml 3.1.1 (with libxml2 2.9.0) to the
+The timings presented below compare lxml 4.6.3 (with libxml2 2.9.10) to the
 latest released versions of ElementTree (with cElementTree as accelerator
-module) in the standard library of CPython 3.3.0.  They were run
-single-threaded on a 2.9GHz 64bit double core Intel i7 machine under
-Ubuntu Linux 12.10 (Quantal).  The C libraries were compiled with the
-same platform specific optimisation flags.  The Python interpreter was
-also manually compiled for the platform.  Note that many of the following
-ElementTree timings are therefore better than what a normal Python
-installation with the standard library (c)ElementTree modules would yield.
-Note also that CPython 2.7 and 3.2+ come with a newer ElementTree version,
-so older Python installations will not perform as good for (c)ElementTree,
-and sometimes substantially worse.
+module) in the standard library of CPython 3.8.10.  They were run
+single-threaded on a 2.3GHz 64bit double core Intel i5 machine under
+Ubuntu Linux 20.04 (Focal).
 
 .. _`bench_etree.py`:     https://github.com/lxml/lxml/blob/master/benchmark/bench_etree.py
 .. _`bench_xpath.py`:     https://github.com/lxml/lxml/blob/master/benchmark/bench_xpath.py
@@ -141,50 +134,50 @@ is native to libxml2.  While 20 to 40 times faster than (c)ElementTree
 lxml is still more than 10 times as fast as the much improved
 ElementTree 1.3 in recent Python versions::
 
-  lxe: tostring_utf16  (S-TR T1)    7.9958 msec/pass
-  cET: tostring_utf16  (S-TR T1)   83.1358 msec/pass
+  lxe: tostring_utf16  (S-TR T1)    5.9340 msec/pass
+  cET: tostring_utf16  (S-TR T1)   38.3270 msec/pass
 
-  lxe: tostring_utf16  (UATR T1)    8.3222 msec/pass
-  cET: tostring_utf16  (UATR T1)   84.4688 msec/pass
+  lxe: tostring_utf16  (UATR T1)    6.2032 msec/pass
+  cET: tostring_utf16  (UATR T1)   37.7944 msec/pass
 
-  lxe: tostring_utf16  (S-TR T2)    8.2297 msec/pass
-  cET: tostring_utf16  (S-TR T2)   87.3415 msec/pass
+  lxe: tostring_utf16  (S-TR T2)    6.1841 msec/pass
+  cET: tostring_utf16  (S-TR T2)   40.2577 msec/pass
 
-  lxe: tostring_utf8   (S-TR T2)    6.5677 msec/pass
-  cET: tostring_utf8   (S-TR T2)   76.2064 msec/pass
+  lxe: tostring_utf8   (S-TR T2)    4.6697 msec/pass
+  cET: tostring_utf8   (S-TR T2)   30.5173 msec/pass
 
-  lxe: tostring_utf8   (U-TR T3)    1.1952 msec/pass
-  cET: tostring_utf8   (U-TR T3)   22.0058 msec/pass
+  lxe: tostring_utf8   (U-TR T3)    1.2085 msec/pass
+  cET: tostring_utf8   (U-TR T3)   9.0246 msec/pass
 
 The difference is somewhat smaller for plain text serialisation::
 
-  lxe: tostring_text_ascii     (S-TR T1)    2.7738 msec/pass
-  cET: tostring_text_ascii     (S-TR T1)    4.7629 msec/pass
+  lxe: tostring_text_ascii     (S-TR T1)    2.6727 msec/pass
+  cET: tostring_text_ascii     (S-TR T1)    2.9683 msec/pass
 
-  lxe: tostring_text_ascii     (S-TR T3)    0.8273 msec/pass
-  cET: tostring_text_ascii     (S-TR T3)    1.5273 msec/pass
+  lxe: tostring_text_ascii     (S-TR T3)    0.6952 msec/pass
+  cET: tostring_text_ascii     (S-TR T3)    1.0073 msec/pass
 
-  lxe: tostring_text_utf16     (S-TR T1)    2.7659 msec/pass
-  cET: tostring_text_utf16     (S-TR T1)   10.5038 msec/pass
+  lxe: tostring_text_utf16     (S-TR T1)    2.7366 msec/pass
+  cET: tostring_text_utf16     (S-TR T1)   7.3647 msec/pass
 
-  lxe: tostring_text_utf16     (U-TR T1)    2.8017 msec/pass
-  cET: tostring_text_utf16     (U-TR T1)   10.5207 msec/pass
+  lxe: tostring_text_utf16     (U-TR T1)    3.0322 msec/pass
+  cET: tostring_text_utf16     (U-TR T1)   7.5922 msec/pass
 
 The ``tostring()`` function also supports serialisation to a Python
 unicode string object, which is currently faster in ElementTree
-under CPython 3.3::
+under CPython 3.8::
 
-  lxe: tostring_text_unicode   (S-TR T1)    2.6896 msec/pass
-  cET: tostring_text_unicode   (S-TR T1)    1.0056 msec/pass
+  lxe: tostring_text_unicode   (S-TR T1)    2.7645 msec/pass
+  cET: tostring_text_unicode   (S-TR T1)    1.1806 msec/pass
 
-  lxe: tostring_text_unicode   (U-TR T1)    2.7366 msec/pass
-  cET: tostring_text_unicode   (U-TR T1)    1.0154 msec/pass
+  lxe: tostring_text_unicode   (U-TR T1)    2.9871 msec/pass
+  cET: tostring_text_unicode   (U-TR T1)    1.1659 msec/pass
 
-  lxe: tostring_text_unicode   (S-TR T3)    0.7997 msec/pass
-  cET: tostring_text_unicode   (S-TR T3)    0.3154 msec/pass
+  lxe: tostring_text_unicode   (S-TR T3)    0.7446 msec/pass
+  cET: tostring_text_unicode   (S-TR T3)    0.4532 msec/pass
 
   lxe: tostring_text_unicode   (U-TR T4)    0.0048 msec/pass
-  cET: tostring_text_unicode   (U-TR T4)    0.0160 msec/pass
+  cET: tostring_text_unicode   (U-TR T4)    0.0134 msec/pass
 
 For parsing, lxml.etree and cElementTree compete for the medal.
 Depending on the input, either of the two can be faster.  The (c)ET
@@ -192,37 +185,37 @@ libraries use a very thin layer on top of the expat parser, which is
 known to be very fast.  Here are some timings from the benchmarking
 suite::
 
-  lxe: parse_bytesIO   (SAXR T1)   13.0246 msec/pass
-  cET: parse_bytesIO   (SAXR T1)    8.2929 msec/pass
+  lxe: parse_bytesIO   (SAXR T1)   14.2074 msec/pass
+  cET: parse_bytesIO   (SAXR T1)    7.9336 msec/pass
 
-  lxe: parse_bytesIO   (S-XR T3)    1.3542 msec/pass
-  cET: parse_bytesIO   (S-XR T3)    2.4023 msec/pass
+  lxe: parse_bytesIO   (S-XR T3)    1.4477 msec/pass
+  cET: parse_bytesIO   (S-XR T3)    2.1925 msec/pass
 
-  lxe: parse_bytesIO   (UAXR T3)    7.5610 msec/pass
-  cET: parse_bytesIO   (UAXR T3)   11.2455 msec/pass
+  lxe: parse_bytesIO   (UAXR T3)    8.4128 msec/pass
+  cET: parse_bytesIO   (UAXR T3)   12.2926 msec/pass
 
 And another couple of timings `from a benchmark`_ that Fredrik Lundh
 `used to promote cElementTree`_, comparing a number of different
 parsers.  First, parsing a 274KB XML file containing Shakespeare's
 Hamlet::
 
-  xml.etree.ElementTree.parse done in 0.017 seconds
+  xml.etree.ElementTree.parse done in 0.006 seconds
   xml.etree.cElementTree.parse done in 0.007 seconds
-  xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.007 seconds
-  lxml.etree.parse done in 0.003 seconds
-  drop_whitespace.parse done in 0.003 seconds
+  xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.006 seconds
+  lxml.etree.parse done in 0.004 seconds
+  drop_whitespace.parse done in 0.004 seconds
   lxml.etree.XMLParser.feed(): 6636 nodes read in 0.004 seconds
-  minidom tree read in 0.080 seconds
+  minidom tree read in 0.066 seconds
 
 And a 3.4MB XML file containing the Old Testament::
 
-  xml.etree.ElementTree.parse done in 0.038 seconds
-  xml.etree.cElementTree.parse done in 0.030 seconds
-  xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.030 seconds
-  lxml.etree.parse done in 0.016 seconds
-  drop_whitespace.parse done in 0.015 seconds
-  lxml.etree.XMLParser.feed(): 25317 nodes read in 0.022 seconds
-  minidom tree read in 0.288 seconds
+  xml.etree.ElementTree.parse done in 0.037 seconds
+  xml.etree.cElementTree.parse done in 0.036 seconds
+  xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.036 seconds
+  lxml.etree.parse done in 0.025 seconds
+  drop_whitespace.parse done in 0.022 seconds
+  lxml.etree.XMLParser.feed(): 25317 nodes read in 0.026 seconds
+  minidom tree read in 0.194 seconds
 
 .. _`from a benchmark`: http://svn.effbot.org/public/elementtree-1.3/benchmark.py
 .. _`used to promote cElementTree`: http://effbot.org/zone/celementtree.htm#benchmarks
@@ -232,43 +225,42 @@ of the process in KB before and after parsing (using os.fork() to
 make sure we start from a clean state each time).  For the 274KB
 hamlet.xml file::
 
-  Memory usage: 7284
-  xml.etree.ElementTree.parse done in 0.017 seconds
-  Memory usage: 9432 (+2148)
+  Memory usage: 9256
+  xml.etree.ElementTree.parse done in 0.006 seconds
+  Memory usage: 12764 (+3508)
   xml.etree.cElementTree.parse done in 0.007 seconds
-  Memory usage: 9432 (+2152)
-  xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.007 seconds
-  Memory usage: 9448 (+2164)
-  lxml.etree.parse done in 0.003 seconds
-  Memory usage: 11032 (+3748)
-  drop_whitespace.parse done in 0.003 seconds
-  Memory usage: 10224 (+2940)
+  Memory usage: 12764 (+3508)
+  xml.etree.cElementTree.XMLParser.feed(): 6636 nodes read in 0.006 seconds
+  Memory usage: 12720 (+3464)
+  lxml.etree.parse done in 0.004 seconds
+  Memory usage: 15052 (+5796)
+  drop_whitespace.parse done in 0.004 seconds
+  Memory usage: 14040 (+4784)
   lxml.etree.XMLParser.feed(): 6636 nodes read in 0.004 seconds
-  Memory usage: 11804 (+4520)
-  minidom tree read in 0.080 seconds
-  Memory usage: 12324 (+5040)
+  Memory usage: 15812 (+6556)
+  minidom tree read in 0.066 seconds
+  Memory usage: 15332 (+6076)
 
 And for the 3.4MB Old Testament XML file::
 
-  Memory usage: 10420
-  xml.etree.ElementTree.parse done in 0.038 seconds
-  Memory usage: 20660 (+10240)
-  xml.etree.cElementTree.parse done in 0.030 seconds
-  Memory usage: 20660 (+10240)
-  xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.030 seconds
-  Memory usage: 20844 (+10424)
-  lxml.etree.parse done in 0.016 seconds
-  Memory usage: 27624 (+17204)
-  drop_whitespace.parse done in 0.015 seconds
-  Memory usage: 24468 (+14052)
-  lxml.etree.XMLParser.feed(): 25317 nodes read in 0.022 seconds
-  Memory usage: 29844 (+19424)
-  minidom tree read in 0.288 seconds
-  Memory usage: 28788 (+18368)
+  Memory usage: 12456
+  xml.etree.ElementTree.parse done in 0.037 seconds
+  Memory usage: 23288 (+10832)
+  xml.etree.cElementTree.parse done in 0.036 seconds
+  Memory usage: 23288 (+10832)
+  xml.etree.cElementTree.XMLParser.feed(): 25317 nodes read in 0.036 seconds
+  Memory usage: 23644 (+11220)
+  lxml.etree.parse done in 0.025 seconds
+  Memory usage: 31404 (+18948)
+  drop_whitespace.parse done in 0.022 seconds
+  Memory usage: 28752 (+16296)
+  lxml.etree.XMLParser.feed(): 25317 nodes read in 0.026 seconds
+  Memory usage: 33924 (+21500)
+  minidom tree read in 0.194 seconds
+  Memory usage: 31284 (+18828)
 
 As can be seen from the sizes, both lxml.etree and cElementTree are
-rather memory friendly compared to the pure Python libraries
-ElementTree and (especially) minidom.  Comparing to older CPython
+rather memory friendly and fast.  Comparing to older CPython
 versions, the memory footprint of the minidom library was considerably
 reduced in CPython 3.3, by about a factor of 4 in this case.
 
@@ -277,26 +269,26 @@ rather close to each other, usually within a factor of two, with
 winners well distributed over both sides.  Similar timings can be
 observed for the ``iterparse()`` function::
 
-  lxe: iterparse_bytesIO   (SAXR T1)   17.9198 msec/pass
-  cET: iterparse_bytesIO   (SAXR T1)   14.4982 msec/pass
+  lxe: iterparse_bytesIO   (SAXR T1)   20.3598 msec/pass
+  cET: iterparse_bytesIO   (SAXR T1)   10.8948 msec/pass
 
-  lxe: iterparse_bytesIO   (UAXR T3)    8.8522 msec/pass
-  cET: iterparse_bytesIO   (UAXR T3)   12.9857 msec/pass
+  lxe: iterparse_bytesIO   (UAXR T3)    10.1640 msec/pass
+  cET: iterparse_bytesIO   (UAXR T3)   12.9926 msec/pass
 
 However, if you benchmark the complete round-trip of a serialise-parse
 cycle, the numbers will look similar to these::
 
-  lxe: write_utf8_parse_bytesIO   (S-TR T1)   19.8867 msec/pass
-  cET: write_utf8_parse_bytesIO   (S-TR T1)   80.7259 msec/pass
+  lxe: write_utf8_parse_bytesIO   (S-TR T1)   18.9857 msec/pass
+  cET: write_utf8_parse_bytesIO   (S-TR T1)   35.7475 msec/pass
 
-  lxe: write_utf8_parse_bytesIO   (UATR T2)   23.7896 msec/pass
-  cET: write_utf8_parse_bytesIO   (UATR T2)   98.0766 msec/pass
+  lxe: write_utf8_parse_bytesIO   (UATR T2)   22.4853 msec/pass
+  cET: write_utf8_parse_bytesIO   (UATR T2)   42.6254 msec/pass
 
-  lxe: write_utf8_parse_bytesIO   (S-TR T3)    3.0684 msec/pass
-  cET: write_utf8_parse_bytesIO   (S-TR T3)   24.6122 msec/pass
+  lxe: write_utf8_parse_bytesIO   (S-TR T3)    3.3801 msec/pass
+  cET: write_utf8_parse_bytesIO   (S-TR T3)   11.2493 msec/pass
 
-  lxe: write_utf8_parse_bytesIO   (SATR T4)    0.3495 msec/pass
-  cET: write_utf8_parse_bytesIO   (SATR T4)    1.9610 msec/pass
+  lxe: write_utf8_parse_bytesIO   (SATR T4)    0.4263 msec/pass
+  cET: write_utf8_parse_bytesIO   (SATR T4)    1.0326 msec/pass
 
 For applications that require a high parser throughput of large files,
 and that do little to no serialization, both cET and lxml.etree are a
@@ -352,14 +344,14 @@ restructuring.  This can be seen from the tree setup times of the
 benchmark (given in seconds)::
 
   lxe:       --     S-     U-     -A     SA     UA
-       T1: 0.0299 0.0343 0.0344 0.0293 0.0345 0.0342
-       T2: 0.0368 0.0423 0.0418 0.0427 0.0474 0.0459
-       T3: 0.0088 0.0084 0.0086 0.0251 0.0258 0.0261
-       T4: 0.0002 0.0002 0.0002 0.0005 0.0006 0.0006
+       T1: 0.0219 0.0254 0.0257 0.0216 0.0259 0.0259
+       T2: 0.0234 0.0279 0.0283 0.0271 0.0318 0.0307
+       T3: 0.0051 0.0050 0.0058 0.0218 0.0233 0.0231
+       T4: 0.0001 0.0001 0.0001 0.0004 0.0004 0.0004
   cET:       --     S-     U-     -A     SA     UA
-       T1: 0.0050 0.0045 0.0093 0.0044 0.0043 0.0043
-       T2: 0.0073 0.0075 0.0074 0.0201 0.0075 0.0074
-       T3: 0.0033 0.0213 0.0032 0.0034 0.0033 0.0035
+       T1: 0.0035 0.0029 0.0078 0.0031 0.0031 0.0029
+       T2: 0.0047 0.0051 0.0053 0.0046 0.0055 0.0048
+       T3: 0.0016 0.0216 0.0027 0.0021 0.0023 0.0026
        T4: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
 
 The timings are somewhat close to each other, although cET can be
@@ -379,30 +371,30 @@ The same tree overhead makes operations like collecting children as in
 a shallow copy of their list of children, lxml has to create a Python
 object for each child and collect them in a list::
 
-  lxe: root_list_children        (--TR T1)    0.0038 msec/pass
-  cET: root_list_children        (--TR T1)    0.0010 msec/pass
+  lxe: root_list_children        (--TR T1)    0.0036 msec/pass
+  cET: root_list_children        (--TR T1)    0.0005 msec/pass
 
-  lxe: root_list_children        (--TR T2)    0.0455 msec/pass
-  cET: root_list_children        (--TR T2)    0.0050 msec/pass
+  lxe: root_list_children        (--TR T2)    0.0634 msec/pass
+  cET: root_list_children        (--TR T2)    0.0086 msec/pass
 
 This handicap is also visible when accessing single children::
 
-  lxe: first_child               (--TR T2)    0.0424 msec/pass
-  cET: first_child               (--TR T2)    0.0384 msec/pass
+  lxe: first_child               (--TR T2)    0.0601 msec/pass
+  cET: first_child               (--TR T2)    0.0548 msec/pass
 
-  lxe: last_child                (--TR T1)    0.0477 msec/pass
-  cET: last_child                (--TR T1)    0.0467 msec/pass
+  lxe: last_child                (--TR T1)    0.0570 msec/pass
+  cET: last_child                (--TR T1)    0.0534 msec/pass
 
 ... unless you also add the time to find a child index in a bigger
 list.  ET and cET use Python lists here, which are based on arrays.
 The data structure used by libxml2 is a linked tree, and thus, a
 linked list of children::
 
-  lxe: middle_child              (--TR T1)    0.0710 msec/pass
-  cET: middle_child              (--TR T1)    0.0420 msec/pass
+  lxe: middle_child              (--TR T1)    0.0892 msec/pass
+  cET: middle_child              (--TR T1)    0.0510 msec/pass
 
-  lxe: middle_child              (--TR T2)    1.7393 msec/pass
-  cET: middle_child              (--TR T2)    0.0396 msec/pass
+  lxe: middle_child              (--TR T2)    2.3038 msec/pass
+  cET: middle_child              (--TR T2)    0.0508 msec/pass
 
 
 Element creation
@@ -412,18 +404,18 @@ As opposed to ET, libxml2 has a notion of documents that each element must be
 in.  This results in a major performance difference for creating independent
 Elements that end up in independently created documents::
 
-  lxe: create_elements           (--TC T2)    1.0045 msec/pass
-  cET: create_elements           (--TC T2)    0.0753 msec/pass
+  lxe: create_elements           (--TC T2)    0.8032 msec/pass
+  cET: create_elements           (--TC T2)    0.0675 msec/pass
 
 Therefore, it is always preferable to create Elements for the document they
 are supposed to end up in, either as SubElements of an Element or using the
 explicit ``Element.makeelement()`` call::
 
-  lxe: makeelement               (--TC T2)    1.0586 msec/pass
-  cET: makeelement               (--TC T2)    0.1483 msec/pass
+  lxe: makeelement               (--TC T2)    0.8030 msec/pass
+  cET: makeelement               (--TC T2)    0.0625 msec/pass
 
-  lxe: create_subelements        (--TC T2)    0.8826 msec/pass
-  cET: create_subelements        (--TC T2)    0.0827 msec/pass
+  lxe: create_subelements        (--TC T2)    0.8621 msec/pass
+  cET: create_subelements        (--TC T2)    0.0923 msec/pass
 
 So, if the main performance bottleneck of an application is creating large XML
 trees in memory through calls to Element and SubElement, cET is the best
@@ -440,11 +432,11 @@ requires lxml to do recursive adaptations throughout the moved tree structure.
 The following benchmark appends all root children of the second tree to the
 root of the first tree::
 
-  lxe: append_from_document      (--TR T1,T2)    1.0812 msec/pass
-  cET: append_from_document      (--TR T1,T2)    0.1104 msec/pass
+  lxe: append_from_document      (--TR T1,T2)    1.3800 msec/pass
+  cET: append_from_document      (--TR T1,T2)    0.0513 msec/pass
 
-  lxe: append_from_document      (--TR T3,T4)    0.0155 msec/pass
-  cET: append_from_document      (--TR T3,T4)    0.0060 msec/pass
+  lxe: append_from_document      (--TR T3,T4)    0.0150 msec/pass
+  cET: append_from_document      (--TR T3,T4)    0.0026 msec/pass
 
 Although these are fairly small numbers compared to parsing, this easily shows
 the different performance classes for lxml and (c)ET.  Where the latter do not
@@ -455,19 +447,19 @@ with the size of the tree that is moved.
 This difference is not always as visible, but applies to most parts of the
 API, like inserting newly created elements::
 
-  lxe: insert_from_document         (--TR T1,T2)    3.9763 msec/pass
-  cET: insert_from_document         (--TR T1,T2)    0.1459 msec/pass
+  lxe: insert_from_document         (--TR T1,T2)    5.2345 msec/pass
+  cET: insert_from_document         (--TR T1,T2)    0.0732 msec/pass
 
 or replacing the child slice by a newly created element::
 
-  lxe: replace_children_element   (--TC T1)    0.0749 msec/pass
-  cET: replace_children_element   (--TC T1)    0.0081 msec/pass
+  lxe: replace_children_element   (--TC T1)    0.0720 msec/pass
+  cET: replace_children_element   (--TC T1)    0.0105 msec/pass
 
 as opposed to replacing the slice with an existing element from the
 same document::
 
-  lxe: replace_children           (--TC T1)    0.0052 msec/pass
-  cET: replace_children           (--TC T1)    0.0036 msec/pass
+  lxe: replace_children           (--TC T1)    0.0060 msec/pass
+  cET: replace_children           (--TC T1)    0.0050 msec/pass
 
 While these numbers are too small to provide a major performance
 impact in practice, you should keep this difference in mind when you
@@ -481,14 +473,14 @@ deepcopy
 
 Deep copying a tree is fast in lxml::
 
-  lxe: deepcopy_all              (--TR T1)    3.1650 msec/pass
-  cET: deepcopy_all              (--TR T1)   53.9973 msec/pass
+  lxe: deepcopy_all              (--TR T1)    4.1246 msec/pass
+  cET: deepcopy_all              (--TR T1)   2.5451 msec/pass
 
-  lxe: deepcopy_all              (-ATR T2)    3.7365 msec/pass
-  cET: deepcopy_all              (-ATR T2)   61.6267 msec/pass
+  lxe: deepcopy_all              (-ATR T2)    4.7867 msec/pass
+  cET: deepcopy_all              (-ATR T2)   2.7504 msec/pass
 
-  lxe: deepcopy_all              (S-TR T3)    0.7913 msec/pass
-  cET: deepcopy_all              (S-TR T3)   13.6220 msec/pass
+  lxe: deepcopy_all              (S-TR T3)    1.0097 msec/pass
+  cET: deepcopy_all              (S-TR T3)   0.6278 msec/pass
 
 So, for example, if you have a database-like scenario where you parse in a
 large tree and then search and copy independent subtrees from it for further
@@ -504,31 +496,31 @@ traversal of the XML tree and especially if few elements are of
 interest or the target element tag name is known, the ``.iter()``
 method is a good choice::
 
-  lxe: iter_all             (--TR T1)    1.0529 msec/pass
-  cET: iter_all             (--TR T1)    0.2635 msec/pass
+  lxe: iter_all             (--TR T1)    1.3661 msec/pass
+  cET: iter_all             (--TR T1)    0.2670 msec/pass
 
-  lxe: iter_islice          (--TR T2)    0.0110 msec/pass
-  cET: iter_islice          (--TR T2)    0.0050 msec/pass
+  lxe: iter_islice          (--TR T2)    0.0122 msec/pass
+  cET: iter_islice          (--TR T2)    0.0033 msec/pass
 
-  lxe: iter_tag             (--TR T2)    0.0079 msec/pass
-  cET: iter_tag             (--TR T2)    0.0112 msec/pass
+  lxe: iter_tag             (--TR T2)    0.0098 msec/pass
+  cET: iter_tag             (--TR T2)    0.0086 msec/pass
 
-  lxe: iter_tag_all         (--TR T2)    0.1822 msec/pass
-  cET: iter_tag_all         (--TR T2)    0.5343 msec/pass
+  lxe: iter_tag_all         (--TR T2)    0.6840 msec/pass
+  cET: iter_tag_all         (--TR T2)    0.4323 msec/pass
 
 This translates directly into similar timings for ``Element.findall()``::
 
-  lxe: findall              (--TR T2)    1.7176 msec/pass
-  cET: findall              (--TR T2)    0.9973 msec/pass
+  lxe: findall              (--TR T2)    3.9611 msec/pass
+  cET: findall              (--TR T2)    0.9227 msec/pass
 
-  lxe: findall              (--TR T3)    0.3967 msec/pass
-  cET: findall              (--TR T3)    0.2525 msec/pass
+  lxe: findall              (--TR T3)    0.3989 msec/pass
+  cET: findall              (--TR T3)    0.2670 msec/pass
 
-  lxe: findall_tag          (--TR T2)    0.2258 msec/pass
-  cET: findall_tag          (--TR T2)    0.5770 msec/pass
+  lxe: findall_tag          (--TR T2)    0.7420 msec/pass
+  cET: findall_tag          (--TR T2)    0.4942 msec/pass
 
-  lxe: findall_tag          (--TR T3)    0.1085 msec/pass
-  cET: findall_tag          (--TR T3)    0.1919 msec/pass
+  lxe: findall_tag          (--TR T3)    0.1099 msec/pass
+  cET: findall_tag          (--TR T3)    0.1748 msec/pass
 
 Note that all three libraries currently use the same Python
 implementation for ``.findall()``, except for their native tree
@@ -548,38 +540,38 @@ provides more than one way of accessing it and you should take care which part
 of the lxml API you use.  The most straight forward way is to call the
 ``xpath()`` method on an Element or ElementTree::
 
-  lxe: xpath_method         (--TC T1)    0.3982 msec/pass
-  lxe: xpath_method         (--TC T2)    7.8895 msec/pass
-  lxe: xpath_method         (--TC T3)    0.0477 msec/pass
-  lxe: xpath_method         (--TC T4)    0.3982 msec/pass
+  lxe: xpath_method         (--TC T1)    0.2828 msec/pass
+  lxe: xpath_method         (--TC T2)    5.4705 msec/pass
+  lxe: xpath_method         (--TC T3)    0.0324 msec/pass
+  lxe: xpath_method         (--TC T4)    0.2804 msec/pass
 
 This is well suited for testing and when the XPath expressions are as diverse
 as the trees they are called on.  However, if you have a single XPath
 expression that you want to apply to a larger number of different elements,
 the ``XPath`` class is the most efficient way to do it::
 
-  lxe: xpath_class          (--TC T1)    0.0713 msec/pass
-  lxe: xpath_class          (--TC T2)    1.1325 msec/pass
-  lxe: xpath_class          (--TC T3)    0.0215 msec/pass
-  lxe: xpath_class          (--TC T4)    0.0722 msec/pass
+  lxe: xpath_class          (--TC T1)    0.0570 msec/pass
+  lxe: xpath_class          (--TC T2)    0.6924 msec/pass
+  lxe: xpath_class          (--TC T3)    0.0148 msec/pass
+  lxe: xpath_class          (--TC T4)    0.0446 msec/pass
 
 Note that this still allows you to use variables in the expression, so you can
 parse it once and then adapt it through variables at call time.  In other
 cases, where you have a fixed Element or ElementTree and want to run different
 expressions on it, you should consider the ``XPathEvaluator``::
 
-  lxe: xpath_element        (--TR T1)    0.1101 msec/pass
-  lxe: xpath_element        (--TR T2)    2.0473 msec/pass
-  lxe: xpath_element        (--TR T3)    0.0267 msec/pass
-  lxe: xpath_element        (--TR T4)    0.1087 msec/pass
+  lxe: xpath_element        (--TR T1)    0.0684 msec/pass
+  lxe: xpath_element        (--TR T2)    1.0865 msec/pass
+  lxe: xpath_element        (--TR T3)    0.0174 msec/pass
+  lxe: xpath_element        (--TR T4)    0.0665 msec/pass
 
 While it looks slightly slower, creating an XPath object for each of the
 expressions generates a much higher overhead here::
 
-  lxe: xpath_class_repeat           (--TC T1   )    0.3884 msec/pass
-  lxe: xpath_class_repeat           (--TC T2   )    7.6182 msec/pass
-  lxe: xpath_class_repeat           (--TC T3   )    0.0465 msec/pass
-  lxe: xpath_class_repeat           (--TC T4   )    0.3877 msec/pass
+  lxe: xpath_class_repeat           (--TC T1   )    0.2813 msec/pass
+  lxe: xpath_class_repeat           (--TC T2   )    5.4042 msec/pass
+  lxe: xpath_class_repeat           (--TC T3   )    0.0339 msec/pass
+  lxe: xpath_class_repeat           (--TC T4   )    0.2706 msec/pass
 
 Note that tree iteration can be substantially faster than XPath if
 your code short-circuits after the first couple of elements were
@@ -589,25 +581,25 @@ regardless of how much of it will actually be used.
 Here is an example where only the first matching element is being
 searched, a case for which XPath has syntax support as well::
 
-  lxe: find_single                (--TR T2)    0.0184 msec/pass
-  cET: find_single                (--TR T2)    0.0052 msec/pass
+  lxe: find_single                (--TR T2)    0.0031 msec/pass
+  cET: find_single                (--TR T2)    0.0026 msec/pass
 
-  lxe: iter_single                (--TR T2)    0.0024 msec/pass
-  cET: iter_single                (--TR T2)    0.0007 msec/pass
+  lxe: iter_single                (--TR T2)    0.0019 msec/pass
+  cET: iter_single                (--TR T2)    0.0002 msec/pass
 
-  lxe: xpath_single               (--TR T2)    0.0033 msec/pass
+  lxe: xpath_single               (--TR T2)    0.0861 msec/pass
 
 When looking for the first two elements out of many, the numbers
 explode for XPath, as restricting the result subset requires a
 more complex expression::
 
-  lxe: iterfind_two               (--TR T2)    0.0184 msec/pass
-  cET: iterfind_two               (--TR T2)    0.0062 msec/pass
+  lxe: iterfind_two               (--TR T2)    0.0050 msec/pass
+  cET: iterfind_two               (--TR T2)    0.0036 msec/pass
 
-  lxe: iter_two                   (--TR T2)    0.0029 msec/pass
-  cET: iter_two                   (--TR T2)    0.0017 msec/pass
+  lxe: iter_two                   (--TR T2)    0.0021 msec/pass
+  cET: iter_two                   (--TR T2)    0.0014 msec/pass
 
-  lxe: xpath_two                  (--TR T2)    0.2768 msec/pass
+  lxe: xpath_two                  (--TR T2)    0.0916 msec/pass
 
 
 A longer example
@@ -774,21 +766,21 @@ ObjectPath can be used to speed up the access to elements that are deep in the
 tree.  It avoids step-by-step Python element instantiations along the path,
 which can substantially improve the access time::
 
-  lxe: attribute                  (--TR T1)    4.1828 msec/pass
-  lxe: attribute                  (--TR T2)   17.3802 msec/pass
-  lxe: attribute                  (--TR T4)    3.8657 msec/pass
+  lxe: attribute                  (--TR T1)    2.4018 msec/pass
+  lxe: attribute                  (--TR T2)   16.3755 msec/pass
+  lxe: attribute                  (--TR T4)    2.3725 msec/pass
 
-  lxe: objectpath                 (--TR T1)    0.9289 msec/pass
-  lxe: objectpath                 (--TR T2)   13.3109 msec/pass
-  lxe: objectpath                 (--TR T4)    0.9289 msec/pass
+  lxe: objectpath                 (--TR T1)    1.1816 msec/pass
+  lxe: objectpath                 (--TR T2)   14.4675 msec/pass
+  lxe: objectpath                 (--TR T4)    1.2276 msec/pass
 
-  lxe: attributes_deep            (--TR T1)    6.2900 msec/pass
-  lxe: attributes_deep            (--TR T2)   20.4713 msec/pass
-  lxe: attributes_deep            (--TR T4)    6.1679 msec/pass
+  lxe: attributes_deep            (--TR T1)    3.7086 msec/pass
+  lxe: attributes_deep            (--TR T2)   17.5436 msec/pass
+  lxe: attributes_deep            (--TR T4)    3.8407 msec/pass
 
-  lxe: objectpath_deep            (--TR T1)    1.3049 msec/pass
-  lxe: objectpath_deep            (--TR T2)   14.0815 msec/pass
-  lxe: objectpath_deep            (--TR T4)    1.3051 msec/pass
+  lxe: objectpath_deep            (--TR T1)    1.4980 msec/pass
+  lxe: objectpath_deep            (--TR T2)   14.7266 msec/pass
+  lxe: objectpath_deep            (--TR T4)    1.4834 msec/pass
 
 Note, however, that parsing ObjectPath expressions is not for free either, so
 this is most effective for frequently accessing the same element.
@@ -818,17 +810,17 @@ expressions to be more selective.  By choosing the right trees (or even
 subtrees and elements) to cache, you can trade memory usage against access
 speed::
 
-  lxe: attribute_cached           (--TR T1)    3.1357 msec/pass
-  lxe: attribute_cached           (--TR T2)   15.8911 msec/pass
-  lxe: attribute_cached           (--TR T4)    2.9194 msec/pass
+  lxe: attribute_cached           (--TR T1)    1.9207 msec/pass
+  lxe: attribute_cached           (--TR T2)   15.6903 msec/pass
+  lxe: attribute_cached           (--TR T4)    1.8718 msec/pass
 
-  lxe: attributes_deep_cached     (--TR T1)    3.8984 msec/pass
-  lxe: attributes_deep_cached     (--TR T2)   16.8300 msec/pass
-  lxe: attributes_deep_cached     (--TR T4)    3.6936 msec/pass
+  lxe: attributes_deep_cached     (--TR T1)    2.6512 msec/pass
+  lxe: attributes_deep_cached     (--TR T2)   16.7937 msec/pass
+  lxe: attributes_deep_cached     (--TR T4)    2.5539 msec/pass
 
-  lxe: objectpath_deep_cached     (--TR T1)    0.7496 msec/pass
-  lxe: objectpath_deep_cached     (--TR T2)   12.3763 msec/pass
-  lxe: objectpath_deep_cached     (--TR T4)    0.7427 msec/pass
+  lxe: objectpath_deep_cached     (--TR T1)    0.8519 msec/pass
+  lxe: objectpath_deep_cached     (--TR T2)   13.9337 msec/pass
+  lxe: objectpath_deep_cached     (--TR T4)    0.8645 msec/pass
 
 Things to note: you cannot currently use ``weakref.WeakKeyDictionary`` objects
 for this as lxml's element objects do not support weak references (which are
index 008bc999112c9a39548cd870eee3b7ec705f97e7..62ffda736c8d2ed14d9ca9155d7e108535b61f4f 100644 (file)
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 <meta name="version" content="S5 1.1" />
 <title>Implementing XML languages with lxml</title>
 <style type="text/css">
@@ -707,13 +707,13 @@ HTML task«</li>
 <div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">root</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span>
 <span class="gp">... </span>  <span class="s2">&quot;&lt;root&gt; &lt;a&gt;&lt;b/&gt;&lt;b/&gt;&lt;/a&gt; &lt;c&gt;&lt;d/&gt;&lt;e&gt;&lt;f/&gt;&lt;/e&gt;&lt;g/&gt;&lt;/c&gt; &lt;/root&gt;&quot;</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="p">])</span>   <span class="c1"># children</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span><span class="n">child</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">root</span><span class="p">])</span>   <span class="c1"># children</span>
 <span class="go">[&#39;a&#39;, &#39;c&#39;]</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">()])</span>  <span class="c1"># self and descendants</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">()])</span>  <span class="c1"># self and descendants</span>
 <span class="go">[&#39;root&#39;, &#39;a&#39;, &#39;b&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;]</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iterdescendants</span><span class="p">()])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iterdescendants</span><span class="p">()])</span>
 <span class="go">[&#39;a&#39;, &#39;b&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;]</span>
 
 
@@ -724,7 +724,7 @@ HTML task«</li>
 <span class="gp">... </span>        <span class="n">bfs_queue</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>      <span class="c1"># append its children</span>
 <span class="gp">... </span>        <span class="k">yield</span> <span class="n">el</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">iter_breadth_first</span><span class="p">(</span><span class="n">root</span><span class="p">)])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span><span class="n">el</span><span class="o">.</span><span class="n">tag</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">iter_breadth_first</span><span class="p">(</span><span class="n">root</span><span class="p">)])</span>
 <span class="go">[&#39;root&#39;, &#39;a&#39;, &#39;c&#39;, &#39;b&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;g&#39;, &#39;f&#39;]</span>
 </pre></div>
 </div>
@@ -736,7 +736,7 @@ HTML task«</li>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">tree_walker</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">iterwalk</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">events</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;start&#39;</span><span class="p">,</span> <span class="s1">&#39;end&#39;</span><span class="p">))</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">element</span><span class="p">)</span> <span class="ow">in</span> <span class="n">tree_walker</span><span class="p">:</span>
-<span class="gp">... </span>    <span class="k">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
 <span class="go">root (start)</span>
 <span class="go">a (start)</span>
 <span class="go">b (start)</span>
@@ -769,7 +769,7 @@ HTML task«</li>
 <div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find_paragraphs</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XPath</span><span class="p">(</span><span class="s2">&quot;//p&quot;</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">paragraphs</span> <span class="o">=</span> <span class="n">find_paragraphs</span><span class="p">(</span><span class="n">xml_tree</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span> <span class="n">p</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">paragraphs</span> <span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span> <span class="n">p</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">paragraphs</span> <span class="p">])</span>
 <span class="go">[&#39;So be it!&#39;, &#39;stuff&#39;]</span>
 </pre></div>
 </li>
@@ -777,7 +777,7 @@ HTML task«</li>
 <div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">find_dialogs</span> <span class="o">=</span> <span class="n">cssselect</span><span class="o">.</span><span class="n">CSSSelector</span><span class="p">(</span><span class="s2">&quot;speech.dialog p&quot;</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">paragraphs</span> <span class="o">=</span> <span class="n">find_dialogs</span><span class="p">(</span><span class="n">xml_tree</span><span class="p">)</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span> <span class="n">p</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">paragraphs</span> <span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span> <span class="n">p</span><span class="o">.</span><span class="n">text</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">paragraphs</span> <span class="p">])</span>
 <span class="go">[&#39;So be it!&#39;]</span>
 </pre></div>
 </li>
@@ -833,7 +833,7 @@ HTML task«</li>
 </pre></div>
 </li>
 <li><p class="first">using the <tt class="docutils literal">fromstring()</tt> function with a specific parser:</p>
-<div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">HTMLParser</span><span class="p">(</span><span class="n">remove_comments</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">HTMLParser</span><span class="p">(</span><span class="n">remove_comments</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">root_element</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">some_html_data</span><span class="p">,</span> <span class="n">parser</span><span class="p">)</span>
 </pre></div>
 </li>
@@ -909,7 +909,7 @@ HTML task«</li>
 <p>The ElementMaker (or <em>E-factory</em>)</p>
 <div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml.builder</span> <span class="kn">import</span> <span class="n">ElementMaker</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">A</span> <span class="o">=</span> <span class="n">ElementMaker</span><span class="p">(</span><span class="n">namespace</span><span class="o">=</span><span class="s2">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="p">,</span>
-<span class="gp">... </span>                 <span class="n">nsmap</span><span class="o">=</span><span class="p">{</span><span class="bp">None</span> <span class="p">:</span> <span class="s2">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="p">})</span>
+<span class="gp">... </span>                 <span class="n">nsmap</span><span class="o">=</span><span class="p">{</span><span class="kc">None</span> <span class="p">:</span> <span class="s2">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="p">})</span>
 </pre></div>
 <div class="incremental"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">atom</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span>
 <span class="gp">... </span>  <span class="n">A</span><span class="o">.</span><span class="n">author</span><span class="p">(</span> <span class="n">A</span><span class="o">.</span><span class="n">name</span><span class="p">(</span><span class="s2">&quot;Stefan Behnel&quot;</span><span class="p">)</span> <span class="p">),</span>
@@ -922,7 +922,7 @@ HTML task«</li>
 <span class="gp">... </span><span class="p">)</span>
 </pre></div>
 </div><div class="incremental"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">lxml.etree</span> <span class="kn">import</span> <span class="n">tostring</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span> <span class="n">tostring</span><span class="p">(</span><span class="n">atom</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span> <span class="n">tostring</span><span class="p">(</span><span class="n">atom</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="p">)</span>
 </pre></div>
 </div></div>
 <div class="slide" id="example-generate-xml-2">
@@ -986,7 +986,7 @@ HTML task«</li>
 <span class="n">ATOM_NAMESPACE</span> <span class="o">=</span> <span class="s2">&quot;http://www.w3.org/2005/Atom&quot;</span>
 
 <span class="n">A</span> <span class="o">=</span> <span class="n">ElementMaker</span><span class="p">(</span><span class="n">namespace</span><span class="o">=</span><span class="n">ATOM_NAMESPACE</span><span class="p">,</span>
-                 <span class="n">nsmap</span><span class="o">=</span><span class="p">{</span><span class="bp">None</span> <span class="p">:</span> <span class="n">ATOM_NAMESPACE</span><span class="p">})</span>
+                 <span class="n">nsmap</span><span class="o">=</span><span class="p">{</span><span class="kc">None</span> <span class="p">:</span> <span class="n">ATOM_NAMESPACE</span><span class="p">})</span>
 
 <span class="n">feed</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">feed</span>
 <span class="n">entry</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">entry</span>
@@ -995,14 +995,14 @@ HTML task«</li>
 
 
 <span class="c1"># plus a little validation function: isvalid()</span>
-<span class="n">isvalid</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">RelaxNG</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="s2">&quot;atom.rng&quot;</span><span class="p">)</span>
+<span class="n">isvalid</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">RelaxNG</span><span class="p">(</span><span class="n">file</span><span class="o">=</span><span class="s2">&quot;atom.rng&quot;</span><span class="p">)</span>
 </pre></div>
 </div>
 <div class="slide" id="the-atom-generator-module">
 <h1>The Atom generator module</h1>
 <!-- >>> import sys
 >>> sys.path.insert(0, "ep2008") -->
-<div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">atomgen</span> <span class="kn">as</span> <span class="nn">A</span>
+<div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">atomgen</span> <span class="k">as</span> <span class="nn">A</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">atom</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">feed</span><span class="p">(</span>
 <span class="gp">... </span>  <span class="n">A</span><span class="o">.</span><span class="n">author</span><span class="p">(</span> <span class="n">A</span><span class="o">.</span><span class="n">name</span><span class="p">(</span><span class="s2">&quot;Stefan Behnel&quot;</span><span class="p">)</span> <span class="p">),</span>
@@ -1026,7 +1026,7 @@ HTML task«</li>
 <div class="slide" id="mixing-languages-1">
 <h1>Mixing languages (1)</h1>
 <p>Atom can embed <em>serialised</em> HTML</p>
-<div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">lxml.html.builder</span> <span class="kn">as</span> <span class="nn">h</span>
+<div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">lxml.html.builder</span> <span class="k">as</span> <span class="nn">h</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">html_fragment</span> <span class="o">=</span> <span class="n">h</span><span class="o">.</span><span class="n">DIV</span><span class="p">(</span>
 <span class="gp">... </span>  <span class="s2">&quot;this is some</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span>
@@ -1037,7 +1037,7 @@ HTML task«</li>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">summary</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">summary</span><span class="p">(</span><span class="n">serialised_html</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;html&quot;</span><span class="p">)</span>
 </pre></div>
-</div><div class="incremental"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">summary</span><span class="p">))</span>
+</div><div class="incremental"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">summary</span><span class="p">))</span>
 <span class="go">&lt;summary xmlns=&quot;http://www.w3.org/2005/Atom&quot; type=&quot;html&quot;&gt;</span>
 <span class="go">   &amp;lt;div&amp;gt;this is some</span>
 <span class="go">   &amp;lt;a href=&quot;http://w3.org/MarkUp/&quot;&amp;gt;HTML&amp;lt;/a&amp;gt;</span>
@@ -1056,7 +1056,7 @@ HTML task«</li>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">summary</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">summary</span><span class="p">(</span><span class="n">xhtml_fragment</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;xhtml&quot;</span><span class="p">)</span>
 </pre></div>
-<div class="incremental"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">summary</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<div class="incremental"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">summary</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
 <span class="go">&lt;summary xmlns=&quot;http://www.w3.org/2005/Atom&quot; type=&quot;xhtml&quot;&gt;</span>
 <span class="go">  &lt;html:div xmlns:html=&quot;http://www.w3.org/1999/xhtml&quot;&gt;this is some</span>
 <span class="go">  &lt;html:a href=&quot;http://w3.org/MarkUp/&quot;&gt;HTML&lt;/html:a&gt;</span>
@@ -1219,13 +1219,13 @@ HTML task«</li>
 <div class="highlight"><pre><span></span><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">objectify</span>
 
 <span class="o">&gt;&gt;&gt;</span> <span class="n">feed</span> <span class="o">=</span> <span class="n">objectify</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">&quot;atom-example.xml&quot;</span><span class="p">)</span>
-<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="n">feed</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="n">feed</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
 <span class="n">Example</span> <span class="n">Feed</span>
 
-<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">([</span><span class="n">entry</span><span class="o">.</span><span class="n">title</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">])</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">([</span><span class="n">entry</span><span class="o">.</span><span class="n">title</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">])</span>
 <span class="p">[</span><span class="s1">&#39;Atom-Powered Robots Run Amok&#39;</span><span class="p">]</span>
 
-<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
+<span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
 <span class="n">Atom</span><span class="o">-</span><span class="n">Powered</span> <span class="n">Robots</span> <span class="n">Run</span> <span class="n">Amok</span>
 </pre></div>
 </div>
@@ -1239,7 +1239,7 @@ HTML task«</li>
         <span class="s2">&quot;initialise the IDs of feed and entries&quot;</span>
 
         <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">chain</span><span class="p">([</span><span class="bp">self</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">entry</span><span class="p">):</span>
-            <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">_ATOM_NS</span> <span class="o">+</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">_ATOM_NS</span> <span class="o">+</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
                 <span class="nb">id</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_ATOM_NS</span> <span class="o">+</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span>
                 <span class="nb">id</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">make_guid</span><span class="p">()</span>
 </pre></div>
@@ -1286,7 +1286,7 @@ HTML task«</li>
 <span class="c1"># or use ns.update(vars()) with appropriate class names</span>
 
 <span class="c1"># create a parser that does some whitespace cleanup</span>
-<span class="n">atom_parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+<span class="n">atom_parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">(</span><span class="n">remove_blank_text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 
 <span class="c1"># make it use our Atom classes</span>
 <span class="n">atom_parser</span><span class="o">.</span><span class="n">set_element_class_lookup</span><span class="p">(</span><span class="n">_atom_lookup</span><span class="p">)</span>
@@ -1301,13 +1301,13 @@ HTML task«</li>
 <div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">atom</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">feed</span> <span class="o">=</span> <span class="n">atom</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">&quot;ep2008/atom-example.xml&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
 
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">))</span>
 <span class="go">1</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span><span class="n">entry</span><span class="o">.</span><span class="n">title</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span><span class="n">entry</span><span class="o">.</span><span class="n">title</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">entry</span><span class="p">])</span>
 <span class="go">[&#39;Atom-Powered Robots Run Amok&#39;]</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">link_tag</span> <span class="o">=</span> <span class="s2">&quot;{</span><span class="si">%s</span><span class="s2">}link&quot;</span> <span class="o">%</span> <span class="n">atom</span><span class="o">.</span><span class="n">ATOM_NAMESPACE</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span><span class="p">([</span><span class="n">link</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;href&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">link_tag</span><span class="p">)])</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">([</span><span class="n">link</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;href&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">link_tag</span><span class="p">)])</span>
 <span class="go">[&#39;http://example.org/&#39;, &#39;http://example.org/2003/12/13/atom03&#39;]</span>
 </pre></div>
 </div>
diff --git a/doc/s5/tagpython.png b/doc/s5/tagpython.png
deleted file mode 100644 (file)
index 1bedfc8..0000000
Binary files a/doc/s5/tagpython.png and /dev/null differ
diff --git a/doc/update_performance_results.py b/doc/update_performance_results.py
new file mode 100644 (file)
index 0000000..cf0f45b
--- /dev/null
@@ -0,0 +1,58 @@
+import operator
+import re
+
+_parse_result_line = re.compile(
+    "\s*(?P<library>\w+):\s*(?P<name>\w+)\s+\((?P<config>[-\w]+\s[\w,]+)\s*\)\s+(?P<time>[0-9.]+\s+msec/pass)"
+).match
+
+_make_key = operator.itemgetter('library', 'name', 'config')
+
+
+def read_benchmark_results(benchmark_files):
+    benchmark_results = {}
+    for file_path in benchmark_files:
+        with open(file_path) as f:
+            for line in f:
+                result = _parse_result_line(line)
+                if not result:
+                    continue
+                d = result.groupdict()
+                benchmark_results[_make_key(d)] = d['time']
+
+    return benchmark_results
+
+
+def update_results(text_file, benchmark_results):
+    with open(text_file) as f:
+        for line in f:
+            match = _parse_result_line(line)
+            if not match:
+                yield line
+                continue
+
+            d = match.groupdict()
+            key = _make_key(d)
+            try:
+                new_time = benchmark_results[key]
+            except KeyError:
+                print("Failed to update benchmark results of %r" % d)
+                yield line
+            else:
+                yield line.replace(d['time'], new_time)
+
+
+def main(log_files, doc_file="doc/performance.txt"):
+    results = read_benchmark_results(log_files)
+    if not results:
+        return
+
+    print("Found %d benchmark results" % len(results))
+    new_text = "".join(update_results(doc_file, results))
+    with open(doc_file, 'w') as f:
+        f.write(new_text)
+    print("Updated benchmark results in %s" % doc_file)
+
+
+if __name__ == '__main__':
+    import sys
+    main(sys.argv[1:])
index 8b2870e517fc215ddb9a594eeb10036f0b51e8bd..9eb9bcf79784519dff5e94bb4d2a70741805cce6 100644 (file)
@@ -63,9 +63,14 @@ comparison`_ to learn when to use which.  Their semantics when used on
 Elements and ElementTrees are the same as for the ``xpath()`` method described
 here.
 
-Note that the ``.find*()`` methods are usually faster than the full-blown XPath
-support.  They also support incremental tree processing through the ``.iterfind()``
-method, whereas XPath always collects all results before returning them.
+.. note::
+
+   The ``.find*()`` methods are usually *faster* than the full-blown XPath
+   support.  They also support incremental tree processing through the
+   ``.iterfind()`` method, whereas XPath always collects all results before
+   returning them.  They are therefore recommended over XPath for both speed
+   and memory reasons, whenever there is no need for highly selective XPath
+   queries.
 
 .. _`performance comparison`: performance.html#xpath
 
index 845c0d9c023c4074215920c306796ddaad97757b..930d96329a4182b2c0cc18c15a397c0bb15ffc9e 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -25,10 +25,13 @@ import setupinfo
 # override these and pass --static for a static build. See
 # doc/build.txt for more information. If you do not pass --static
 # changing this will have no effect.
-STATIC_INCLUDE_DIRS = []
-STATIC_LIBRARY_DIRS = []
-STATIC_CFLAGS = []
-STATIC_BINARIES = []
+def static_env_list(name, separator=None):
+    return [x.strip() for x in os.environ.get(name, "").split(separator) if x.strip()]
+
+STATIC_INCLUDE_DIRS = static_env_list("LXML_STATIC_INCLUDE_DIRS", separator=os.pathsep)
+STATIC_LIBRARY_DIRS = static_env_list("LXML_STATIC_LIBRARY_DIRS", separator=os.pathsep)
+STATIC_CFLAGS = static_env_list("LXML_STATIC_CFLAGS")
+STATIC_BINARIES = static_env_list("LXML_STATIC_BINARIES", separator=os.pathsep)
 
 # create lxml-version.h file
 versioninfo.create_version_h()
@@ -236,6 +239,7 @@ an appropriate version of Cython installed.
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
+        'Programming Language :: Python :: 3.10',
         'Programming Language :: C',
         'Operating System :: OS Independent',
         'Topic :: Text Processing :: Markup :: HTML',
@@ -249,4 +253,7 @@ an appropriate version of Cython installed.
 if OPTION_RUN_TESTS:
     print("Running tests.")
     import test
-    sys.exit( test.main(sys.argv[:1]) )
+    try:
+        sys.exit( test.main(sys.argv[:1]) )
+    except ImportError:
+        pass  # we assume that the binaries were not built with this setup.py run
index 6eceeea65ad0b2f2402ede890c1ae05f3e47fde3..805321695ed7e86492c039ebf1944ed1425c1795 100644 (file)
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: lxml
-Version: 4.6.3
+Version: 4.6.4
 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
 Home-page: https://lxml.de/
 Author: lxml dev team
@@ -8,48 +8,6 @@ Author-email: lxml-dev@lxml.de
 Maintainer: lxml dev team
 Maintainer-email: lxml-dev@lxml.de
 License: BSD
-Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries.  It
-        provides safe and convenient access to these libraries using the ElementTree
-        API.
-        
-        It extends the ElementTree API significantly to offer support for XPath,
-        RelaxNG, XML Schema, XSLT, C14N and much more.
-        
-        To contact the project, go to the `project home page
-        <https://lxml.de/>`_ or see our bug tracker at
-        https://launchpad.net/lxml
-        
-        In case you want to use the current in-development version of lxml,
-        you can get it from the github repository at
-        https://github.com/lxml/lxml .  Note that this requires Cython to
-        build the sources, see the build instructions on the project home
-        page.  To the same end, running ``easy_install lxml==dev`` will
-        install lxml from
-        https://github.com/lxml/lxml/tarball/master#egg=lxml-dev if you have
-        an appropriate version of Cython installed.
-        
-        
-        After an official release of a new stable series, bug fixes may become
-        available at
-        https://github.com/lxml/lxml/tree/lxml-4.6 .
-        Running ``easy_install lxml==4.6bugfix`` will install
-        the unreleased branch state from
-        https://github.com/lxml/lxml/tarball/lxml-4.6#egg=lxml-4.6bugfix
-        as soon as a maintenance branch has been established.  Note that this
-        requires Cython to be installed at an appropriate version for the build.
-        
-        4.6.3 (2021-03-21)
-        ==================
-        
-        Bugs fixed
-        ----------
-        
-        * A vulnerability (CVE-2021-28957) was discovered in the HTML Cleaner by Kevin Chung,
-          which allowed JavaScript to pass through.  The cleaner now removes the HTML5
-          ``formaction`` attribute.
-        
-        
-        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
@@ -64,13 +22,62 @@ Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: C
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Text Processing :: Markup :: HTML
 Classifier: Topic :: Text Processing :: Markup :: XML
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*
+Provides-Extra: source
 Provides-Extra: cssselect
 Provides-Extra: html5
 Provides-Extra: htmlsoup
-Provides-Extra: source
+License-File: LICENSE.txt
+License-File: LICENSES.txt
+
+lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries.  It
+provides safe and convenient access to these libraries using the ElementTree
+API.
+
+It extends the ElementTree API significantly to offer support for XPath,
+RelaxNG, XML Schema, XSLT, C14N and much more.
+
+To contact the project, go to the `project home page
+<https://lxml.de/>`_ or see our bug tracker at
+https://launchpad.net/lxml
+
+In case you want to use the current in-development version of lxml,
+you can get it from the github repository at
+https://github.com/lxml/lxml .  Note that this requires Cython to
+build the sources, see the build instructions on the project home
+page.  To the same end, running ``easy_install lxml==dev`` will
+install lxml from
+https://github.com/lxml/lxml/tarball/master#egg=lxml-dev if you have
+an appropriate version of Cython installed.
+
+
+After an official release of a new stable series, bug fixes may become
+available at
+https://github.com/lxml/lxml/tree/lxml-4.6 .
+Running ``easy_install lxml==4.6bugfix`` will install
+the unreleased branch state from
+https://github.com/lxml/lxml/tarball/lxml-4.6#egg=lxml-4.6bugfix
+as soon as a maintenance branch has been established.  Note that this
+requires Cython to be installed at an appropriate version for the build.
+
+4.6.4 (2021-11-01)
+==================
+
+Features added
+--------------
+
+* GH#317: A new property ``system_url`` was added to DTD entities.
+  Patch by Thirdegree.
+
+* GH#314: The ``STATIC_*`` variables in ``setup.py`` can now be passed via env vars.
+  Patch by Isaac Jurado.
+
+
+
+
index 6426fe6a4bf4b1627da5c0e13bbf00f8439a004c..e5daa75d592ed84c3ef612acf59f4867a2d3e05b 100644 (file)
@@ -1,6 +1,7 @@
 CHANGES.txt
 CREDITS.txt
 INSTALL.txt
+LICENSE.txt
 LICENSES.txt
 MANIFEST.in
 Makefile
@@ -48,6 +49,7 @@ doc/rest2latex.py
 doc/sax.txt
 doc/test.xml
 doc/tutorial.txt
+doc/update_performance_results.py
 doc/valgrind.txt
 doc/validation.txt
 doc/xpathxslt.txt
@@ -57,14 +59,13 @@ doc/html/FAQ.html
 doc/html/api.html
 doc/html/build.html
 doc/html/capi.html
-doc/html/changes-4.6.3.html
+doc/html/changes-4.6.4.html
 doc/html/compatibility.html
 doc/html/credits.html
 doc/html/cssselect.html
 doc/html/element_classes.html
 doc/html/elementsoup.html
 doc/html/extensions.html
-doc/html/flattr-badge-large.png
 doc/html/html5parser.html
 doc/html/index.html
 doc/html/installation.html
@@ -114,7 +115,6 @@ doc/html/apidoc/py-modindex.html
 doc/html/apidoc/search.html
 doc/html/apidoc/_modules/index.html
 doc/html/apidoc/_modules/lxml.html
-doc/html/apidoc/_modules/collections/abc.html
 doc/html/apidoc/_modules/lxml/ElementInclude.html
 doc/html/apidoc/_modules/lxml/doctestcompare.html
 doc/html/apidoc/_modules/lxml/html.html
@@ -151,14 +151,11 @@ doc/html/apidoc/_static/css/badge_only.css
 doc/html/apidoc/_static/css/theme.css
 doc/licenses/BSD.txt
 doc/licenses/GPL.txt
-doc/licenses/ZopePublicLicense.txt
 doc/licenses/elementtree.txt
-doc/pdf/pubkey.asc
 doc/s5/Makefile
 doc/s5/lxml-ep2008.html
 doc/s5/lxml-ep2008.txt
 doc/s5/rst2s5.py
-doc/s5/tagpython.png
 doc/s5/ep2008/atom-example.xml
 doc/s5/ep2008/atom.py
 doc/s5/ep2008/atom.rng
@@ -352,6 +349,7 @@ src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt
 src/lxml/tests/__init__.py
 src/lxml/tests/common_imports.py
 src/lxml/tests/dummy_http_server.py
+src/lxml/tests/fuzz_xml_parse.py
 src/lxml/tests/selftest.py
 src/lxml/tests/selftest2.py
 src/lxml/tests/shakespeare.html
index c569544b69e663380609d381250bec62e1f4772b..6670d16bb4b9924ae71354d88f5f5e564e319fae 100644 (file)
@@ -1,6 +1,6 @@
 # this is a package
 
-__version__ = "4.6.3"
+__version__ = "4.6.4"
 
 
 def get_include():
index 55f3633057f5e433dea8b70b874f795ab5de40ae..4b1eaca8c41285001067bbb8574cdaae2b044e02 100644 (file)
@@ -1,40 +1,39 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "/usr/include/libxml2", 
-            "src", 
+            "/usr/include/libxml2",
+            "src",
             "src/lxml/includes"
-        ], 
-        "name": "lxml._elementpath", 
+        ],
+        "name": "lxml._elementpath",
         "sources": [
             "src/lxml/_elementpath.py"
         ]
-    }, 
+    },
     "module_name": "lxml._elementpath"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -452,8 +451,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -462,7 +465,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -1740,6 +1747,7 @@ typedef struct {
     PyObject *gi_qualname;
     PyObject *gi_modulename;
     PyObject *gi_code;
+    PyObject *gi_frame;
     int resume_label;
     char is_running;
 } __pyx_CoroutineObject;
@@ -3413,6 +3421,7 @@ static PyObject *__pyx_gb_4lxml_12_elementpath_13prepare_child_2generator1(__pyx
 static PyObject *__pyx_pf_4lxml_12_elementpath_3prepare_child(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_next, PyObject *__pyx_v_token) {
   struct __pyx_obj_4lxml_12_elementpath___pyx_scope_struct_1_prepare_child *__pyx_cur_scope;
   PyObject *__pyx_v_select = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_13prepare_child_2generator1 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3481,6 +3490,7 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_3prepare_child(CYTHON_UNUSED PyOb
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_select);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_13prepare_child_2generator1);
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -3861,6 +3871,7 @@ static PyObject *__pyx_gb_4lxml_12_elementpath_12prepare_star_2generator2(__pyx_
 
 static PyObject *__pyx_pf_4lxml_12_elementpath_5prepare_star(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_next, CYTHON_UNUSED PyObject *__pyx_v_token) {
   PyObject *__pyx_v_select = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_12prepare_star_2generator2 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3908,6 +3919,7 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_5prepare_star(CYTHON_UNUSED PyObj
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_select);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_12prepare_star_2generator2);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -4481,6 +4493,7 @@ static PyObject *__pyx_gb_4lxml_12_elementpath_18prepare_descendant_2generator3(
 static PyObject *__pyx_pf_4lxml_12_elementpath_9prepare_descendant(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_next, PyObject *__pyx_v_token) {
   struct __pyx_obj_4lxml_12_elementpath___pyx_scope_struct_4_prepare_descendant *__pyx_cur_scope;
   PyObject *__pyx_v_select = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_18prepare_descendant_2generator3 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -4656,6 +4669,7 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_9prepare_descendant(CYTHON_UNUSED
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_select);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_18prepare_descendant_2generator3);
   __Pyx_XDECREF(__pyx_v_token);
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
@@ -4998,6 +5012,7 @@ static PyObject *__pyx_gb_4lxml_12_elementpath_14prepare_parent_2generator4(__py
 
 static PyObject *__pyx_pf_4lxml_12_elementpath_11prepare_parent(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_next, CYTHON_UNUSED PyObject *__pyx_v_token) {
   PyObject *__pyx_v_select = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_14prepare_parent_2generator4 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -5045,6 +5060,7 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_11prepare_parent(CYTHON_UNUSED Py
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_select);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_14prepare_parent_2generator4);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -6939,6 +6955,12 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_13prepare_predicate(CYTHON_UNUSED
   PyObject *__pyx_v_signature = NULL;
   PyObject *__pyx_v_predicate = NULL;
   PyObject *__pyx_v_select = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_17prepare_predicate_2generator5 = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_17prepare_predicate_5generator6 = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_17prepare_predicate_8generator7 = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_17prepare_predicate_11generator8 = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_17prepare_predicate_14generator9 = 0;
+  PyObject *__pyx_gb_4lxml_12_elementpath_17prepare_predicate_17generator10 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7980,6 +8002,12 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_13prepare_predicate(CYTHON_UNUSED
   __Pyx_XDECREF(__pyx_v_signature);
   __Pyx_XDECREF(__pyx_v_predicate);
   __Pyx_XDECREF(__pyx_v_select);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_17prepare_predicate_2generator5);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_17prepare_predicate_5generator6);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_17prepare_predicate_8generator7);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_17prepare_predicate_11generator8);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_17prepare_predicate_14generator9);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_17prepare_predicate_17generator10);
   __Pyx_XDECREF(__pyx_v_token);
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
@@ -8240,6 +8268,7 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_15_build_path_iterator(CYTHON_UNU
   PyObject *__pyx_v__next = NULL;
   PyObject *__pyx_v_token = NULL;
   PyObject *__pyx_v_selector = NULL;
+  PyObject *__pyx_gb_4lxml_12_elementpath_20_build_path_iterator_2generator11 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9348,6 +9377,7 @@ static PyObject *__pyx_pf_4lxml_12_elementpath_15_build_path_iterator(CYTHON_UNU
   __Pyx_XDECREF(__pyx_v__next);
   __Pyx_XDECREF(__pyx_v_token);
   __Pyx_XDECREF(__pyx_v_selector);
+  __Pyx_XDECREF(__pyx_gb_4lxml_12_elementpath_20_build_path_iterator_2generator11);
   __Pyx_XDECREF(__pyx_v_path);
   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
   __Pyx_XGIVEREF(__pyx_r);
@@ -13356,11 +13386,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -14213,7 +14241,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -15379,7 +15407,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
@@ -17712,6 +17741,7 @@ static int __Pyx_Coroutine_clear(PyObject *self) {
     }
 #endif
     Py_CLEAR(gen->gi_code);
+    Py_CLEAR(gen->gi_frame);
     Py_CLEAR(gen->gi_name);
     Py_CLEAR(gen->gi_qualname);
     Py_CLEAR(gen->gi_modulename);
@@ -17728,7 +17758,7 @@ static void __Pyx_Coroutine_dealloc(PyObject *self) {
         if (PyObject_CallFinalizerFromDealloc(self))
 #else
         Py_TYPE(gen)->tp_del(self);
-        if (self->ob_refcnt > 0)
+        if (Py_REFCNT(self) > 0)
 #endif
         {
             return;
@@ -17822,17 +17852,17 @@ static void __Pyx_Coroutine_del(PyObject *self) {
     }
     __Pyx_ErrRestore(error_type, error_value, error_traceback);
 #if !CYTHON_USE_TP_FINALIZE
-    assert(self->ob_refcnt > 0);
+    assert(Py_REFCNT(self) > 0);
     if (--self->ob_refcnt == 0) {
         return;
     }
     {
-        Py_ssize_t refcnt = self->ob_refcnt;
+        Py_ssize_t refcnt = Py_REFCNT(self);
         _Py_NewReference(self);
         __Pyx_SET_REFCNT(self, refcnt);
     }
 #if CYTHON_COMPILING_IN_CPYTHON
-    assert(PyType_IS_GC(self->ob_type) &&
+    assert(PyType_IS_GC(Py_TYPE(self)) &&
            _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
     _Py_DEC_REFTOTAL;
 #endif
@@ -17898,6 +17928,27 @@ __Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHO
     Py_XDECREF(tmp);
     return 0;
 }
+static PyObject *
+__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
+{
+    PyObject *frame = self->gi_frame;
+    if (!frame) {
+        if (unlikely(!self->gi_code)) {
+            Py_RETURN_NONE;
+        }
+        frame = (PyObject *) PyFrame_New(
+            PyThreadState_Get(),            /*PyThreadState *tstate,*/
+            (PyCodeObject*) self->gi_code,  /*PyCodeObject *code,*/
+            __pyx_d,                 /*PyObject *globals,*/
+            0                               /*PyObject *locals*/
+        );
+        if (unlikely(!frame))
+            return NULL;
+        self->gi_frame = frame;
+    }
+    Py_INCREF(frame);
+    return frame;
+}
 static __pyx_CoroutineObject *__Pyx__Coroutine_New(
             PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
             PyObject *name, PyObject *qualname, PyObject *module_name) {
@@ -17931,6 +17982,7 @@ static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
     gen->gi_modulename = module_name;
     Py_XINCREF(code);
     gen->gi_code = code;
+    gen->gi_frame = NULL;
     PyObject_GC_Track(gen);
     return gen;
 }
@@ -18054,6 +18106,8 @@ static PyGetSetDef __pyx_Generator_getsets[] = {
      (char*) PyDoc_STR("name of the generator"), 0},
     {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
      (char*) PyDoc_STR("qualified name of the generator"), 0},
+    {(char *) "gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
+     (char*) PyDoc_STR("Frame of the generator"), 0},
     {0, 0, 0, 0, 0}
 };
 static PyTypeObject __pyx_GeneratorType_type = {
index dcaf0415685ec30905a67f88157c901dd8bfc4ed..0a4002021553fdc3b1faa95c1cf30741b0c35276 100644 (file)
@@ -1,40 +1,39 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "/usr/include/libxml2", 
-            "src", 
+            "/usr/include/libxml2",
+            "src",
             "src/lxml/includes"
-        ], 
-        "name": "lxml.builder", 
+        ],
+        "name": "lxml.builder",
         "sources": [
             "src/lxml/builder.py"
         ]
-    }, 
+    },
     "module_name": "lxml.builder"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -452,8 +451,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -462,7 +465,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -1187,7 +1194,7 @@ static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* k
 
 /* CallableCheck.proto */
 #if CYTHON_USE_TYPE_SLOTS && PY_MAJOR_VERSION >= 3
-#define __Pyx_PyCallable_Check(obj)   ((obj)->ob_type->tp_call != NULL)
+#define __Pyx_PyCallable_Check(obj)   (Py_TYPE(obj)->tp_call != NULL)
 #else
 #define __Pyx_PyCallable_Check(obj)   PyCallable_Check(obj)
 #endif
@@ -5534,11 +5541,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -6544,7 +6549,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -7312,7 +7317,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
index 5dcb80c461bb70c7d71e7a5647f05777dd617330..2b4bf762f6e064a1352340cfd3f94a49a0bf3046 100644 (file)
@@ -258,6 +258,11 @@ cdef class _DTDEntityDecl:
         _assertValidDTDNode(self, self._c_node)
         return funicodeOrNone(self._c_node.content)
 
+    @property
+    def system_url(self):
+        _assertValidDTDNode(self, self._c_node)
+        return funicodeOrNone(self._c_node.SystemID)
+
 
 ################################################################################
 # DTD
index 8de63dd1d75d881e483b7c76d1dde5a1db9a90f5..1dbdf55ea5bdd321408c850fad0cb136963676d0 100644 (file)
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
+        ],
         "depends": [
-            "/usr/include/libxml2/libxml/HTMLtree.h", 
-            "/usr/include/libxml2/libxml/chvalid.h", 
-            "/usr/include/libxml2/libxml/encoding.h", 
-            "/usr/include/libxml2/libxml/globals.h", 
-            "/usr/include/libxml2/libxml/hash.h", 
-            "/usr/include/libxml2/libxml/tree.h", 
-            "/usr/include/libxml2/libxml/uri.h", 
-            "/usr/include/libxml2/libxml/valid.h", 
-            "/usr/include/libxml2/libxml/xmlIO.h", 
-            "/usr/include/libxml2/libxml/xmlmemory.h", 
-            "/usr/include/libxml2/libxml/xmlsave.h", 
-            "/usr/include/libxml2/libxml/xmlstring.h", 
-            "/usr/include/libxml2/libxml/xmlversion.h", 
-            "src/lxml/apihelpers.pxi", 
-            "src/lxml/classlookup.pxi", 
-            "src/lxml/cleanup.pxi", 
-            "src/lxml/debug.pxi", 
-            "src/lxml/docloader.pxi", 
-            "src/lxml/dtd.pxi", 
-            "src/lxml/extensions.pxi", 
-            "src/lxml/includes/__init__.pxd", 
-            "src/lxml/includes/c14n.pxd", 
-            "src/lxml/includes/config.pxd", 
-            "src/lxml/includes/dtdvalid.pxd", 
-            "src/lxml/includes/etree_defs.h", 
-            "src/lxml/includes/htmlparser.pxd", 
-            "src/lxml/includes/lxml-version.h", 
-            "src/lxml/includes/relaxng.pxd", 
-            "src/lxml/includes/schematron.pxd", 
-            "src/lxml/includes/tree.pxd", 
-            "src/lxml/includes/uri.pxd", 
-            "src/lxml/includes/xinclude.pxd", 
-            "src/lxml/includes/xmlerror.pxd", 
-            "src/lxml/includes/xmlparser.pxd", 
-            "src/lxml/includes/xmlschema.pxd", 
-            "src/lxml/includes/xpath.pxd", 
-            "src/lxml/includes/xslt.pxd", 
-            "src/lxml/iterparse.pxi", 
-            "src/lxml/lxml_endian.h", 
-            "src/lxml/nsclasses.pxi", 
-            "src/lxml/parser.pxi", 
-            "src/lxml/parsertarget.pxi", 
-            "src/lxml/proxy.pxi", 
-            "src/lxml/public-api.pxi", 
-            "src/lxml/readonlytree.pxi", 
-            "src/lxml/relaxng.pxi", 
-            "src/lxml/saxparser.pxi", 
-            "src/lxml/schematron.pxi", 
-            "src/lxml/serializer.pxi", 
-            "src/lxml/xinclude.pxi", 
-            "src/lxml/xmlerror.pxi", 
-            "src/lxml/xmlid.pxi", 
-            "src/lxml/xmlschema.pxi", 
-            "src/lxml/xpath.pxi", 
-            "src/lxml/xslt.pxi", 
+            "/usr/include/libxml2/libxml/HTMLtree.h",
+            "/usr/include/libxml2/libxml/chvalid.h",
+            "/usr/include/libxml2/libxml/encoding.h",
+            "/usr/include/libxml2/libxml/globals.h",
+            "/usr/include/libxml2/libxml/hash.h",
+            "/usr/include/libxml2/libxml/tree.h",
+            "/usr/include/libxml2/libxml/uri.h",
+            "/usr/include/libxml2/libxml/valid.h",
+            "/usr/include/libxml2/libxml/xmlIO.h",
+            "/usr/include/libxml2/libxml/xmlmemory.h",
+            "/usr/include/libxml2/libxml/xmlsave.h",
+            "/usr/include/libxml2/libxml/xmlstring.h",
+            "/usr/include/libxml2/libxml/xmlversion.h",
+            "src/lxml/apihelpers.pxi",
+            "src/lxml/classlookup.pxi",
+            "src/lxml/cleanup.pxi",
+            "src/lxml/debug.pxi",
+            "src/lxml/docloader.pxi",
+            "src/lxml/dtd.pxi",
+            "src/lxml/extensions.pxi",
+            "src/lxml/includes/__init__.pxd",
+            "src/lxml/includes/c14n.pxd",
+            "src/lxml/includes/config.pxd",
+            "src/lxml/includes/dtdvalid.pxd",
+            "src/lxml/includes/etree_defs.h",
+            "src/lxml/includes/htmlparser.pxd",
+            "src/lxml/includes/lxml-version.h",
+            "src/lxml/includes/relaxng.pxd",
+            "src/lxml/includes/schematron.pxd",
+            "src/lxml/includes/tree.pxd",
+            "src/lxml/includes/uri.pxd",
+            "src/lxml/includes/xinclude.pxd",
+            "src/lxml/includes/xmlerror.pxd",
+            "src/lxml/includes/xmlparser.pxd",
+            "src/lxml/includes/xmlschema.pxd",
+            "src/lxml/includes/xpath.pxd",
+            "src/lxml/includes/xslt.pxd",
+            "src/lxml/iterparse.pxi",
+            "src/lxml/lxml_endian.h",
+            "src/lxml/nsclasses.pxi",
+            "src/lxml/parser.pxi",
+            "src/lxml/parsertarget.pxi",
+            "src/lxml/proxy.pxi",
+            "src/lxml/public-api.pxi",
+            "src/lxml/readonlytree.pxi",
+            "src/lxml/relaxng.pxi",
+            "src/lxml/saxparser.pxi",
+            "src/lxml/schematron.pxi",
+            "src/lxml/serializer.pxi",
+            "src/lxml/xinclude.pxi",
+            "src/lxml/xmlerror.pxi",
+            "src/lxml/xmlid.pxi",
+            "src/lxml/xmlschema.pxi",
+            "src/lxml/xpath.pxi",
+            "src/lxml/xslt.pxi",
             "src/lxml/xsltext.pxi"
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "src/lxml", 
-            "src/lxml/includes", 
-            "/usr/include/libxml2", 
+            "src/lxml",
+            "src/lxml/includes",
+            "/usr/include/libxml2",
             "src"
-        ], 
+        ],
         "libraries": [
-            "xslt", 
-            "exslt", 
-            "xml2", 
-            "rt", 
-            "z", 
+            "xslt",
+            "exslt",
+            "xml2",
+            "rt",
+            "z",
             "m"
-        ], 
-        "name": "lxml.etree", 
+        ],
+        "name": "lxml.etree",
         "sources": [
             "src/lxml/etree.pyx"
         ]
-    }, 
+    },
     "module_name": "lxml.etree"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -519,8 +518,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -529,7 +532,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -1270,7 +1277,7 @@ enum __pyx_t_4lxml_5etree__OutputMethods {
   __pyx_e_4lxml_5etree_OUTPUT_METHOD_TEXT
 };
 
-/* "src/lxml/serializer.pxi":1389
+/* "src/lxml/serializer.pxi":1388
  * 
  * 
  * cdef enum _IncrementalFileWriterStatus:             # <<<<<<<<<<<<<<
@@ -1427,7 +1434,7 @@ struct __pyx_opt_args_4lxml_5etree_14_ParserContext_prepare {
   int set_document_loader;
 };
 
-/* "src/lxml/serializer.pxi":1051
+/* "src/lxml/serializer.pxi":1050
  *         raise ValueError(f'Prefix {prefix} of QName "{prefixed_name}" is not declared in scope')
  * 
  *     cdef _qname(self, qname, uri=None):             # <<<<<<<<<<<<<<
@@ -1439,7 +1446,7 @@ struct __pyx_opt_args_4lxml_5etree_16C14NWriterTarget__qname {
   PyObject *uri;
 };
 
-/* "src/lxml/serializer.pxi":1131
+/* "src/lxml/serializer.pxi":1130
  *         self._start(tag, attrs, new_namespaces)
  * 
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):             # <<<<<<<<<<<<<<
@@ -2670,7 +2677,7 @@ struct __pyx_obj_4lxml_5etree_SerialisationError {
 };
 
 
-/* "src/lxml/serializer.pxi":648
+/* "src/lxml/serializer.pxi":647
  * @cython.final
  * @cython.internal
  * cdef class _FilelikeWriter:             # <<<<<<<<<<<<<<
@@ -2687,7 +2694,7 @@ struct __pyx_obj_4lxml_5etree__FilelikeWriter {
 };
 
 
-/* "src/lxml/serializer.pxi":966
+/* "src/lxml/serializer.pxi":965
  * 
  * 
  * cdef class C14NWriterTarget:             # <<<<<<<<<<<<<<
@@ -2717,7 +2724,7 @@ struct __pyx_obj_4lxml_5etree_C14NWriterTarget {
 };
 
 
-/* "src/lxml/serializer.pxi":1289
+/* "src/lxml/serializer.pxi":1288
  * # incremental serialisation
  * 
  * cdef class xmlfile:             # <<<<<<<<<<<<<<
@@ -2737,7 +2744,7 @@ struct __pyx_obj_4lxml_5etree_xmlfile {
 };
 
 
-/* "src/lxml/serializer.pxi":1378
+/* "src/lxml/serializer.pxi":1377
  * 
  * 
  * cdef class htmlfile(xmlfile):             # <<<<<<<<<<<<<<
@@ -2749,7 +2756,7 @@ struct __pyx_obj_4lxml_5etree_htmlfile {
 };
 
 
-/* "src/lxml/serializer.pxi":1399
+/* "src/lxml/serializer.pxi":1398
  * @cython.final
  * @cython.internal
  * cdef class _IncrementalFileWriter:             # <<<<<<<<<<<<<<
@@ -2770,7 +2777,7 @@ struct __pyx_obj_4lxml_5etree__IncrementalFileWriter {
 };
 
 
-/* "src/lxml/serializer.pxi":1703
+/* "src/lxml/serializer.pxi":1702
  * @cython.final
  * @cython.internal
  * cdef class _AsyncDataWriter:             # <<<<<<<<<<<<<<
@@ -2784,7 +2791,7 @@ struct __pyx_obj_4lxml_5etree__AsyncDataWriter {
 };
 
 
-/* "src/lxml/serializer.pxi":1722
+/* "src/lxml/serializer.pxi":1721
  * @cython.final
  * @cython.internal
  * cdef class _AsyncIncrementalFileWriter:             # <<<<<<<<<<<<<<
@@ -2803,7 +2810,7 @@ struct __pyx_obj_4lxml_5etree__AsyncIncrementalFileWriter {
 };
 
 
-/* "src/lxml/serializer.pxi":1787
+/* "src/lxml/serializer.pxi":1786
  * @cython.final
  * @cython.internal
  * cdef class _AsyncFileWriterElement:             # <<<<<<<<<<<<<<
@@ -2817,7 +2824,7 @@ struct __pyx_obj_4lxml_5etree__AsyncFileWriterElement {
 };
 
 
-/* "src/lxml/serializer.pxi":1812
+/* "src/lxml/serializer.pxi":1811
  * @cython.internal
  * @cython.freelist(8)
  * cdef class _FileWriterElement:             # <<<<<<<<<<<<<<
@@ -2833,7 +2840,7 @@ struct __pyx_obj_4lxml_5etree__FileWriterElement {
 };
 
 
-/* "src/lxml/serializer.pxi":1836
+/* "src/lxml/serializer.pxi":1835
  * @cython.internal
  * @cython.freelist(8)
  * cdef class _MethodChanger:             # <<<<<<<<<<<<<<
@@ -3401,7 +3408,7 @@ struct __pyx_obj_4lxml_5etree__DTDEntityDecl {
 };
 
 
-/* "src/lxml/dtd.pxi":265
+/* "src/lxml/dtd.pxi":270
  * # DTD
  * 
  * cdef class DTD(_Validator):             # <<<<<<<<<<<<<<
@@ -3594,7 +3601,7 @@ struct __pyx_obj_4lxml_5etree__MemDebug {
 };
 
 
-/* "src/lxml/serializer.pxi":630
+/* "src/lxml/serializer.pxi":629
  * 
  * @contextmanager
  * def _open_utf8_file(file, compression=0):             # <<<<<<<<<<<<<<
@@ -3614,7 +3621,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct___open_utf8_file {
 };
 
 
-/* "src/lxml/serializer.pxi":1039
+/* "src/lxml/serializer.pxi":1038
  *         self._root_done = False
  * 
  *     def _iter_namespaces(self, ns_stack):             # <<<<<<<<<<<<<<
@@ -3632,7 +3639,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1__iter_namespaces {
 };
 
 
-/* "src/lxml/serializer.pxi":1358
+/* "src/lxml/serializer.pxi":1357
  *                 self.output_file = None
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -3645,7 +3652,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2___aenter__ {
 };
 
 
-/* "src/lxml/serializer.pxi":1369
+/* "src/lxml/serializer.pxi":1368
  *         return self.async_writer
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -3663,7 +3670,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3___aexit__ {
 };
 
 
-/* "src/lxml/serializer.pxi":1745
+/* "src/lxml/serializer.pxi":1744
  *         return None
  * 
  *     async def flush(self):             # <<<<<<<<<<<<<<
@@ -3677,7 +3684,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_4_flush {
 };
 
 
-/* "src/lxml/serializer.pxi":1751
+/* "src/lxml/serializer.pxi":1750
  *             await self._async_outfile.write(data)
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
@@ -3694,7 +3701,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_5_write_declaration {
 };
 
 
-/* "src/lxml/serializer.pxi":1757
+/* "src/lxml/serializer.pxi":1756
  *             await self._async_outfile.write(data)
  * 
  *     async def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
@@ -3709,7 +3716,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_6_write_doctype {
 };
 
 
-/* "src/lxml/serializer.pxi":1763
+/* "src/lxml/serializer.pxi":1762
  *             await self._async_outfile.write(data)
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):             # <<<<<<<<<<<<<<
@@ -3727,7 +3734,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_7_write {
 };
 
 
-/* "src/lxml/serializer.pxi":1776
+/* "src/lxml/serializer.pxi":1775
  *         return _AsyncFileWriterElement(element_writer, self)
  * 
  *     async def _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
@@ -3742,7 +3749,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_8__close {
 };
 
 
-/* "src/lxml/serializer.pxi":1796
+/* "src/lxml/serializer.pxi":1795
  *         self._writer = writer
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -3756,7 +3763,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_9___aenter__ {
 };
 
 
-/* "src/lxml/serializer.pxi":1802
+/* "src/lxml/serializer.pxi":1801
  *             await self._writer._async_outfile.write(data)
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
@@ -3771,7 +3778,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_10___aexit__ {
 };
 
 
-/* "src/lxml/serializer.pxi":1864
+/* "src/lxml/serializer.pxi":1863
  *         self._exited = True
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -3784,7 +3791,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_11___aenter__ {
 };
 
 
-/* "src/lxml/serializer.pxi":1868
+/* "src/lxml/serializer.pxi":1867
  *         return self.__enter__()
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
@@ -3827,7 +3834,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_14_iterattributes {
 };
 
 
-/* "src/lxml/dtd.pxi":320
+/* "src/lxml/dtd.pxi":325
  *        return funicodeOrNone(self._c_dtd.SystemID)
  * 
  *     def iterelements(self):             # <<<<<<<<<<<<<<
@@ -3842,7 +3849,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_15_iterelements {
 };
 
 
-/* "src/lxml/dtd.pxi":333
+/* "src/lxml/dtd.pxi":338
  *         return list(self.iterelements())
  * 
  *     def iterentities(self):             # <<<<<<<<<<<<<<
@@ -4922,7 +4929,7 @@ static int __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(struct __pyx_o
 static void __pyx_f_4lxml_5etree_20_TargetParserContext__cleanupTargetParserContext(struct __pyx_obj_4lxml_5etree__TargetParserContext *, xmlDoc *);
 
 
-/* "src/lxml/serializer.pxi":648
+/* "src/lxml/serializer.pxi":647
  * @cython.final
  * @cython.internal
  * cdef class _FilelikeWriter:             # <<<<<<<<<<<<<<
@@ -4941,7 +4948,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
 static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5etree__FilelikeWriter *);
 
 
-/* "src/lxml/serializer.pxi":966
+/* "src/lxml/serializer.pxi":965
  * 
  * 
  * cdef class C14NWriterTarget:             # <<<<<<<<<<<<<<
@@ -4958,7 +4965,7 @@ struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget {
 static struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *__pyx_vtabptr_4lxml_5etree_C14NWriterTarget;
 
 
-/* "src/lxml/serializer.pxi":1399
+/* "src/lxml/serializer.pxi":1398
  * @cython.final
  * @cython.internal
  * cdef class _IncrementalFileWriter:             # <<<<<<<<<<<<<<
@@ -4989,7 +4996,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
 static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
 
 
-/* "src/lxml/serializer.pxi":1703
+/* "src/lxml/serializer.pxi":1702
  * @cython.final
  * @cython.internal
  * cdef class _AsyncDataWriter:             # <<<<<<<<<<<<<<
@@ -5004,7 +5011,7 @@ static struct __pyx_vtabstruct_4lxml_5etree__AsyncDataWriter *__pyx_vtabptr_4lxm
 static PyObject *__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(struct __pyx_obj_4lxml_5etree__AsyncDataWriter *);
 
 
-/* "src/lxml/serializer.pxi":1722
+/* "src/lxml/serializer.pxi":1721
  * @cython.final
  * @cython.internal
  * cdef class _AsyncIncrementalFileWriter:             # <<<<<<<<<<<<<<
@@ -5363,7 +5370,7 @@ struct __pyx_vtabstruct_4lxml_5etree__Validator {
 static struct __pyx_vtabstruct_4lxml_5etree__Validator *__pyx_vtabptr_4lxml_5etree__Validator;
 
 
-/* "src/lxml/dtd.pxi":265
+/* "src/lxml/dtd.pxi":270
  * # DTD
  * 
  * cdef class DTD(_Validator):             # <<<<<<<<<<<<<<
@@ -6131,7 +6138,7 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction*
 
 /* CallableCheck.proto */
 #if CYTHON_USE_TYPE_SLOTS && PY_MAJOR_VERSION >= 3
-#define __Pyx_PyCallable_Check(obj)   ((obj)->ob_type->tp_call != NULL)
+#define __Pyx_PyCallable_Check(obj)   (Py_TYPE(obj)->tp_call != NULL)
 #else
 #define __Pyx_PyCallable_Check(obj)   PyCallable_Check(obj)
 #endif
@@ -6216,6 +6223,7 @@ typedef struct {
     PyObject *gi_qualname;
     PyObject *gi_modulename;
     PyObject *gi_code;
+    PyObject *gi_frame;
     int resume_label;
     char is_running;
 } __pyx_CoroutineObject;
@@ -6508,12 +6516,12 @@ static int __Pyx_PrintOne(PyObject* stream, PyObject *o);
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_xmlParserErrors(xmlParserErrors value);
 
-/* CIntFromPy.proto */
-static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
-
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *);
 
@@ -10891,6 +10899,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl___repr__(struct __pyx_ob
 static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_4name___get__(struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_4orig___get__(struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_7content___get__(struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_10system_url___get__(struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_self); /* proto */
 static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self, PyObject *__pyx_v_file, PyObject *__pyx_v_external_id); /* proto */
 static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self); /* proto */
@@ -64501,11 +64510,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
   __Pyx_INCREF(__pyx_v__path);
   __Pyx_GIVEREF(__pyx_v__path);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__path);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_3, __pyx_v__variables); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1582, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1582, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
   /* "lxml/etree.pyx":1573
@@ -73465,11 +73477,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xpath(struct LxmlElement
   __Pyx_INCREF(__pyx_v__path);
   __Pyx_GIVEREF(__pyx_v__path);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__path);
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_4, __pyx_v__variables); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2296, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2296, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "lxml/etree.pyx":2273
@@ -73664,11 +73679,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30xslt(struct LxmlElementT
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_style), __pyx_t_4, __pyx_v__kw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v__kw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_style), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "lxml/etree.pyx":2298
@@ -87273,6 +87291,7 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -87296,17 +87315,20 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
   __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3458, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3458, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3458, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3458, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3458, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3458, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_3;
-  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* "lxml/etree.pyx":3449
@@ -87322,6 +87344,7 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.etree.tostringlist", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -123241,8 +123264,9 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
+  int __pyx_t_6;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -123263,11 +123287,14 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1564, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1564, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1564, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "src/lxml/parser.pxi":1565
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
@@ -123276,9 +123303,9 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
  *             events = ('end',)
  *         self._setBaseURL(base_url)
  */
-  __pyx_t_4 = (__pyx_v_events == Py_None);
-  __pyx_t_5 = (__pyx_t_4 != 0);
-  if (__pyx_t_5) {
+  __pyx_t_5 = (__pyx_v_events == Py_None);
+  __pyx_t_6 = (__pyx_t_5 != 0);
+  if (__pyx_t_6) {
 
     /* "src/lxml/parser.pxi":1566
  *         XMLParser.__init__(self, **kwargs)
@@ -123306,9 +123333,9 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
  *         self._collectEvents(events, tag)
  * 
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1567, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1567, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "src/lxml/parser.pxi":1568
  *             events = ('end',)
@@ -123317,9 +123344,9 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
  * 
  *     def read_events(self):
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1568, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1568, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "src/lxml/parser.pxi":1563
  *     source, you can pass the ``base_url``.
@@ -123336,6 +123363,7 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.etree.XMLPullParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -124523,8 +124551,9 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
+  int __pyx_t_6;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -124545,11 +124574,14 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1737, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1737, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "src/lxml/parser.pxi":1738
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
@@ -124558,9 +124590,9 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
  *             events = ('end',)
  *         self._setBaseURL(base_url)
  */
-  __pyx_t_4 = (__pyx_v_events == Py_None);
-  __pyx_t_5 = (__pyx_t_4 != 0);
-  if (__pyx_t_5) {
+  __pyx_t_5 = (__pyx_v_events == Py_None);
+  __pyx_t_6 = (__pyx_t_5 != 0);
+  if (__pyx_t_6) {
 
     /* "src/lxml/parser.pxi":1739
  *         HTMLParser.__init__(self, **kwargs)
@@ -124588,9 +124620,9 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
  *         self._collectEvents(events, tag)
  * 
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1740, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1740, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "src/lxml/parser.pxi":1741
  *             events = ('end',)
@@ -124599,9 +124631,9 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
  * 
  *     def read_events(self):
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1741, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1741, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "src/lxml/parser.pxi":1736
  *     source, you can pass the ``base_url``.
@@ -124618,6 +124650,7 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.etree.HTMLPullParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -141083,8 +141116,8 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
  *                     needs_conversion = 1
  * 
  *         if needs_conversion:             # <<<<<<<<<<<<<<
- *             text = python.PyUnicode_DecodeUTF8(
- *                 <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+ *             text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')
+ *             if encoding is not unicode:
  */
     __pyx_t_2 = (__pyx_v_needs_conversion != 0);
     if (__pyx_t_2) {
@@ -141092,18 +141125,18 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
       /* "src/lxml/serializer.pxi":71
  * 
  *         if needs_conversion:
- *             text = python.PyUnicode_DecodeUTF8(             # <<<<<<<<<<<<<<
- *                 <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+ *             text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')             # <<<<<<<<<<<<<<
  *             if encoding is not unicode:
+ *                 encoding = _utf8(encoding)
  */
-      __pyx_t_3 = PyUnicode_DecodeUTF8(((const char *)__pyx_v_c_text), xmlBufferLength(__pyx_v_c_buffer), ((char *)"strict")); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 71, __pyx_L14_error)
+      __pyx_t_3 = __Pyx_decode_c_string(((const char *)__pyx_v_c_text), 0, xmlBufferLength(__pyx_v_c_buffer), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 71, __pyx_L14_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_text = __pyx_t_3;
       __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":73
- *             text = python.PyUnicode_DecodeUTF8(
- *                 <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+      /* "src/lxml/serializer.pxi":72
+ *         if needs_conversion:
+ *             text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')
  *             if encoding is not unicode:             # <<<<<<<<<<<<<<
  *                 encoding = _utf8(encoding)
  *                 text = python.PyUnicode_AsEncodedString(
@@ -141112,42 +141145,42 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
       __pyx_t_1 = (__pyx_t_2 != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":74
- *                 <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+        /* "src/lxml/serializer.pxi":73
+ *             text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')
  *             if encoding is not unicode:
  *                 encoding = _utf8(encoding)             # <<<<<<<<<<<<<<
  *                 text = python.PyUnicode_AsEncodedString(
  *                     text, encoding, 'strict')
  */
-        __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 74, __pyx_L14_error)
+        __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 73, __pyx_L14_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "src/lxml/serializer.pxi":76
+        /* "src/lxml/serializer.pxi":75
  *                 encoding = _utf8(encoding)
  *                 text = python.PyUnicode_AsEncodedString(
  *                     text, encoding, 'strict')             # <<<<<<<<<<<<<<
  *         else:
  *             text = (<unsigned char*>c_text)[:tree.xmlBufferLength(c_buffer)]
  */
-        __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_encoding); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(9, 76, __pyx_L14_error)
+        __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_encoding); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(9, 75, __pyx_L14_error)
 
-        /* "src/lxml/serializer.pxi":75
+        /* "src/lxml/serializer.pxi":74
  *             if encoding is not unicode:
  *                 encoding = _utf8(encoding)
  *                 text = python.PyUnicode_AsEncodedString(             # <<<<<<<<<<<<<<
  *                     text, encoding, 'strict')
  *         else:
  */
-        __pyx_t_3 = PyUnicode_AsEncodedString(__pyx_v_text, __pyx_t_6, ((char *)"strict")); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 75, __pyx_L14_error)
+        __pyx_t_3 = PyUnicode_AsEncodedString(__pyx_v_text, __pyx_t_6, ((char *)"strict")); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 74, __pyx_L14_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "src/lxml/serializer.pxi":73
- *             text = python.PyUnicode_DecodeUTF8(
- *                 <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+        /* "src/lxml/serializer.pxi":72
+ *         if needs_conversion:
+ *             text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')
  *             if encoding is not unicode:             # <<<<<<<<<<<<<<
  *                 encoding = _utf8(encoding)
  *                 text = python.PyUnicode_AsEncodedString(
@@ -141158,13 +141191,13 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
  *                     needs_conversion = 1
  * 
  *         if needs_conversion:             # <<<<<<<<<<<<<<
- *             text = python.PyUnicode_DecodeUTF8(
- *                 <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+ *             text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')
+ *             if encoding is not unicode:
  */
       goto __pyx_L22;
     }
 
-    /* "src/lxml/serializer.pxi":78
+    /* "src/lxml/serializer.pxi":77
  *                     text, encoding, 'strict')
  *         else:
  *             text = (<unsigned char*>c_text)[:tree.xmlBufferLength(c_buffer)]             # <<<<<<<<<<<<<<
@@ -141172,7 +141205,7 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
  *         tree.xmlBufferFree(c_buffer)
  */
     /*else*/ {
-      __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)((unsigned char *)__pyx_v_c_text)) + 0, xmlBufferLength(__pyx_v_c_buffer) - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 78, __pyx_L14_error)
+      __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)((unsigned char *)__pyx_v_c_text)) + 0, xmlBufferLength(__pyx_v_c_buffer) - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 77, __pyx_L14_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_text = __pyx_t_3;
       __pyx_t_3 = 0;
@@ -141180,7 +141213,7 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
     __pyx_L22:;
   }
 
-  /* "src/lxml/serializer.pxi":80
+  /* "src/lxml/serializer.pxi":79
  *             text = (<unsigned char*>c_text)[:tree.xmlBufferLength(c_buffer)]
  *     finally:
  *         tree.xmlBufferFree(c_buffer)             # <<<<<<<<<<<<<<
@@ -141229,7 +141262,7 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
     __pyx_L15:;
   }
 
-  /* "src/lxml/serializer.pxi":81
+  /* "src/lxml/serializer.pxi":80
  *     finally:
  *         tree.xmlBufferFree(c_buffer)
  *     return text             # <<<<<<<<<<<<<<
@@ -141264,7 +141297,7 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":84
+/* "src/lxml/serializer.pxi":83
  * 
  * 
  * cdef _tostring(_Element element, encoding, doctype, method,             # <<<<<<<<<<<<<<
@@ -141308,7 +141341,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __Pyx_INCREF(__pyx_v_encoding);
   __Pyx_INCREF(__pyx_v_doctype);
 
-  /* "src/lxml/serializer.pxi":98
+  /* "src/lxml/serializer.pxi":97
  *     cdef int c_method
  *     cdef int error_result
  *     if element is None:             # <<<<<<<<<<<<<<
@@ -141319,7 +141352,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":99
+    /* "src/lxml/serializer.pxi":98
  *     cdef int error_result
  *     if element is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -141330,7 +141363,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":98
+    /* "src/lxml/serializer.pxi":97
  *     cdef int c_method
  *     cdef int error_result
  *     if element is None:             # <<<<<<<<<<<<<<
@@ -141339,26 +141372,26 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":100
+  /* "src/lxml/serializer.pxi":99
  *     if element is None:
  *         return None
  *     _assertValidNode(element)             # <<<<<<<<<<<<<<
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 100, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 99, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":101
+  /* "src/lxml/serializer.pxi":100
  *         return None
  *     _assertValidNode(element)
  *     c_method = _findOutputMethod(method)             # <<<<<<<<<<<<<<
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         return _textToString(element._c_node, encoding, with_tail)
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 101, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 100, __pyx_L1_error)
   __pyx_v_c_method = __pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":102
+  /* "src/lxml/serializer.pxi":101
  *     _assertValidNode(element)
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:             # <<<<<<<<<<<<<<
@@ -141368,7 +141401,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_2 = ((__pyx_v_c_method == __pyx_e_4lxml_5etree_OUTPUT_METHOD_TEXT) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":103
+    /* "src/lxml/serializer.pxi":102
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         return _textToString(element._c_node, encoding, with_tail)             # <<<<<<<<<<<<<<
@@ -141376,13 +141409,13 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  *         c_enc = NULL
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __pyx_f_4lxml_5etree__textToString(__pyx_v_element->_c_node, __pyx_v_encoding, __pyx_v_with_tail); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 103, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__textToString(__pyx_v_element->_c_node, __pyx_v_encoding, __pyx_v_with_tail); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 102, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":102
+    /* "src/lxml/serializer.pxi":101
  *     _assertValidNode(element)
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:             # <<<<<<<<<<<<<<
@@ -141391,7 +141424,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":104
+  /* "src/lxml/serializer.pxi":103
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         return _textToString(element._c_node, encoding, with_tail)
  *     if encoding is None or encoding is unicode:             # <<<<<<<<<<<<<<
@@ -141411,7 +141444,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":105
+    /* "src/lxml/serializer.pxi":104
  *         return _textToString(element._c_node, encoding, with_tail)
  *     if encoding is None or encoding is unicode:
  *         c_enc = NULL             # <<<<<<<<<<<<<<
@@ -141420,7 +141453,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
     __pyx_v_c_enc = NULL;
 
-    /* "src/lxml/serializer.pxi":104
+    /* "src/lxml/serializer.pxi":103
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         return _textToString(element._c_node, encoding, with_tail)
  *     if encoding is None or encoding is unicode:             # <<<<<<<<<<<<<<
@@ -141430,7 +141463,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     goto __pyx_L5;
   }
 
-  /* "src/lxml/serializer.pxi":107
+  /* "src/lxml/serializer.pxi":106
  *         c_enc = NULL
  *     else:
  *         encoding = _utf8(encoding)             # <<<<<<<<<<<<<<
@@ -141438,12 +141471,12 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  *     if doctype is None:
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 107, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 106, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":108
+    /* "src/lxml/serializer.pxi":107
  *     else:
  *         encoding = _utf8(encoding)
  *         c_enc = _cstr(encoding)             # <<<<<<<<<<<<<<
@@ -141454,7 +141487,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   }
   __pyx_L5:;
 
-  /* "src/lxml/serializer.pxi":109
+  /* "src/lxml/serializer.pxi":108
  *         encoding = _utf8(encoding)
  *         c_enc = _cstr(encoding)
  *     if doctype is None:             # <<<<<<<<<<<<<<
@@ -141465,7 +141498,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":110
+    /* "src/lxml/serializer.pxi":109
  *         c_enc = _cstr(encoding)
  *     if doctype is None:
  *         c_doctype = NULL             # <<<<<<<<<<<<<<
@@ -141474,7 +141507,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
     __pyx_v_c_doctype = NULL;
 
-    /* "src/lxml/serializer.pxi":109
+    /* "src/lxml/serializer.pxi":108
  *         encoding = _utf8(encoding)
  *         c_enc = _cstr(encoding)
  *     if doctype is None:             # <<<<<<<<<<<<<<
@@ -141484,7 +141517,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     goto __pyx_L8;
   }
 
-  /* "src/lxml/serializer.pxi":112
+  /* "src/lxml/serializer.pxi":111
  *         c_doctype = NULL
  *     else:
  *         doctype = _utf8(doctype)             # <<<<<<<<<<<<<<
@@ -141492,12 +141525,12 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  *     # it is necessary to *and* find the encoding handler *and* use
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_doctype); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 112, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_doctype); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 111, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":113
+    /* "src/lxml/serializer.pxi":112
  *     else:
  *         doctype = _utf8(doctype)
  *         c_doctype = _xcstr(doctype)             # <<<<<<<<<<<<<<
@@ -141508,7 +141541,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   }
   __pyx_L8:;
 
-  /* "src/lxml/serializer.pxi":116
+  /* "src/lxml/serializer.pxi":115
  *     # it is necessary to *and* find the encoding handler *and* use
  *     # encoding during output
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)             # <<<<<<<<<<<<<<
@@ -141517,7 +141550,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   __pyx_v_enchandler = xmlFindCharEncodingHandler(__pyx_v_c_enc);
 
-  /* "src/lxml/serializer.pxi":117
+  /* "src/lxml/serializer.pxi":116
  *     # encoding during output
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL and c_enc is not NULL:             # <<<<<<<<<<<<<<
@@ -141535,7 +141568,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_L10_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":118
+    /* "src/lxml/serializer.pxi":117
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL and c_enc is not NULL:
  *         if encoding is not None:             # <<<<<<<<<<<<<<
@@ -141546,14 +141579,14 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":119
+      /* "src/lxml/serializer.pxi":118
  *     if enchandler is NULL and c_enc is not NULL:
  *         if encoding is not None:
  *             encoding = encoding.decode('UTF-8')             # <<<<<<<<<<<<<<
  *         raise LookupError, f"unknown encoding: '{encoding}'"
  *     c_buffer = tree.xmlAllocOutputBuffer(enchandler)
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_decode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 119, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_decode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 118, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -141567,13 +141600,13 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
       }
       __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_kp_s_UTF_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_s_UTF_8);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 119, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 118, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "src/lxml/serializer.pxi":118
+      /* "src/lxml/serializer.pxi":117
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL and c_enc is not NULL:
  *         if encoding is not None:             # <<<<<<<<<<<<<<
@@ -141582,14 +141615,14 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
     }
 
-    /* "src/lxml/serializer.pxi":120
+    /* "src/lxml/serializer.pxi":119
  *         if encoding is not None:
  *             encoding = encoding.decode('UTF-8')
  *         raise LookupError, f"unknown encoding: '{encoding}'"             # <<<<<<<<<<<<<<
  *     c_buffer = tree.xmlAllocOutputBuffer(enchandler)
  *     if c_buffer is NULL:
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 120, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 119, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_8 = 0;
     __pyx_t_9 = 127;
@@ -141597,7 +141630,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_t_8 += 19;
     __Pyx_GIVEREF(__pyx_kp_u_unknown_encoding);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_unknown_encoding);
-    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_encoding, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 120, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_encoding, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 119, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_9;
     __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
@@ -141608,14 +141641,14 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_t_8 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__22);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__22);
-    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 120, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 119, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_LookupError, __pyx_t_6, 0, 0);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __PYX_ERR(9, 120, __pyx_L1_error)
+    __PYX_ERR(9, 119, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":117
+    /* "src/lxml/serializer.pxi":116
  *     # encoding during output
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL and c_enc is not NULL:             # <<<<<<<<<<<<<<
@@ -141624,7 +141657,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":121
+  /* "src/lxml/serializer.pxi":120
  *             encoding = encoding.decode('UTF-8')
  *         raise LookupError, f"unknown encoding: '{encoding}'"
  *     c_buffer = tree.xmlAllocOutputBuffer(enchandler)             # <<<<<<<<<<<<<<
@@ -141633,7 +141666,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   __pyx_v_c_buffer = xmlAllocOutputBuffer(__pyx_v_enchandler);
 
-  /* "src/lxml/serializer.pxi":122
+  /* "src/lxml/serializer.pxi":121
  *         raise LookupError, f"unknown encoding: '{encoding}'"
  *     c_buffer = tree.xmlAllocOutputBuffer(enchandler)
  *     if c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -141643,7 +141676,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_2 = ((__pyx_v_c_buffer == NULL) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/serializer.pxi":123
+    /* "src/lxml/serializer.pxi":122
  *     c_buffer = tree.xmlAllocOutputBuffer(enchandler)
  *     if c_buffer is NULL:
  *         tree.xmlCharEncCloseFunc(enchandler)             # <<<<<<<<<<<<<<
@@ -141652,16 +141685,16 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
     (void)(xmlCharEncCloseFunc(__pyx_v_enchandler));
 
-    /* "src/lxml/serializer.pxi":124
+    /* "src/lxml/serializer.pxi":123
  *     if c_buffer is NULL:
  *         tree.xmlCharEncCloseFunc(enchandler)
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  * 
  *     with nogil:
  */
-    PyErr_NoMemory(); __PYX_ERR(9, 124, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(9, 123, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":122
+    /* "src/lxml/serializer.pxi":121
  *         raise LookupError, f"unknown encoding: '{encoding}'"
  *     c_buffer = tree.xmlAllocOutputBuffer(enchandler)
  *     if c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -141670,7 +141703,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":126
+  /* "src/lxml/serializer.pxi":125
  *         raise MemoryError()
  * 
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -141685,7 +141718,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
       #endif
       /*try:*/ {
 
-        /* "src/lxml/serializer.pxi":127
+        /* "src/lxml/serializer.pxi":126
  * 
  *     with nogil:
  *         _writeNodeToBuffer(c_buffer, element._c_node, c_enc, c_doctype, c_method,             # <<<<<<<<<<<<<<
@@ -141694,7 +141727,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
         __pyx_f_4lxml_5etree__writeNodeToBuffer(__pyx_v_c_buffer, __pyx_v_element->_c_node, __pyx_v_c_enc, __pyx_v_c_doctype, __pyx_v_c_method, __pyx_v_write_xml_declaration, __pyx_v_write_complete_document, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_standalone);
 
-        /* "src/lxml/serializer.pxi":130
+        /* "src/lxml/serializer.pxi":129
  *                            write_xml_declaration, write_complete_document,
  *                            pretty_print, with_tail, standalone)
  *         tree.xmlOutputBufferFlush(c_buffer)             # <<<<<<<<<<<<<<
@@ -141703,7 +141736,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
         (void)(xmlOutputBufferFlush(__pyx_v_c_buffer));
 
-        /* "src/lxml/serializer.pxi":131
+        /* "src/lxml/serializer.pxi":130
  *                            pretty_print, with_tail, standalone)
  *         tree.xmlOutputBufferFlush(c_buffer)
  *         if c_buffer.conv is not NULL:             # <<<<<<<<<<<<<<
@@ -141713,7 +141746,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
         __pyx_t_2 = ((__pyx_v_c_buffer->conv != NULL) != 0);
         if (__pyx_t_2) {
 
-          /* "src/lxml/serializer.pxi":132
+          /* "src/lxml/serializer.pxi":131
  *         tree.xmlOutputBufferFlush(c_buffer)
  *         if c_buffer.conv is not NULL:
  *             c_result_buffer = c_buffer.conv             # <<<<<<<<<<<<<<
@@ -141723,7 +141756,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
           __pyx_t_10 = __pyx_v_c_buffer->conv;
           __pyx_v_c_result_buffer = __pyx_t_10;
 
-          /* "src/lxml/serializer.pxi":131
+          /* "src/lxml/serializer.pxi":130
  *                            pretty_print, with_tail, standalone)
  *         tree.xmlOutputBufferFlush(c_buffer)
  *         if c_buffer.conv is not NULL:             # <<<<<<<<<<<<<<
@@ -141733,7 +141766,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
           goto __pyx_L17;
         }
 
-        /* "src/lxml/serializer.pxi":134
+        /* "src/lxml/serializer.pxi":133
  *             c_result_buffer = c_buffer.conv
  *         else:
  *             c_result_buffer = c_buffer.buffer             # <<<<<<<<<<<<<<
@@ -141747,7 +141780,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
         __pyx_L17:;
       }
 
-      /* "src/lxml/serializer.pxi":126
+      /* "src/lxml/serializer.pxi":125
  *         raise MemoryError()
  * 
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -141766,7 +141799,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
       }
   }
 
-  /* "src/lxml/serializer.pxi":136
+  /* "src/lxml/serializer.pxi":135
  *             c_result_buffer = c_buffer.buffer
  * 
  *     error_result = c_buffer.error             # <<<<<<<<<<<<<<
@@ -141776,7 +141809,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_3 = __pyx_v_c_buffer->error;
   __pyx_v_error_result = __pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":137
+  /* "src/lxml/serializer.pxi":136
  * 
  *     error_result = c_buffer.error
  *     if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -141786,7 +141819,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_2 = ((__pyx_v_error_result != XML_ERR_OK) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":138
+    /* "src/lxml/serializer.pxi":137
  *     error_result = c_buffer.error
  *     if error_result != xmlerror.XML_ERR_OK:
  *         tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -141795,18 +141828,18 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
     (void)(xmlOutputBufferClose(__pyx_v_c_buffer));
 
-    /* "src/lxml/serializer.pxi":139
+    /* "src/lxml/serializer.pxi":138
  *     if error_result != xmlerror.XML_ERR_OK:
  *         tree.xmlOutputBufferClose(c_buffer)
  *         _raiseSerialisationError(error_result)             # <<<<<<<<<<<<<<
  * 
  *     try:
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 139, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 138, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":137
+    /* "src/lxml/serializer.pxi":136
  * 
  *     error_result = c_buffer.error
  *     if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -141815,7 +141848,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":141
+  /* "src/lxml/serializer.pxi":140
  *         _raiseSerialisationError(error_result)
  * 
  *     try:             # <<<<<<<<<<<<<<
@@ -141824,7 +141857,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   /*try:*/ {
 
-    /* "src/lxml/serializer.pxi":142
+    /* "src/lxml/serializer.pxi":141
  * 
  *     try:
  *         if encoding is unicode:             # <<<<<<<<<<<<<<
@@ -141835,19 +141868,19 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":144
+      /* "src/lxml/serializer.pxi":143
  *         if encoding is unicode:
  *             result = (<unsigned char*>tree.xmlBufContent(
  *                 c_result_buffer))[:tree.xmlBufUse(c_result_buffer)].decode('UTF-8')             # <<<<<<<<<<<<<<
  *         else:
  *             result = <bytes>(<unsigned char*>tree.xmlBufContent(
  */
-      __pyx_t_6 = __Pyx_decode_c_string(((char const *)((unsigned char *)xmlBufContent(__pyx_v_c_result_buffer))), 0, xmlBufUse(__pyx_v_c_result_buffer), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 144, __pyx_L20_error)
+      __pyx_t_6 = __Pyx_decode_c_string(((char const *)((unsigned char *)xmlBufContent(__pyx_v_c_result_buffer))), 0, xmlBufUse(__pyx_v_c_result_buffer), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 143, __pyx_L20_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_v_result = __pyx_t_6;
       __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":142
+      /* "src/lxml/serializer.pxi":141
  * 
  *     try:
  *         if encoding is unicode:             # <<<<<<<<<<<<<<
@@ -141857,7 +141890,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
       goto __pyx_L22;
     }
 
-    /* "src/lxml/serializer.pxi":146
+    /* "src/lxml/serializer.pxi":145
  *                 c_result_buffer))[:tree.xmlBufUse(c_result_buffer)].decode('UTF-8')
  *         else:
  *             result = <bytes>(<unsigned char*>tree.xmlBufContent(             # <<<<<<<<<<<<<<
@@ -141866,17 +141899,17 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
     /*else*/ {
 
-      /* "src/lxml/serializer.pxi":147
+      /* "src/lxml/serializer.pxi":146
  *         else:
  *             result = <bytes>(<unsigned char*>tree.xmlBufContent(
  *                 c_result_buffer))[:tree.xmlBufUse(c_result_buffer)]             # <<<<<<<<<<<<<<
  *     finally:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  */
-      __pyx_t_6 = __Pyx_PyBytes_FromStringAndSize(((const char*)((unsigned char *)xmlBufContent(__pyx_v_c_result_buffer))) + 0, xmlBufUse(__pyx_v_c_result_buffer) - 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 147, __pyx_L20_error)
+      __pyx_t_6 = __Pyx_PyBytes_FromStringAndSize(((const char*)((unsigned char *)xmlBufContent(__pyx_v_c_result_buffer))) + 0, xmlBufUse(__pyx_v_c_result_buffer) - 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 146, __pyx_L20_error)
       __Pyx_GOTREF(__pyx_t_6);
 
-      /* "src/lxml/serializer.pxi":146
+      /* "src/lxml/serializer.pxi":145
  *                 c_result_buffer))[:tree.xmlBufUse(c_result_buffer)].decode('UTF-8')
  *         else:
  *             result = <bytes>(<unsigned char*>tree.xmlBufContent(             # <<<<<<<<<<<<<<
@@ -141892,7 +141925,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_L22:;
   }
 
-  /* "src/lxml/serializer.pxi":149
+  /* "src/lxml/serializer.pxi":148
  *                 c_result_buffer))[:tree.xmlBufUse(c_result_buffer)]
  *     finally:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -141941,7 +141974,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
     __pyx_L21:;
   }
 
-  /* "src/lxml/serializer.pxi":150
+  /* "src/lxml/serializer.pxi":149
  *     finally:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  *     if error_result == -1:             # <<<<<<<<<<<<<<
@@ -141951,18 +141984,18 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_t_1 = ((__pyx_v_error_result == -1L) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":151
+    /* "src/lxml/serializer.pxi":150
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  *     if error_result == -1:
  *         _raiseSerialisationError(error_result)             # <<<<<<<<<<<<<<
  *     return result
  * 
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 151, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 150, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":150
+    /* "src/lxml/serializer.pxi":149
  *     finally:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  *     if error_result == -1:             # <<<<<<<<<<<<<<
@@ -141971,7 +142004,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":152
+  /* "src/lxml/serializer.pxi":151
  *     if error_result == -1:
  *         _raiseSerialisationError(error_result)
  *     return result             # <<<<<<<<<<<<<<
@@ -141983,7 +142016,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":84
+  /* "src/lxml/serializer.pxi":83
  * 
  * 
  * cdef _tostring(_Element element, encoding, doctype, method,             # <<<<<<<<<<<<<<
@@ -142007,7 +142040,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":154
+/* "src/lxml/serializer.pxi":153
  *     return result
  * 
  * cdef bytes _tostringC14N(element_or_tree, bint exclusive, bint with_comments, inclusive_ns_prefixes):             # <<<<<<<<<<<<<<
@@ -142044,7 +142077,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_tostringC14N", 0);
 
-  /* "src/lxml/serializer.pxi":156
+  /* "src/lxml/serializer.pxi":155
  * cdef bytes _tostringC14N(element_or_tree, bint exclusive, bint with_comments, inclusive_ns_prefixes):
  *     cdef xmlDoc* c_doc
  *     cdef xmlChar* c_buffer = NULL             # <<<<<<<<<<<<<<
@@ -142053,7 +142086,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
   __pyx_v_c_buffer = NULL;
 
-  /* "src/lxml/serializer.pxi":157
+  /* "src/lxml/serializer.pxi":156
  *     cdef xmlDoc* c_doc
  *     cdef xmlChar* c_buffer = NULL
  *     cdef int byte_count = -1             # <<<<<<<<<<<<<<
@@ -142062,7 +142095,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
   __pyx_v_byte_count = -1;
 
-  /* "src/lxml/serializer.pxi":163
+  /* "src/lxml/serializer.pxi":162
  *     cdef xmlChar **c_inclusive_ns_prefixes
  * 
  *     if isinstance(element_or_tree, _Element):             # <<<<<<<<<<<<<<
@@ -142073,16 +142106,16 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":164
+    /* "src/lxml/serializer.pxi":163
  * 
  *     if isinstance(element_or_tree, _Element):
  *         _assertValidNode(<_Element>element_or_tree)             # <<<<<<<<<<<<<<
  *         doc = (<_Element>element_or_tree)._doc
  *         c_doc = _plainFakeRootDoc(doc._c_doc, (<_Element>element_or_tree)._c_node, 0)
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_element_or_tree)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 164, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_element_or_tree)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 163, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":165
+    /* "src/lxml/serializer.pxi":164
  *     if isinstance(element_or_tree, _Element):
  *         _assertValidNode(<_Element>element_or_tree)
  *         doc = (<_Element>element_or_tree)._doc             # <<<<<<<<<<<<<<
@@ -142094,17 +142127,17 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":166
+    /* "src/lxml/serializer.pxi":165
  *         _assertValidNode(<_Element>element_or_tree)
  *         doc = (<_Element>element_or_tree)._doc
  *         c_doc = _plainFakeRootDoc(doc._c_doc, (<_Element>element_or_tree)._c_node, 0)             # <<<<<<<<<<<<<<
  *     else:
  *         doc = _documentOrRaise(element_or_tree)
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__plainFakeRootDoc(__pyx_v_doc->_c_doc, ((struct LxmlElement *)__pyx_v_element_or_tree)->_c_node, 0); if (unlikely(__pyx_t_5 == ((xmlDoc *)NULL))) __PYX_ERR(9, 166, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree__plainFakeRootDoc(__pyx_v_doc->_c_doc, ((struct LxmlElement *)__pyx_v_element_or_tree)->_c_node, 0); if (unlikely(__pyx_t_5 == ((xmlDoc *)NULL))) __PYX_ERR(9, 165, __pyx_L1_error)
     __pyx_v_c_doc = __pyx_t_5;
 
-    /* "src/lxml/serializer.pxi":163
+    /* "src/lxml/serializer.pxi":162
  *     cdef xmlChar **c_inclusive_ns_prefixes
  * 
  *     if isinstance(element_or_tree, _Element):             # <<<<<<<<<<<<<<
@@ -142114,7 +142147,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":168
+  /* "src/lxml/serializer.pxi":167
  *         c_doc = _plainFakeRootDoc(doc._c_doc, (<_Element>element_or_tree)._c_node, 0)
  *     else:
  *         doc = _documentOrRaise(element_or_tree)             # <<<<<<<<<<<<<<
@@ -142122,21 +142155,21 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  *         c_doc = doc._c_doc
  */
   /*else*/ {
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 168, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 167, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":169
+    /* "src/lxml/serializer.pxi":168
  *     else:
  *         doc = _documentOrRaise(element_or_tree)
  *         _assertValidDoc(doc)             # <<<<<<<<<<<<<<
  *         c_doc = doc._c_doc
  * 
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidDoc(__pyx_v_doc); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 169, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidDoc(__pyx_v_doc); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 168, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":170
+    /* "src/lxml/serializer.pxi":169
  *         doc = _documentOrRaise(element_or_tree)
  *         _assertValidDoc(doc)
  *         c_doc = doc._c_doc             # <<<<<<<<<<<<<<
@@ -142148,23 +142181,23 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
   }
   __pyx_L3:;
 
-  /* "src/lxml/serializer.pxi":172
+  /* "src/lxml/serializer.pxi":171
  *         c_doc = doc._c_doc
  * 
  *     c_inclusive_ns_prefixes = _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes) if inclusive_ns_prefixes else NULL             # <<<<<<<<<<<<<<
  *     try:
  *          with nogil:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 172, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 171, __pyx_L1_error)
   if (__pyx_t_2) {
-    __pyx_t_7 = __pyx_f_4lxml_5etree__convert_ns_prefixes(__pyx_v_c_doc->dict, __pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_7 == ((xmlChar **)NULL))) __PYX_ERR(9, 172, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_4lxml_5etree__convert_ns_prefixes(__pyx_v_c_doc->dict, __pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_7 == ((xmlChar **)NULL))) __PYX_ERR(9, 171, __pyx_L1_error)
     __pyx_t_6 = __pyx_t_7;
   } else {
     __pyx_t_6 = NULL;
   }
   __pyx_v_c_inclusive_ns_prefixes = __pyx_t_6;
 
-  /* "src/lxml/serializer.pxi":173
+  /* "src/lxml/serializer.pxi":172
  * 
  *     c_inclusive_ns_prefixes = _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes) if inclusive_ns_prefixes else NULL
  *     try:             # <<<<<<<<<<<<<<
@@ -142173,7 +142206,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
   /*try:*/ {
 
-    /* "src/lxml/serializer.pxi":174
+    /* "src/lxml/serializer.pxi":173
  *     c_inclusive_ns_prefixes = _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes) if inclusive_ns_prefixes else NULL
  *     try:
  *          with nogil:             # <<<<<<<<<<<<<<
@@ -142188,7 +142221,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
         #endif
         /*try:*/ {
 
-          /* "src/lxml/serializer.pxi":175
+          /* "src/lxml/serializer.pxi":174
  *     try:
  *          with nogil:
  *              byte_count = c14n.xmlC14NDocDumpMemory(             # <<<<<<<<<<<<<<
@@ -142198,7 +142231,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
           __pyx_v_byte_count = xmlC14NDocDumpMemory(__pyx_v_c_doc, NULL, __pyx_v_exclusive, __pyx_v_c_inclusive_ns_prefixes, __pyx_v_with_comments, (&__pyx_v_c_buffer));
         }
 
-        /* "src/lxml/serializer.pxi":174
+        /* "src/lxml/serializer.pxi":173
  *     c_inclusive_ns_prefixes = _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes) if inclusive_ns_prefixes else NULL
  *     try:
  *          with nogil:             # <<<<<<<<<<<<<<
@@ -142218,7 +142251,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     }
   }
 
-  /* "src/lxml/serializer.pxi":179
+  /* "src/lxml/serializer.pxi":178
  * 
  *     finally:
  *          _destroyFakeDoc(doc._c_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -142229,7 +142262,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     /*normal exit:*/{
       __pyx_f_4lxml_5etree__destroyFakeDoc(__pyx_v_doc->_c_doc, __pyx_v_c_doc);
 
-      /* "src/lxml/serializer.pxi":180
+      /* "src/lxml/serializer.pxi":179
  *     finally:
  *          _destroyFakeDoc(doc._c_doc, c_doc)
  *          if c_inclusive_ns_prefixes is not NULL:             # <<<<<<<<<<<<<<
@@ -142239,7 +142272,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
       __pyx_t_2 = ((__pyx_v_c_inclusive_ns_prefixes != NULL) != 0);
       if (__pyx_t_2) {
 
-        /* "src/lxml/serializer.pxi":181
+        /* "src/lxml/serializer.pxi":180
  *          _destroyFakeDoc(doc._c_doc, c_doc)
  *          if c_inclusive_ns_prefixes is not NULL:
  *             python.lxml_free(c_inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
@@ -142248,7 +142281,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
         lxml_free(__pyx_v_c_inclusive_ns_prefixes);
 
-        /* "src/lxml/serializer.pxi":180
+        /* "src/lxml/serializer.pxi":179
  *     finally:
  *          _destroyFakeDoc(doc._c_doc, c_doc)
  *          if c_inclusive_ns_prefixes is not NULL:             # <<<<<<<<<<<<<<
@@ -142261,7 +142294,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     __pyx_L6:;
   }
 
-  /* "src/lxml/serializer.pxi":183
+  /* "src/lxml/serializer.pxi":182
  *             python.lxml_free(c_inclusive_ns_prefixes)
  * 
  *     if byte_count < 0 or c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -142279,7 +142312,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":184
+    /* "src/lxml/serializer.pxi":183
  * 
  *     if byte_count < 0 or c_buffer is NULL:
  *         if c_buffer is not NULL:             # <<<<<<<<<<<<<<
@@ -142289,7 +142322,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     __pyx_t_2 = ((__pyx_v_c_buffer != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":185
+      /* "src/lxml/serializer.pxi":184
  *     if byte_count < 0 or c_buffer is NULL:
  *         if c_buffer is not NULL:
  *             tree.xmlFree(c_buffer)             # <<<<<<<<<<<<<<
@@ -142298,7 +142331,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
       xmlFree(__pyx_v_c_buffer);
 
-      /* "src/lxml/serializer.pxi":184
+      /* "src/lxml/serializer.pxi":183
  * 
  *     if byte_count < 0 or c_buffer is NULL:
  *         if c_buffer is not NULL:             # <<<<<<<<<<<<<<
@@ -142307,7 +142340,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
     }
 
-    /* "src/lxml/serializer.pxi":186
+    /* "src/lxml/serializer.pxi":185
  *         if c_buffer is not NULL:
  *             tree.xmlFree(c_buffer)
  *         raise C14NError, u"C14N failed"             # <<<<<<<<<<<<<<
@@ -142315,9 +142348,9 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  *         result = c_buffer[:byte_count]
  */
     __Pyx_Raise(((PyObject *)__pyx_ptype_4lxml_5etree_C14NError), __pyx_kp_u_C14N_failed, 0, 0);
-    __PYX_ERR(9, 186, __pyx_L1_error)
+    __PYX_ERR(9, 185, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":183
+    /* "src/lxml/serializer.pxi":182
  *             python.lxml_free(c_inclusive_ns_prefixes)
  * 
  *     if byte_count < 0 or c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -142326,7 +142359,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
   }
 
-  /* "src/lxml/serializer.pxi":187
+  /* "src/lxml/serializer.pxi":186
  *             tree.xmlFree(c_buffer)
  *         raise C14NError, u"C14N failed"
  *     try:             # <<<<<<<<<<<<<<
@@ -142335,20 +142368,20 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
  */
   /*try:*/ {
 
-    /* "src/lxml/serializer.pxi":188
+    /* "src/lxml/serializer.pxi":187
  *         raise C14NError, u"C14N failed"
  *     try:
  *         result = c_buffer[:byte_count]             # <<<<<<<<<<<<<<
  *     finally:
  *         tree.xmlFree(c_buffer)
  */
-    __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_c_buffer) + 0, __pyx_v_byte_count - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 188, __pyx_L16_error)
+    __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_c_buffer) + 0, __pyx_v_byte_count - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 187, __pyx_L16_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_result = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
   }
 
-  /* "src/lxml/serializer.pxi":190
+  /* "src/lxml/serializer.pxi":189
  *         result = c_buffer[:byte_count]
  *     finally:
  *         tree.xmlFree(c_buffer)             # <<<<<<<<<<<<<<
@@ -142395,7 +142428,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
     __pyx_L17:;
   }
 
-  /* "src/lxml/serializer.pxi":191
+  /* "src/lxml/serializer.pxi":190
  *     finally:
  *         tree.xmlFree(c_buffer)
  *     return result             # <<<<<<<<<<<<<<
@@ -142407,7 +142440,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":154
+  /* "src/lxml/serializer.pxi":153
  *     return result
  * 
  * cdef bytes _tostringC14N(element_or_tree, bint exclusive, bint with_comments, inclusive_ns_prefixes):             # <<<<<<<<<<<<<<
@@ -142428,7 +142461,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostringC14N(PyObject *__pyx_v_element_or
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":193
+/* "src/lxml/serializer.pxi":192
  *     return result
  * 
  * cdef _raiseSerialisationError(int error_result):             # <<<<<<<<<<<<<<
@@ -142451,7 +142484,7 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_raiseSerialisationError", 0);
 
-  /* "src/lxml/serializer.pxi":194
+  /* "src/lxml/serializer.pxi":193
  * 
  * cdef _raiseSerialisationError(int error_result):
  *     if error_result == xmlerror.XML_ERR_NO_MEMORY:             # <<<<<<<<<<<<<<
@@ -142461,16 +142494,16 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
   __pyx_t_1 = ((__pyx_v_error_result == XML_ERR_NO_MEMORY) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":195
+    /* "src/lxml/serializer.pxi":194
  * cdef _raiseSerialisationError(int error_result):
  *     if error_result == xmlerror.XML_ERR_NO_MEMORY:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     message = ErrorTypes._getName(error_result)
  *     if message is None:
  */
-    PyErr_NoMemory(); __PYX_ERR(9, 195, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(9, 194, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":194
+    /* "src/lxml/serializer.pxi":193
  * 
  * cdef _raiseSerialisationError(int error_result):
  *     if error_result == xmlerror.XML_ERR_NO_MEMORY:             # <<<<<<<<<<<<<<
@@ -142479,19 +142512,19 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
  */
   }
 
-  /* "src/lxml/serializer.pxi":196
+  /* "src/lxml/serializer.pxi":195
  *     if error_result == xmlerror.XML_ERR_NO_MEMORY:
  *         raise MemoryError()
  *     message = ErrorTypes._getName(error_result)             # <<<<<<<<<<<<<<
  *     if message is None:
  *         message = f"unknown error {error_result}"
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 196, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getName); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 196, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getName); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_error_result); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 196, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_error_result); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -142506,13 +142539,13 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
   __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 196, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_message = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":197
+  /* "src/lxml/serializer.pxi":196
  *         raise MemoryError()
  *     message = ErrorTypes._getName(error_result)
  *     if message is None:             # <<<<<<<<<<<<<<
@@ -142523,22 +142556,22 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
   __pyx_t_6 = (__pyx_t_1 != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/serializer.pxi":198
+    /* "src/lxml/serializer.pxi":197
  *     message = ErrorTypes._getName(error_result)
  *     if message is None:
  *         message = f"unknown error {error_result}"             # <<<<<<<<<<<<<<
  *     raise SerialisationError, message
  * 
  */
-    __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_v_error_result, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 198, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_v_error_result, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 197, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_unknown_error_2, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 198, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_unknown_error_2, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 197, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":197
+    /* "src/lxml/serializer.pxi":196
  *         raise MemoryError()
  *     message = ErrorTypes._getName(error_result)
  *     if message is None:             # <<<<<<<<<<<<<<
@@ -142547,7 +142580,7 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
  */
   }
 
-  /* "src/lxml/serializer.pxi":199
+  /* "src/lxml/serializer.pxi":198
  *     if message is None:
  *         message = f"unknown error {error_result}"
  *     raise SerialisationError, message             # <<<<<<<<<<<<<<
@@ -142555,9 +142588,9 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
  * ############################################################
  */
   __Pyx_Raise(((PyObject *)__pyx_ptype_4lxml_5etree_SerialisationError), __pyx_v_message, 0, 0);
-  __PYX_ERR(9, 199, __pyx_L1_error)
+  __PYX_ERR(9, 198, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":193
+  /* "src/lxml/serializer.pxi":192
  *     return result
  * 
  * cdef _raiseSerialisationError(int error_result):             # <<<<<<<<<<<<<<
@@ -142579,7 +142612,7 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":204
+/* "src/lxml/serializer.pxi":203
  * # low-level serialisation functions
  * 
  * cdef void _writeDoctype(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -142589,7 +142622,7 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
 
 static void __pyx_f_4lxml_5etree__writeDoctype(xmlOutputBuffer *__pyx_v_c_buffer, const xmlChar *__pyx_v_c_doctype) {
 
-  /* "src/lxml/serializer.pxi":206
+  /* "src/lxml/serializer.pxi":205
  * cdef void _writeDoctype(tree.xmlOutputBuffer* c_buffer,
  *                         const_xmlChar* c_doctype) nogil:
  *     tree.xmlOutputBufferWrite(c_buffer, tree.xmlStrlen(c_doctype),             # <<<<<<<<<<<<<<
@@ -142598,7 +142631,7 @@ static void __pyx_f_4lxml_5etree__writeDoctype(xmlOutputBuffer *__pyx_v_c_buffer
  */
   (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, xmlStrlen(__pyx_v_c_doctype), ((const char *)__pyx_v_c_doctype)));
 
-  /* "src/lxml/serializer.pxi":208
+  /* "src/lxml/serializer.pxi":207
  *     tree.xmlOutputBufferWrite(c_buffer, tree.xmlStrlen(c_doctype),
  *                               <const_char*>c_doctype)
  *     tree.xmlOutputBufferWriteString(c_buffer, "\n")             # <<<<<<<<<<<<<<
@@ -142607,7 +142640,7 @@ static void __pyx_f_4lxml_5etree__writeDoctype(xmlOutputBuffer *__pyx_v_c_buffer
  */
   (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)"\n")));
 
-  /* "src/lxml/serializer.pxi":204
+  /* "src/lxml/serializer.pxi":203
  * # low-level serialisation functions
  * 
  * cdef void _writeDoctype(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -142618,7 +142651,7 @@ static void __pyx_f_4lxml_5etree__writeDoctype(xmlOutputBuffer *__pyx_v_c_buffer
   /* function exit code */
 }
 
-/* "src/lxml/serializer.pxi":210
+/* "src/lxml/serializer.pxi":209
  *     tree.xmlOutputBufferWriteString(c_buffer, "\n")
  * 
  * cdef void _writeNodeToBuffer(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -142634,7 +142667,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   int __pyx_t_3;
   xmlNode *__pyx_t_4;
 
-  /* "src/lxml/serializer.pxi":217
+  /* "src/lxml/serializer.pxi":216
  *                              int standalone) nogil:
  *     cdef xmlNode* c_nsdecl_node
  *     cdef xmlDoc* c_doc = c_node.doc             # <<<<<<<<<<<<<<
@@ -142644,7 +142677,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_1 = __pyx_v_c_node->doc;
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":218
+  /* "src/lxml/serializer.pxi":217
  *     cdef xmlNode* c_nsdecl_node
  *     cdef xmlDoc* c_doc = c_node.doc
  *     if write_xml_declaration and c_method == OUTPUT_METHOD_XML:             # <<<<<<<<<<<<<<
@@ -142662,7 +142695,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":219
+    /* "src/lxml/serializer.pxi":218
  *     cdef xmlDoc* c_doc = c_node.doc
  *     if write_xml_declaration and c_method == OUTPUT_METHOD_XML:
  *         _writeDeclarationToBuffer(c_buffer, c_doc.version, encoding, standalone)             # <<<<<<<<<<<<<<
@@ -142671,7 +142704,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__writeDeclarationToBuffer(__pyx_v_c_buffer, __pyx_v_c_doc->version, __pyx_v_encoding, __pyx_v_standalone);
 
-    /* "src/lxml/serializer.pxi":218
+    /* "src/lxml/serializer.pxi":217
  *     cdef xmlNode* c_nsdecl_node
  *     cdef xmlDoc* c_doc = c_node.doc
  *     if write_xml_declaration and c_method == OUTPUT_METHOD_XML:             # <<<<<<<<<<<<<<
@@ -142680,7 +142713,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":222
+  /* "src/lxml/serializer.pxi":221
  * 
  *     # comments/processing instructions before doctype declaration
  *     if write_complete_document and not c_buffer.error and c_doc.intSubset:             # <<<<<<<<<<<<<<
@@ -142704,7 +142737,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L7_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":223
+    /* "src/lxml/serializer.pxi":222
  *     # comments/processing instructions before doctype declaration
  *     if write_complete_document and not c_buffer.error and c_doc.intSubset:
  *         _writePrevSiblings(c_buffer, <xmlNode*>c_doc.intSubset, encoding, pretty_print)             # <<<<<<<<<<<<<<
@@ -142713,7 +142746,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__writePrevSiblings(__pyx_v_c_buffer, ((xmlNode *)__pyx_v_c_doc->intSubset), __pyx_v_encoding, __pyx_v_pretty_print);
 
-    /* "src/lxml/serializer.pxi":222
+    /* "src/lxml/serializer.pxi":221
  * 
  *     # comments/processing instructions before doctype declaration
  *     if write_complete_document and not c_buffer.error and c_doc.intSubset:             # <<<<<<<<<<<<<<
@@ -142722,7 +142755,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":225
+  /* "src/lxml/serializer.pxi":224
  *         _writePrevSiblings(c_buffer, <xmlNode*>c_doc.intSubset, encoding, pretty_print)
  * 
  *     if c_doctype:             # <<<<<<<<<<<<<<
@@ -142732,7 +142765,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = (__pyx_v_c_doctype != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":226
+    /* "src/lxml/serializer.pxi":225
  * 
  *     if c_doctype:
  *         _writeDoctype(c_buffer, c_doctype)             # <<<<<<<<<<<<<<
@@ -142741,7 +142774,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__writeDoctype(__pyx_v_c_buffer, __pyx_v_c_doctype);
 
-    /* "src/lxml/serializer.pxi":225
+    /* "src/lxml/serializer.pxi":224
  *         _writePrevSiblings(c_buffer, <xmlNode*>c_doc.intSubset, encoding, pretty_print)
  * 
  *     if c_doctype:             # <<<<<<<<<<<<<<
@@ -142750,7 +142783,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":228
+  /* "src/lxml/serializer.pxi":227
  *         _writeDoctype(c_buffer, c_doctype)
  *     # write internal DTD subset, preceding PIs/comments, etc.
  *     if write_complete_document and not c_buffer.error:             # <<<<<<<<<<<<<<
@@ -142768,7 +142801,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":229
+    /* "src/lxml/serializer.pxi":228
  *     # write internal DTD subset, preceding PIs/comments, etc.
  *     if write_complete_document and not c_buffer.error:
  *         if c_doctype is NULL:             # <<<<<<<<<<<<<<
@@ -142778,7 +142811,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_2 = ((__pyx_v_c_doctype == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":230
+      /* "src/lxml/serializer.pxi":229
  *     if write_complete_document and not c_buffer.error:
  *         if c_doctype is NULL:
  *             _writeDtdToBuffer(c_buffer, c_doc, c_node.name, c_method, encoding)             # <<<<<<<<<<<<<<
@@ -142787,7 +142820,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
       __pyx_f_4lxml_5etree__writeDtdToBuffer(__pyx_v_c_buffer, __pyx_v_c_doc, __pyx_v_c_node->name, __pyx_v_c_method, __pyx_v_encoding);
 
-      /* "src/lxml/serializer.pxi":229
+      /* "src/lxml/serializer.pxi":228
  *     # write internal DTD subset, preceding PIs/comments, etc.
  *     if write_complete_document and not c_buffer.error:
  *         if c_doctype is NULL:             # <<<<<<<<<<<<<<
@@ -142796,7 +142829,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     }
 
-    /* "src/lxml/serializer.pxi":231
+    /* "src/lxml/serializer.pxi":230
  *         if c_doctype is NULL:
  *             _writeDtdToBuffer(c_buffer, c_doc, c_node.name, c_method, encoding)
  *         _writePrevSiblings(c_buffer, c_node, encoding, pretty_print)             # <<<<<<<<<<<<<<
@@ -142805,7 +142838,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__writePrevSiblings(__pyx_v_c_buffer, __pyx_v_c_node, __pyx_v_encoding, __pyx_v_pretty_print);
 
-    /* "src/lxml/serializer.pxi":228
+    /* "src/lxml/serializer.pxi":227
  *         _writeDoctype(c_buffer, c_doctype)
  *     # write internal DTD subset, preceding PIs/comments, etc.
  *     if write_complete_document and not c_buffer.error:             # <<<<<<<<<<<<<<
@@ -142814,7 +142847,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":233
+  /* "src/lxml/serializer.pxi":232
  *         _writePrevSiblings(c_buffer, c_node, encoding, pretty_print)
  * 
  *     c_nsdecl_node = c_node             # <<<<<<<<<<<<<<
@@ -142823,7 +142856,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   __pyx_v_c_nsdecl_node = __pyx_v_c_node;
 
-  /* "src/lxml/serializer.pxi":234
+  /* "src/lxml/serializer.pxi":233
  * 
  *     c_nsdecl_node = c_node
  *     if not c_node.parent or c_node.parent.type != tree.XML_DOCUMENT_NODE:             # <<<<<<<<<<<<<<
@@ -142841,7 +142874,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L16_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":237
+    /* "src/lxml/serializer.pxi":236
  *         # copy the node and add namespaces from parents
  *         # this is required to make libxml write them
  *         c_nsdecl_node = tree.xmlCopyNode(c_node, 2)             # <<<<<<<<<<<<<<
@@ -142850,7 +142883,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_v_c_nsdecl_node = xmlCopyNode(__pyx_v_c_node, 2);
 
-    /* "src/lxml/serializer.pxi":238
+    /* "src/lxml/serializer.pxi":237
  *         # this is required to make libxml write them
  *         c_nsdecl_node = tree.xmlCopyNode(c_node, 2)
  *         if not c_nsdecl_node:             # <<<<<<<<<<<<<<
@@ -142860,7 +142893,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_2 = ((!(__pyx_v_c_nsdecl_node != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":239
+      /* "src/lxml/serializer.pxi":238
  *         c_nsdecl_node = tree.xmlCopyNode(c_node, 2)
  *         if not c_nsdecl_node:
  *             c_buffer.error = xmlerror.XML_ERR_NO_MEMORY             # <<<<<<<<<<<<<<
@@ -142869,7 +142902,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
       __pyx_v_c_buffer->error = XML_ERR_NO_MEMORY;
 
-      /* "src/lxml/serializer.pxi":240
+      /* "src/lxml/serializer.pxi":239
  *         if not c_nsdecl_node:
  *             c_buffer.error = xmlerror.XML_ERR_NO_MEMORY
  *             return             # <<<<<<<<<<<<<<
@@ -142878,7 +142911,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":238
+      /* "src/lxml/serializer.pxi":237
  *         # this is required to make libxml write them
  *         c_nsdecl_node = tree.xmlCopyNode(c_node, 2)
  *         if not c_nsdecl_node:             # <<<<<<<<<<<<<<
@@ -142887,7 +142920,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     }
 
-    /* "src/lxml/serializer.pxi":241
+    /* "src/lxml/serializer.pxi":240
  *             c_buffer.error = xmlerror.XML_ERR_NO_MEMORY
  *             return
  *         _copyParentNamespaces(c_node, c_nsdecl_node)             # <<<<<<<<<<<<<<
@@ -142896,7 +142929,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__copyParentNamespaces(__pyx_v_c_node, __pyx_v_c_nsdecl_node);
 
-    /* "src/lxml/serializer.pxi":243
+    /* "src/lxml/serializer.pxi":242
  *         _copyParentNamespaces(c_node, c_nsdecl_node)
  * 
  *         c_nsdecl_node.parent = c_node.parent             # <<<<<<<<<<<<<<
@@ -142906,7 +142939,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_4 = __pyx_v_c_node->parent;
     __pyx_v_c_nsdecl_node->parent = __pyx_t_4;
 
-    /* "src/lxml/serializer.pxi":244
+    /* "src/lxml/serializer.pxi":243
  * 
  *         c_nsdecl_node.parent = c_node.parent
  *         c_nsdecl_node.children = c_node.children             # <<<<<<<<<<<<<<
@@ -142916,7 +142949,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_4 = __pyx_v_c_node->children;
     __pyx_v_c_nsdecl_node->children = __pyx_t_4;
 
-    /* "src/lxml/serializer.pxi":245
+    /* "src/lxml/serializer.pxi":244
  *         c_nsdecl_node.parent = c_node.parent
  *         c_nsdecl_node.children = c_node.children
  *         c_nsdecl_node.last = c_node.last             # <<<<<<<<<<<<<<
@@ -142926,7 +142959,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_4 = __pyx_v_c_node->last;
     __pyx_v_c_nsdecl_node->last = __pyx_t_4;
 
-    /* "src/lxml/serializer.pxi":234
+    /* "src/lxml/serializer.pxi":233
  * 
  *     c_nsdecl_node = c_node
  *     if not c_node.parent or c_node.parent.type != tree.XML_DOCUMENT_NODE:             # <<<<<<<<<<<<<<
@@ -142935,7 +142968,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":248
+  /* "src/lxml/serializer.pxi":247
  * 
  *     # write node
  *     if c_method == OUTPUT_METHOD_HTML:             # <<<<<<<<<<<<<<
@@ -142945,7 +142978,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = ((__pyx_v_c_method == __pyx_e_4lxml_5etree_OUTPUT_METHOD_HTML) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":249
+    /* "src/lxml/serializer.pxi":248
  *     # write node
  *     if c_method == OUTPUT_METHOD_HTML:
  *         tree.htmlNodeDumpFormatOutput(             # <<<<<<<<<<<<<<
@@ -142954,7 +142987,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     htmlNodeDumpFormatOutput(__pyx_v_c_buffer, __pyx_v_c_doc, __pyx_v_c_nsdecl_node, __pyx_v_encoding, __pyx_v_pretty_print);
 
-    /* "src/lxml/serializer.pxi":248
+    /* "src/lxml/serializer.pxi":247
  * 
  *     # write node
  *     if c_method == OUTPUT_METHOD_HTML:             # <<<<<<<<<<<<<<
@@ -142964,7 +142997,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     goto __pyx_L19;
   }
 
-  /* "src/lxml/serializer.pxi":252
+  /* "src/lxml/serializer.pxi":251
  *             c_buffer, c_doc, c_nsdecl_node, encoding, pretty_print)
  *     else:
  *         tree.xmlNodeDumpOutput(             # <<<<<<<<<<<<<<
@@ -142973,7 +143006,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   /*else*/ {
 
-    /* "src/lxml/serializer.pxi":253
+    /* "src/lxml/serializer.pxi":252
  *     else:
  *         tree.xmlNodeDumpOutput(
  *             c_buffer, c_doc, c_nsdecl_node, 0, pretty_print, encoding)             # <<<<<<<<<<<<<<
@@ -142984,7 +143017,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   }
   __pyx_L19:;
 
-  /* "src/lxml/serializer.pxi":255
+  /* "src/lxml/serializer.pxi":254
  *             c_buffer, c_doc, c_nsdecl_node, 0, pretty_print, encoding)
  * 
  *     if c_nsdecl_node is not c_node:             # <<<<<<<<<<<<<<
@@ -142994,7 +143027,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = ((__pyx_v_c_nsdecl_node != __pyx_v_c_node) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":257
+    /* "src/lxml/serializer.pxi":256
  *     if c_nsdecl_node is not c_node:
  *         # clean up
  *         c_nsdecl_node.children = c_nsdecl_node.last = NULL             # <<<<<<<<<<<<<<
@@ -143004,7 +143037,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
     __pyx_v_c_nsdecl_node->children = NULL;
     __pyx_v_c_nsdecl_node->last = NULL;
 
-    /* "src/lxml/serializer.pxi":258
+    /* "src/lxml/serializer.pxi":257
  *         # clean up
  *         c_nsdecl_node.children = c_nsdecl_node.last = NULL
  *         tree.xmlFreeNode(c_nsdecl_node)             # <<<<<<<<<<<<<<
@@ -143013,7 +143046,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     xmlFreeNode(__pyx_v_c_nsdecl_node);
 
-    /* "src/lxml/serializer.pxi":255
+    /* "src/lxml/serializer.pxi":254
  *             c_buffer, c_doc, c_nsdecl_node, 0, pretty_print, encoding)
  * 
  *     if c_nsdecl_node is not c_node:             # <<<<<<<<<<<<<<
@@ -143022,7 +143055,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":260
+  /* "src/lxml/serializer.pxi":259
  *         tree.xmlFreeNode(c_nsdecl_node)
  * 
  *     if c_buffer.error:             # <<<<<<<<<<<<<<
@@ -143032,7 +143065,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = (__pyx_v_c_buffer->error != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":261
+    /* "src/lxml/serializer.pxi":260
  * 
  *     if c_buffer.error:
  *         return             # <<<<<<<<<<<<<<
@@ -143041,7 +143074,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":260
+    /* "src/lxml/serializer.pxi":259
  *         tree.xmlFreeNode(c_nsdecl_node)
  * 
  *     if c_buffer.error:             # <<<<<<<<<<<<<<
@@ -143050,7 +143083,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":264
+  /* "src/lxml/serializer.pxi":263
  * 
  *     # write tail, trailing comments, etc.
  *     if with_tail:             # <<<<<<<<<<<<<<
@@ -143060,7 +143093,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = (__pyx_v_with_tail != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":265
+    /* "src/lxml/serializer.pxi":264
  *     # write tail, trailing comments, etc.
  *     if with_tail:
  *         _writeTail(c_buffer, c_node, encoding, c_method, pretty_print)             # <<<<<<<<<<<<<<
@@ -143069,7 +143102,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__writeTail(__pyx_v_c_buffer, __pyx_v_c_node, __pyx_v_encoding, __pyx_v_c_method, __pyx_v_pretty_print);
 
-    /* "src/lxml/serializer.pxi":264
+    /* "src/lxml/serializer.pxi":263
  * 
  *     # write tail, trailing comments, etc.
  *     if with_tail:             # <<<<<<<<<<<<<<
@@ -143078,7 +143111,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":266
+  /* "src/lxml/serializer.pxi":265
  *     if with_tail:
  *         _writeTail(c_buffer, c_node, encoding, c_method, pretty_print)
  *     if write_complete_document:             # <<<<<<<<<<<<<<
@@ -143088,7 +143121,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = (__pyx_v_write_complete_document != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":267
+    /* "src/lxml/serializer.pxi":266
  *         _writeTail(c_buffer, c_node, encoding, c_method, pretty_print)
  *     if write_complete_document:
  *         _writeNextSiblings(c_buffer, c_node, encoding, pretty_print)             # <<<<<<<<<<<<<<
@@ -143097,7 +143130,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     __pyx_f_4lxml_5etree__writeNextSiblings(__pyx_v_c_buffer, __pyx_v_c_node, __pyx_v_encoding, __pyx_v_pretty_print);
 
-    /* "src/lxml/serializer.pxi":266
+    /* "src/lxml/serializer.pxi":265
  *     if with_tail:
  *         _writeTail(c_buffer, c_node, encoding, c_method, pretty_print)
  *     if write_complete_document:             # <<<<<<<<<<<<<<
@@ -143106,7 +143139,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":268
+  /* "src/lxml/serializer.pxi":267
  *     if write_complete_document:
  *         _writeNextSiblings(c_buffer, c_node, encoding, pretty_print)
  *     if pretty_print:             # <<<<<<<<<<<<<<
@@ -143116,7 +143149,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_2 = (__pyx_v_pretty_print != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":269
+    /* "src/lxml/serializer.pxi":268
  *         _writeNextSiblings(c_buffer, c_node, encoding, pretty_print)
  *     if pretty_print:
  *         tree.xmlOutputBufferWrite(c_buffer, 1, "\n")             # <<<<<<<<<<<<<<
@@ -143125,7 +143158,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 1, ((const char *)"\n")));
 
-    /* "src/lxml/serializer.pxi":268
+    /* "src/lxml/serializer.pxi":267
  *     if write_complete_document:
  *         _writeNextSiblings(c_buffer, c_node, encoding, pretty_print)
  *     if pretty_print:             # <<<<<<<<<<<<<<
@@ -143134,7 +143167,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":210
+  /* "src/lxml/serializer.pxi":209
  *     tree.xmlOutputBufferWriteString(c_buffer, "\n")
  * 
  * cdef void _writeNodeToBuffer(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -143146,7 +143179,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L0:;
 }
 
-/* "src/lxml/serializer.pxi":271
+/* "src/lxml/serializer.pxi":270
  *         tree.xmlOutputBufferWrite(c_buffer, 1, "\n")
  * 
  * cdef void _writeDeclarationToBuffer(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -143157,7 +143190,7 @@ static void __pyx_f_4lxml_5etree__writeNodeToBuffer(xmlOutputBuffer *__pyx_v_c_b
 static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__pyx_v_c_buffer, const xmlChar *__pyx_v_version, const char *__pyx_v_encoding, int __pyx_v_standalone) {
   int __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":274
+  /* "src/lxml/serializer.pxi":273
  *                                     const_xmlChar* version, const_char* encoding,
  *                                     int standalone) nogil:
  *     if version is NULL:             # <<<<<<<<<<<<<<
@@ -143167,7 +143200,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
   __pyx_t_1 = ((__pyx_v_version == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":275
+    /* "src/lxml/serializer.pxi":274
  *                                     int standalone) nogil:
  *     if version is NULL:
  *         version = <unsigned char*>"1.0"             # <<<<<<<<<<<<<<
@@ -143176,7 +143209,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
     __pyx_v_version = ((unsigned char *)((unsigned char *)((char const *)"1.0")));
 
-    /* "src/lxml/serializer.pxi":274
+    /* "src/lxml/serializer.pxi":273
  *                                     const_xmlChar* version, const_char* encoding,
  *                                     int standalone) nogil:
  *     if version is NULL:             # <<<<<<<<<<<<<<
@@ -143185,7 +143218,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
   }
 
-  /* "src/lxml/serializer.pxi":276
+  /* "src/lxml/serializer.pxi":275
  *     if version is NULL:
  *         version = <unsigned char*>"1.0"
  *     tree.xmlOutputBufferWrite(c_buffer, 15, "<?xml version='")             # <<<<<<<<<<<<<<
@@ -143194,7 +143227,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
   (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 15, ((const char *)"<?xml version='")));
 
-  /* "src/lxml/serializer.pxi":277
+  /* "src/lxml/serializer.pxi":276
  *         version = <unsigned char*>"1.0"
  *     tree.xmlOutputBufferWrite(c_buffer, 15, "<?xml version='")
  *     tree.xmlOutputBufferWriteString(c_buffer, <const_char*>version)             # <<<<<<<<<<<<<<
@@ -143203,7 +143236,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
   (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)__pyx_v_version)));
 
-  /* "src/lxml/serializer.pxi":278
+  /* "src/lxml/serializer.pxi":277
  *     tree.xmlOutputBufferWrite(c_buffer, 15, "<?xml version='")
  *     tree.xmlOutputBufferWriteString(c_buffer, <const_char*>version)
  *     tree.xmlOutputBufferWrite(c_buffer, 12, "' encoding='")             # <<<<<<<<<<<<<<
@@ -143212,7 +143245,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
   (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 12, ((const char *)"' encoding='")));
 
-  /* "src/lxml/serializer.pxi":279
+  /* "src/lxml/serializer.pxi":278
  *     tree.xmlOutputBufferWriteString(c_buffer, <const_char*>version)
  *     tree.xmlOutputBufferWrite(c_buffer, 12, "' encoding='")
  *     tree.xmlOutputBufferWriteString(c_buffer, encoding)             # <<<<<<<<<<<<<<
@@ -143221,7 +143254,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
   (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, __pyx_v_encoding));
 
-  /* "src/lxml/serializer.pxi":280
+  /* "src/lxml/serializer.pxi":279
  *     tree.xmlOutputBufferWrite(c_buffer, 12, "' encoding='")
  *     tree.xmlOutputBufferWriteString(c_buffer, encoding)
  *     if standalone == 0:             # <<<<<<<<<<<<<<
@@ -143231,7 +143264,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
   switch (__pyx_v_standalone) {
     case 0:
 
-    /* "src/lxml/serializer.pxi":281
+    /* "src/lxml/serializer.pxi":280
  *     tree.xmlOutputBufferWriteString(c_buffer, encoding)
  *     if standalone == 0:
  *         tree.xmlOutputBufferWrite(c_buffer, 20, "' standalone='no'?>\n")             # <<<<<<<<<<<<<<
@@ -143240,7 +143273,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 20, ((const char *)"' standalone='no'?>\n")));
 
-    /* "src/lxml/serializer.pxi":280
+    /* "src/lxml/serializer.pxi":279
  *     tree.xmlOutputBufferWrite(c_buffer, 12, "' encoding='")
  *     tree.xmlOutputBufferWriteString(c_buffer, encoding)
  *     if standalone == 0:             # <<<<<<<<<<<<<<
@@ -143250,7 +143283,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
     break;
     case 1:
 
-    /* "src/lxml/serializer.pxi":283
+    /* "src/lxml/serializer.pxi":282
  *         tree.xmlOutputBufferWrite(c_buffer, 20, "' standalone='no'?>\n")
  *     elif standalone == 1:
  *         tree.xmlOutputBufferWrite(c_buffer, 21, "' standalone='yes'?>\n")             # <<<<<<<<<<<<<<
@@ -143259,7 +143292,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 21, ((const char *)"' standalone='yes'?>\n")));
 
-    /* "src/lxml/serializer.pxi":282
+    /* "src/lxml/serializer.pxi":281
  *     if standalone == 0:
  *         tree.xmlOutputBufferWrite(c_buffer, 20, "' standalone='no'?>\n")
  *     elif standalone == 1:             # <<<<<<<<<<<<<<
@@ -143269,7 +143302,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
     break;
     default:
 
-    /* "src/lxml/serializer.pxi":285
+    /* "src/lxml/serializer.pxi":284
  *         tree.xmlOutputBufferWrite(c_buffer, 21, "' standalone='yes'?>\n")
  *     else:
  *         tree.xmlOutputBufferWrite(c_buffer, 4, "'?>\n")             # <<<<<<<<<<<<<<
@@ -143280,7 +143313,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
     break;
   }
 
-  /* "src/lxml/serializer.pxi":271
+  /* "src/lxml/serializer.pxi":270
  *         tree.xmlOutputBufferWrite(c_buffer, 1, "\n")
  * 
  * cdef void _writeDeclarationToBuffer(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -143291,7 +143324,7 @@ static void __pyx_f_4lxml_5etree__writeDeclarationToBuffer(xmlOutputBuffer *__py
   /* function exit code */
 }
 
-/* "src/lxml/serializer.pxi":287
+/* "src/lxml/serializer.pxi":286
  *         tree.xmlOutputBufferWrite(c_buffer, 4, "'?>\n")
  * 
  * cdef void _writeDtdToBuffer(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -143312,7 +143345,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   const xmlChar *__pyx_t_4;
   xmlNode *__pyx_t_5;
 
-  /* "src/lxml/serializer.pxi":293
+  /* "src/lxml/serializer.pxi":292
  *     cdef xmlNode* c_node
  *     cdef char* quotechar
  *     c_dtd = c_doc.intSubset             # <<<<<<<<<<<<<<
@@ -143322,7 +143355,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_1 = __pyx_v_c_doc->intSubset;
   __pyx_v_c_dtd = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":294
+  /* "src/lxml/serializer.pxi":293
  *     cdef char* quotechar
  *     c_dtd = c_doc.intSubset
  *     if not c_dtd or not c_dtd.name:             # <<<<<<<<<<<<<<
@@ -143340,7 +143373,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":295
+    /* "src/lxml/serializer.pxi":294
  *     c_dtd = c_doc.intSubset
  *     if not c_dtd or not c_dtd.name:
  *         return             # <<<<<<<<<<<<<<
@@ -143349,7 +143382,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":294
+    /* "src/lxml/serializer.pxi":293
  *     cdef char* quotechar
  *     c_dtd = c_doc.intSubset
  *     if not c_dtd or not c_dtd.name:             # <<<<<<<<<<<<<<
@@ -143358,7 +143391,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   }
 
-  /* "src/lxml/serializer.pxi":299
+  /* "src/lxml/serializer.pxi":298
  *     # Name in document type declaration must match the root element tag.
  *     # For XML, case sensitive match, for HTML insensitive.
  *     if c_method == OUTPUT_METHOD_HTML:             # <<<<<<<<<<<<<<
@@ -143368,7 +143401,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_2 = ((__pyx_v_c_method == __pyx_e_4lxml_5etree_OUTPUT_METHOD_HTML) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":300
+    /* "src/lxml/serializer.pxi":299
  *     # For XML, case sensitive match, for HTML insensitive.
  *     if c_method == OUTPUT_METHOD_HTML:
  *         if tree.xmlStrcasecmp(c_root_name, c_dtd.name) != 0:             # <<<<<<<<<<<<<<
@@ -143378,7 +143411,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_t_2 = ((xmlStrcasecmp(__pyx_v_c_root_name, __pyx_v_c_dtd->name) != 0) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":301
+      /* "src/lxml/serializer.pxi":300
  *     if c_method == OUTPUT_METHOD_HTML:
  *         if tree.xmlStrcasecmp(c_root_name, c_dtd.name) != 0:
  *             return             # <<<<<<<<<<<<<<
@@ -143387,7 +143420,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":300
+      /* "src/lxml/serializer.pxi":299
  *     # For XML, case sensitive match, for HTML insensitive.
  *     if c_method == OUTPUT_METHOD_HTML:
  *         if tree.xmlStrcasecmp(c_root_name, c_dtd.name) != 0:             # <<<<<<<<<<<<<<
@@ -143396,7 +143429,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     }
 
-    /* "src/lxml/serializer.pxi":299
+    /* "src/lxml/serializer.pxi":298
  *     # Name in document type declaration must match the root element tag.
  *     # For XML, case sensitive match, for HTML insensitive.
  *     if c_method == OUTPUT_METHOD_HTML:             # <<<<<<<<<<<<<<
@@ -143406,7 +143439,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     goto __pyx_L6;
   }
 
-  /* "src/lxml/serializer.pxi":303
+  /* "src/lxml/serializer.pxi":302
  *             return
  *     else:
  *         if tree.xmlStrcmp(c_root_name, c_dtd.name) != 0:             # <<<<<<<<<<<<<<
@@ -143417,7 +143450,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_t_2 = ((xmlStrcmp(__pyx_v_c_root_name, __pyx_v_c_dtd->name) != 0) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":304
+      /* "src/lxml/serializer.pxi":303
  *     else:
  *         if tree.xmlStrcmp(c_root_name, c_dtd.name) != 0:
  *             return             # <<<<<<<<<<<<<<
@@ -143426,7 +143459,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":303
+      /* "src/lxml/serializer.pxi":302
  *             return
  *     else:
  *         if tree.xmlStrcmp(c_root_name, c_dtd.name) != 0:             # <<<<<<<<<<<<<<
@@ -143437,7 +143470,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   }
   __pyx_L6:;
 
-  /* "src/lxml/serializer.pxi":306
+  /* "src/lxml/serializer.pxi":305
  *             return
  * 
  *     tree.xmlOutputBufferWrite(c_buffer, 10, "<!DOCTYPE ")             # <<<<<<<<<<<<<<
@@ -143446,7 +143479,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 10, ((const char *)"<!DOCTYPE ")));
 
-  /* "src/lxml/serializer.pxi":307
+  /* "src/lxml/serializer.pxi":306
  * 
  *     tree.xmlOutputBufferWrite(c_buffer, 10, "<!DOCTYPE ")
  *     tree.xmlOutputBufferWriteString(c_buffer, <const_char*>c_dtd.name)             # <<<<<<<<<<<<<<
@@ -143455,7 +143488,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)__pyx_v_c_dtd->name)));
 
-  /* "src/lxml/serializer.pxi":309
+  /* "src/lxml/serializer.pxi":308
  *     tree.xmlOutputBufferWriteString(c_buffer, <const_char*>c_dtd.name)
  * 
  *     cdef const_xmlChar* public_id = c_dtd.ExternalID             # <<<<<<<<<<<<<<
@@ -143465,7 +143498,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_4 = __pyx_v_c_dtd->ExternalID;
   __pyx_v_public_id = __pyx_t_4;
 
-  /* "src/lxml/serializer.pxi":310
+  /* "src/lxml/serializer.pxi":309
  * 
  *     cdef const_xmlChar* public_id = c_dtd.ExternalID
  *     cdef const_xmlChar* sys_url = c_dtd.SystemID             # <<<<<<<<<<<<<<
@@ -143475,7 +143508,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_4 = __pyx_v_c_dtd->SystemID;
   __pyx_v_sys_url = __pyx_t_4;
 
-  /* "src/lxml/serializer.pxi":311
+  /* "src/lxml/serializer.pxi":310
  *     cdef const_xmlChar* public_id = c_dtd.ExternalID
  *     cdef const_xmlChar* sys_url = c_dtd.SystemID
  *     if public_id and public_id[0] == b'\0':             # <<<<<<<<<<<<<<
@@ -143493,7 +143526,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_L10_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":312
+    /* "src/lxml/serializer.pxi":311
  *     cdef const_xmlChar* sys_url = c_dtd.SystemID
  *     if public_id and public_id[0] == b'\0':
  *         public_id = NULL             # <<<<<<<<<<<<<<
@@ -143502,7 +143535,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     __pyx_v_public_id = NULL;
 
-    /* "src/lxml/serializer.pxi":311
+    /* "src/lxml/serializer.pxi":310
  *     cdef const_xmlChar* public_id = c_dtd.ExternalID
  *     cdef const_xmlChar* sys_url = c_dtd.SystemID
  *     if public_id and public_id[0] == b'\0':             # <<<<<<<<<<<<<<
@@ -143511,7 +143544,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   }
 
-  /* "src/lxml/serializer.pxi":313
+  /* "src/lxml/serializer.pxi":312
  *     if public_id and public_id[0] == b'\0':
  *         public_id = NULL
  *     if sys_url and sys_url[0] == b'\0':             # <<<<<<<<<<<<<<
@@ -143529,7 +143562,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_L13_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":314
+    /* "src/lxml/serializer.pxi":313
  *         public_id = NULL
  *     if sys_url and sys_url[0] == b'\0':
  *         sys_url = NULL             # <<<<<<<<<<<<<<
@@ -143538,7 +143571,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     __pyx_v_sys_url = NULL;
 
-    /* "src/lxml/serializer.pxi":313
+    /* "src/lxml/serializer.pxi":312
  *     if public_id and public_id[0] == b'\0':
  *         public_id = NULL
  *     if sys_url and sys_url[0] == b'\0':             # <<<<<<<<<<<<<<
@@ -143547,7 +143580,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   }
 
-  /* "src/lxml/serializer.pxi":316
+  /* "src/lxml/serializer.pxi":315
  *         sys_url = NULL
  * 
  *     if public_id:             # <<<<<<<<<<<<<<
@@ -143557,7 +143590,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_2 = (__pyx_v_public_id != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":317
+    /* "src/lxml/serializer.pxi":316
  * 
  *     if public_id:
  *         tree.xmlOutputBufferWrite(c_buffer, 9, ' PUBLIC "')             # <<<<<<<<<<<<<<
@@ -143566,7 +143599,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 9, ((const char *)" PUBLIC \"")));
 
-    /* "src/lxml/serializer.pxi":318
+    /* "src/lxml/serializer.pxi":317
  *     if public_id:
  *         tree.xmlOutputBufferWrite(c_buffer, 9, ' PUBLIC "')
  *         tree.xmlOutputBufferWriteString(c_buffer, <const_char*>public_id)             # <<<<<<<<<<<<<<
@@ -143575,7 +143608,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)__pyx_v_public_id)));
 
-    /* "src/lxml/serializer.pxi":319
+    /* "src/lxml/serializer.pxi":318
  *         tree.xmlOutputBufferWrite(c_buffer, 9, ' PUBLIC "')
  *         tree.xmlOutputBufferWriteString(c_buffer, <const_char*>public_id)
  *         if sys_url:             # <<<<<<<<<<<<<<
@@ -143585,7 +143618,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_t_2 = (__pyx_v_sys_url != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":320
+      /* "src/lxml/serializer.pxi":319
  *         tree.xmlOutputBufferWriteString(c_buffer, <const_char*>public_id)
  *         if sys_url:
  *             tree.xmlOutputBufferWrite(c_buffer, 2, '" ')             # <<<<<<<<<<<<<<
@@ -143594,7 +143627,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
       (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 2, ((const char *)"\" ")));
 
-      /* "src/lxml/serializer.pxi":319
+      /* "src/lxml/serializer.pxi":318
  *         tree.xmlOutputBufferWrite(c_buffer, 9, ' PUBLIC "')
  *         tree.xmlOutputBufferWriteString(c_buffer, <const_char*>public_id)
  *         if sys_url:             # <<<<<<<<<<<<<<
@@ -143604,7 +143637,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
       goto __pyx_L16;
     }
 
-    /* "src/lxml/serializer.pxi":322
+    /* "src/lxml/serializer.pxi":321
  *             tree.xmlOutputBufferWrite(c_buffer, 2, '" ')
  *         else:
  *             tree.xmlOutputBufferWrite(c_buffer, 1, '"')             # <<<<<<<<<<<<<<
@@ -143616,7 +143649,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     }
     __pyx_L16:;
 
-    /* "src/lxml/serializer.pxi":316
+    /* "src/lxml/serializer.pxi":315
  *         sys_url = NULL
  * 
  *     if public_id:             # <<<<<<<<<<<<<<
@@ -143626,7 +143659,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     goto __pyx_L15;
   }
 
-  /* "src/lxml/serializer.pxi":323
+  /* "src/lxml/serializer.pxi":322
  *         else:
  *             tree.xmlOutputBufferWrite(c_buffer, 1, '"')
  *     elif sys_url:             # <<<<<<<<<<<<<<
@@ -143636,7 +143669,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_2 = (__pyx_v_sys_url != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":324
+    /* "src/lxml/serializer.pxi":323
  *             tree.xmlOutputBufferWrite(c_buffer, 1, '"')
  *     elif sys_url:
  *         tree.xmlOutputBufferWrite(c_buffer, 8, ' SYSTEM ')             # <<<<<<<<<<<<<<
@@ -143645,7 +143678,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 8, ((const char *)" SYSTEM ")));
 
-    /* "src/lxml/serializer.pxi":323
+    /* "src/lxml/serializer.pxi":322
  *         else:
  *             tree.xmlOutputBufferWrite(c_buffer, 1, '"')
  *     elif sys_url:             # <<<<<<<<<<<<<<
@@ -143655,7 +143688,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   }
   __pyx_L15:;
 
-  /* "src/lxml/serializer.pxi":326
+  /* "src/lxml/serializer.pxi":325
  *         tree.xmlOutputBufferWrite(c_buffer, 8, ' SYSTEM ')
  * 
  *     if sys_url:             # <<<<<<<<<<<<<<
@@ -143665,7 +143698,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_2 = (__pyx_v_sys_url != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":327
+    /* "src/lxml/serializer.pxi":326
  * 
  *     if sys_url:
  *         if tree.xmlStrchr(sys_url, b'"'):             # <<<<<<<<<<<<<<
@@ -143675,7 +143708,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_t_2 = (xmlStrchr(__pyx_v_sys_url, '"') != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":328
+      /* "src/lxml/serializer.pxi":327
  *     if sys_url:
  *         if tree.xmlStrchr(sys_url, b'"'):
  *             quotechar = '\''             # <<<<<<<<<<<<<<
@@ -143684,7 +143717,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
       __pyx_v_quotechar = ((char *)"'");
 
-      /* "src/lxml/serializer.pxi":327
+      /* "src/lxml/serializer.pxi":326
  * 
  *     if sys_url:
  *         if tree.xmlStrchr(sys_url, b'"'):             # <<<<<<<<<<<<<<
@@ -143694,7 +143727,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
       goto __pyx_L18;
     }
 
-    /* "src/lxml/serializer.pxi":330
+    /* "src/lxml/serializer.pxi":329
  *             quotechar = '\''
  *         else:
  *             quotechar = '"'             # <<<<<<<<<<<<<<
@@ -143706,7 +143739,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     }
     __pyx_L18:;
 
-    /* "src/lxml/serializer.pxi":331
+    /* "src/lxml/serializer.pxi":330
  *         else:
  *             quotechar = '"'
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)             # <<<<<<<<<<<<<<
@@ -143715,7 +143748,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 1, __pyx_v_quotechar));
 
-    /* "src/lxml/serializer.pxi":332
+    /* "src/lxml/serializer.pxi":331
  *             quotechar = '"'
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)
  *         tree.xmlOutputBufferWriteString(c_buffer, <const_char*>sys_url)             # <<<<<<<<<<<<<<
@@ -143724,7 +143757,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)__pyx_v_sys_url)));
 
-    /* "src/lxml/serializer.pxi":333
+    /* "src/lxml/serializer.pxi":332
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)
  *         tree.xmlOutputBufferWriteString(c_buffer, <const_char*>sys_url)
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)             # <<<<<<<<<<<<<<
@@ -143733,7 +143766,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 1, __pyx_v_quotechar));
 
-    /* "src/lxml/serializer.pxi":326
+    /* "src/lxml/serializer.pxi":325
  *         tree.xmlOutputBufferWrite(c_buffer, 8, ' SYSTEM ')
  * 
  *     if sys_url:             # <<<<<<<<<<<<<<
@@ -143742,7 +143775,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   }
 
-  /* "src/lxml/serializer.pxi":335
+  /* "src/lxml/serializer.pxi":334
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)
  * 
  *     if (not c_dtd.entities and not c_dtd.elements and             # <<<<<<<<<<<<<<
@@ -143762,7 +143795,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     goto __pyx_L20_bool_binop_done;
   }
 
-  /* "src/lxml/serializer.pxi":336
+  /* "src/lxml/serializer.pxi":335
  * 
  *     if (not c_dtd.entities and not c_dtd.elements and
  *            not c_dtd.attributes and not c_dtd.notations and             # <<<<<<<<<<<<<<
@@ -143782,7 +143815,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     goto __pyx_L20_bool_binop_done;
   }
 
-  /* "src/lxml/serializer.pxi":337
+  /* "src/lxml/serializer.pxi":336
  *     if (not c_dtd.entities and not c_dtd.elements and
  *            not c_dtd.attributes and not c_dtd.notations and
  *            not c_dtd.pentities):             # <<<<<<<<<<<<<<
@@ -143793,7 +143826,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_2 = __pyx_t_3;
   __pyx_L20_bool_binop_done:;
 
-  /* "src/lxml/serializer.pxi":335
+  /* "src/lxml/serializer.pxi":334
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)
  * 
  *     if (not c_dtd.entities and not c_dtd.elements and             # <<<<<<<<<<<<<<
@@ -143802,7 +143835,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":338
+    /* "src/lxml/serializer.pxi":337
  *            not c_dtd.attributes and not c_dtd.notations and
  *            not c_dtd.pentities):
  *         tree.xmlOutputBufferWrite(c_buffer, 2, '>\n')             # <<<<<<<<<<<<<<
@@ -143811,7 +143844,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 2, ((const char *)">\n")));
 
-    /* "src/lxml/serializer.pxi":339
+    /* "src/lxml/serializer.pxi":338
  *            not c_dtd.pentities):
  *         tree.xmlOutputBufferWrite(c_buffer, 2, '>\n')
  *         return             # <<<<<<<<<<<<<<
@@ -143820,7 +143853,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":335
+    /* "src/lxml/serializer.pxi":334
  *         tree.xmlOutputBufferWrite(c_buffer, 1, quotechar)
  * 
  *     if (not c_dtd.entities and not c_dtd.elements and             # <<<<<<<<<<<<<<
@@ -143829,7 +143862,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   }
 
-  /* "src/lxml/serializer.pxi":341
+  /* "src/lxml/serializer.pxi":340
  *         return
  * 
  *     tree.xmlOutputBufferWrite(c_buffer, 3, ' [\n')             # <<<<<<<<<<<<<<
@@ -143838,7 +143871,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 3, ((const char *)" [\n")));
 
-  /* "src/lxml/serializer.pxi":342
+  /* "src/lxml/serializer.pxi":341
  * 
  *     tree.xmlOutputBufferWrite(c_buffer, 3, ' [\n')
  *     if c_dtd.notations and not c_buffer.error:             # <<<<<<<<<<<<<<
@@ -143856,7 +143889,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_L26_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":343
+    /* "src/lxml/serializer.pxi":342
  *     tree.xmlOutputBufferWrite(c_buffer, 3, ' [\n')
  *     if c_dtd.notations and not c_buffer.error:
  *         c_buf = tree.xmlBufferCreate()             # <<<<<<<<<<<<<<
@@ -143865,7 +143898,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     __pyx_v_c_buf = xmlBufferCreate();
 
-    /* "src/lxml/serializer.pxi":344
+    /* "src/lxml/serializer.pxi":343
  *     if c_dtd.notations and not c_buffer.error:
  *         c_buf = tree.xmlBufferCreate()
  *         if not c_buf:             # <<<<<<<<<<<<<<
@@ -143875,7 +143908,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_t_2 = ((!(__pyx_v_c_buf != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":345
+      /* "src/lxml/serializer.pxi":344
  *         c_buf = tree.xmlBufferCreate()
  *         if not c_buf:
  *             c_buffer.error = xmlerror.XML_ERR_NO_MEMORY             # <<<<<<<<<<<<<<
@@ -143884,7 +143917,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
       __pyx_v_c_buffer->error = XML_ERR_NO_MEMORY;
 
-      /* "src/lxml/serializer.pxi":346
+      /* "src/lxml/serializer.pxi":345
  *         if not c_buf:
  *             c_buffer.error = xmlerror.XML_ERR_NO_MEMORY
  *             return             # <<<<<<<<<<<<<<
@@ -143893,7 +143926,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":344
+      /* "src/lxml/serializer.pxi":343
  *     if c_dtd.notations and not c_buffer.error:
  *         c_buf = tree.xmlBufferCreate()
  *         if not c_buf:             # <<<<<<<<<<<<<<
@@ -143902,7 +143935,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     }
 
-    /* "src/lxml/serializer.pxi":347
+    /* "src/lxml/serializer.pxi":346
  *             c_buffer.error = xmlerror.XML_ERR_NO_MEMORY
  *             return
  *         tree.xmlDumpNotationTable(c_buf, <tree.xmlNotationTable*>c_dtd.notations)             # <<<<<<<<<<<<<<
@@ -143911,7 +143944,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     xmlDumpNotationTable(__pyx_v_c_buf, ((xmlNotationTable *)__pyx_v_c_dtd->notations));
 
-    /* "src/lxml/serializer.pxi":348
+    /* "src/lxml/serializer.pxi":347
  *             return
  *         tree.xmlDumpNotationTable(c_buf, <tree.xmlNotationTable*>c_dtd.notations)
  *         tree.xmlOutputBufferWrite(             # <<<<<<<<<<<<<<
@@ -143920,7 +143953,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, xmlBufferLength(__pyx_v_c_buf), ((const char *)xmlBufferContent(__pyx_v_c_buf))));
 
-    /* "src/lxml/serializer.pxi":351
+    /* "src/lxml/serializer.pxi":350
  *             c_buffer, tree.xmlBufferLength(c_buf),
  *             <const_char*>tree.xmlBufferContent(c_buf))
  *         tree.xmlBufferFree(c_buf)             # <<<<<<<<<<<<<<
@@ -143929,7 +143962,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     xmlBufferFree(__pyx_v_c_buf);
 
-    /* "src/lxml/serializer.pxi":342
+    /* "src/lxml/serializer.pxi":341
  * 
  *     tree.xmlOutputBufferWrite(c_buffer, 3, ' [\n')
  *     if c_dtd.notations and not c_buffer.error:             # <<<<<<<<<<<<<<
@@ -143938,7 +143971,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   }
 
-  /* "src/lxml/serializer.pxi":352
+  /* "src/lxml/serializer.pxi":351
  *             <const_char*>tree.xmlBufferContent(c_buf))
  *         tree.xmlBufferFree(c_buf)
  *     c_node = c_dtd.children             # <<<<<<<<<<<<<<
@@ -143948,7 +143981,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_t_5 = __pyx_v_c_dtd->children;
   __pyx_v_c_node = __pyx_t_5;
 
-  /* "src/lxml/serializer.pxi":353
+  /* "src/lxml/serializer.pxi":352
  *         tree.xmlBufferFree(c_buf)
  *     c_node = c_dtd.children
  *     while c_node and not c_buffer.error:             # <<<<<<<<<<<<<<
@@ -143967,7 +144000,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_L31_bool_binop_done:;
     if (!__pyx_t_2) break;
 
-    /* "src/lxml/serializer.pxi":354
+    /* "src/lxml/serializer.pxi":353
  *     c_node = c_dtd.children
  *     while c_node and not c_buffer.error:
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_node, 0, 0, encoding)             # <<<<<<<<<<<<<<
@@ -143976,7 +144009,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
     xmlNodeDumpOutput(__pyx_v_c_buffer, __pyx_v_c_node->doc, __pyx_v_c_node, 0, 0, __pyx_v_encoding);
 
-    /* "src/lxml/serializer.pxi":355
+    /* "src/lxml/serializer.pxi":354
  *     while c_node and not c_buffer.error:
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_node, 0, 0, encoding)
  *         c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -143987,7 +144020,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
     __pyx_v_c_node = __pyx_t_5;
   }
 
-  /* "src/lxml/serializer.pxi":356
+  /* "src/lxml/serializer.pxi":355
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_node, 0, 0, encoding)
  *         c_node = c_node.next
  *     tree.xmlOutputBufferWrite(c_buffer, 3, "]>\n")             # <<<<<<<<<<<<<<
@@ -143996,7 +144029,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
  */
   (void)(xmlOutputBufferWrite(__pyx_v_c_buffer, 3, ((const char *)"]>\n")));
 
-  /* "src/lxml/serializer.pxi":287
+  /* "src/lxml/serializer.pxi":286
  *         tree.xmlOutputBufferWrite(c_buffer, 4, "'?>\n")
  * 
  * cdef void _writeDtdToBuffer(tree.xmlOutputBuffer* c_buffer,             # <<<<<<<<<<<<<<
@@ -144008,7 +144041,7 @@ static void __pyx_f_4lxml_5etree__writeDtdToBuffer(xmlOutputBuffer *__pyx_v_c_bu
   __pyx_L0:;
 }
 
-/* "src/lxml/serializer.pxi":358
+/* "src/lxml/serializer.pxi":357
  *     tree.xmlOutputBufferWrite(c_buffer, 3, "]>\n")
  * 
  * cdef void _writeTail(tree.xmlOutputBuffer* c_buffer, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -144022,7 +144055,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
   int __pyx_t_3;
   int __pyx_t_4;
 
-  /* "src/lxml/serializer.pxi":361
+  /* "src/lxml/serializer.pxi":360
  *                      const_char* encoding, int c_method, bint pretty_print) nogil:
  *     u"Write the element tail."
  *     c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -144032,7 +144065,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
   __pyx_t_1 = __pyx_v_c_node->next;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":362
+  /* "src/lxml/serializer.pxi":361
  *     u"Write the element tail."
  *     c_node = c_node.next
  *     while c_node and not c_buffer.error and c_node.type in (             # <<<<<<<<<<<<<<
@@ -144053,7 +144086,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
       goto __pyx_L5_bool_binop_done;
     }
 
-    /* "src/lxml/serializer.pxi":363
+    /* "src/lxml/serializer.pxi":362
  *     c_node = c_node.next
  *     while c_node and not c_buffer.error and c_node.type in (
  *             tree.XML_TEXT_NODE, tree.XML_CDATA_SECTION_NODE):             # <<<<<<<<<<<<<<
@@ -144064,7 +144097,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
       case XML_TEXT_NODE:
       case XML_CDATA_SECTION_NODE:
 
-      /* "src/lxml/serializer.pxi":362
+      /* "src/lxml/serializer.pxi":361
  *     u"Write the element tail."
  *     c_node = c_node.next
  *     while c_node and not c_buffer.error and c_node.type in (             # <<<<<<<<<<<<<<
@@ -144082,7 +144115,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
     __pyx_L5_bool_binop_done:;
     if (!__pyx_t_2) break;
 
-    /* "src/lxml/serializer.pxi":364
+    /* "src/lxml/serializer.pxi":363
  *     while c_node and not c_buffer.error and c_node.type in (
  *             tree.XML_TEXT_NODE, tree.XML_CDATA_SECTION_NODE):
  *         if c_method == OUTPUT_METHOD_HTML:             # <<<<<<<<<<<<<<
@@ -144092,7 +144125,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
     __pyx_t_2 = ((__pyx_v_c_method == __pyx_e_4lxml_5etree_OUTPUT_METHOD_HTML) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":365
+      /* "src/lxml/serializer.pxi":364
  *             tree.XML_TEXT_NODE, tree.XML_CDATA_SECTION_NODE):
  *         if c_method == OUTPUT_METHOD_HTML:
  *             tree.htmlNodeDumpFormatOutput(             # <<<<<<<<<<<<<<
@@ -144101,7 +144134,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
  */
       htmlNodeDumpFormatOutput(__pyx_v_c_buffer, __pyx_v_c_node->doc, __pyx_v_c_node, __pyx_v_encoding, __pyx_v_pretty_print);
 
-      /* "src/lxml/serializer.pxi":364
+      /* "src/lxml/serializer.pxi":363
  *     while c_node and not c_buffer.error and c_node.type in (
  *             tree.XML_TEXT_NODE, tree.XML_CDATA_SECTION_NODE):
  *         if c_method == OUTPUT_METHOD_HTML:             # <<<<<<<<<<<<<<
@@ -144111,7 +144144,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
       goto __pyx_L8;
     }
 
-    /* "src/lxml/serializer.pxi":368
+    /* "src/lxml/serializer.pxi":367
  *                 c_buffer, c_node.doc, c_node, encoding, pretty_print)
  *         else:
  *             tree.xmlNodeDumpOutput(             # <<<<<<<<<<<<<<
@@ -144120,7 +144153,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
  */
     /*else*/ {
 
-      /* "src/lxml/serializer.pxi":369
+      /* "src/lxml/serializer.pxi":368
  *         else:
  *             tree.xmlNodeDumpOutput(
  *                 c_buffer, c_node.doc, c_node, 0, pretty_print, encoding)             # <<<<<<<<<<<<<<
@@ -144131,7 +144164,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
     }
     __pyx_L8:;
 
-    /* "src/lxml/serializer.pxi":370
+    /* "src/lxml/serializer.pxi":369
  *             tree.xmlNodeDumpOutput(
  *                 c_buffer, c_node.doc, c_node, 0, pretty_print, encoding)
  *         c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -144142,7 +144175,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
     __pyx_v_c_node = __pyx_t_1;
   }
 
-  /* "src/lxml/serializer.pxi":358
+  /* "src/lxml/serializer.pxi":357
  *     tree.xmlOutputBufferWrite(c_buffer, 3, "]>\n")
  * 
  * cdef void _writeTail(tree.xmlOutputBuffer* c_buffer, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -144153,7 +144186,7 @@ static void __pyx_f_4lxml_5etree__writeTail(xmlOutputBuffer *__pyx_v_c_buffer, x
   /* function exit code */
 }
 
-/* "src/lxml/serializer.pxi":372
+/* "src/lxml/serializer.pxi":371
  *         c_node = c_node.next
  * 
  * cdef void _writePrevSiblings(tree.xmlOutputBuffer* c_buffer, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -144167,7 +144200,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
   int __pyx_t_2;
   xmlNode *__pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":375
+  /* "src/lxml/serializer.pxi":374
  *                              const_char* encoding, bint pretty_print) nogil:
  *     cdef xmlNode* c_sibling
  *     if c_node.parent and _isElement(c_node.parent):             # <<<<<<<<<<<<<<
@@ -144185,7 +144218,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":376
+    /* "src/lxml/serializer.pxi":375
  *     cdef xmlNode* c_sibling
  *     if c_node.parent and _isElement(c_node.parent):
  *         return             # <<<<<<<<<<<<<<
@@ -144194,7 +144227,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":375
+    /* "src/lxml/serializer.pxi":374
  *                              const_char* encoding, bint pretty_print) nogil:
  *     cdef xmlNode* c_sibling
  *     if c_node.parent and _isElement(c_node.parent):             # <<<<<<<<<<<<<<
@@ -144203,7 +144236,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":378
+  /* "src/lxml/serializer.pxi":377
  *         return
  *     # we are at a root node, so add PI and comment siblings
  *     c_sibling = c_node             # <<<<<<<<<<<<<<
@@ -144212,7 +144245,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
   __pyx_v_c_sibling = __pyx_v_c_node;
 
-  /* "src/lxml/serializer.pxi":379
+  /* "src/lxml/serializer.pxi":378
  *     # we are at a root node, so add PI and comment siblings
  *     c_sibling = c_node
  *     while c_sibling.prev and \             # <<<<<<<<<<<<<<
@@ -144227,7 +144260,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
       goto __pyx_L8_bool_binop_done;
     }
 
-    /* "src/lxml/serializer.pxi":380
+    /* "src/lxml/serializer.pxi":379
  *     c_sibling = c_node
  *     while c_sibling.prev and \
  *             (c_sibling.prev.type == tree.XML_PI_NODE or             # <<<<<<<<<<<<<<
@@ -144238,7 +144271,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
       case XML_PI_NODE:
       case XML_COMMENT_NODE:
 
-      /* "src/lxml/serializer.pxi":381
+      /* "src/lxml/serializer.pxi":380
  *     while c_sibling.prev and \
  *             (c_sibling.prev.type == tree.XML_PI_NODE or
  *              c_sibling.prev.type == tree.XML_COMMENT_NODE):             # <<<<<<<<<<<<<<
@@ -144247,7 +144280,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
       __pyx_t_2 = 1;
 
-      /* "src/lxml/serializer.pxi":380
+      /* "src/lxml/serializer.pxi":379
  *     c_sibling = c_node
  *     while c_sibling.prev and \
  *             (c_sibling.prev.type == tree.XML_PI_NODE or             # <<<<<<<<<<<<<<
@@ -144263,7 +144296,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_L8_bool_binop_done:;
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/serializer.pxi":382
+    /* "src/lxml/serializer.pxi":381
  *             (c_sibling.prev.type == tree.XML_PI_NODE or
  *              c_sibling.prev.type == tree.XML_COMMENT_NODE):
  *         c_sibling = c_sibling.prev             # <<<<<<<<<<<<<<
@@ -144274,7 +144307,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_v_c_sibling = __pyx_t_3;
   }
 
-  /* "src/lxml/serializer.pxi":383
+  /* "src/lxml/serializer.pxi":382
  *              c_sibling.prev.type == tree.XML_COMMENT_NODE):
  *         c_sibling = c_sibling.prev
  *     while c_sibling is not c_node and not c_buffer.error:             # <<<<<<<<<<<<<<
@@ -144293,7 +144326,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_L12_bool_binop_done:;
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/serializer.pxi":384
+    /* "src/lxml/serializer.pxi":383
  *         c_sibling = c_sibling.prev
  *     while c_sibling is not c_node and not c_buffer.error:
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_sibling, 0,             # <<<<<<<<<<<<<<
@@ -144302,7 +144335,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
     xmlNodeDumpOutput(__pyx_v_c_buffer, __pyx_v_c_node->doc, __pyx_v_c_sibling, 0, __pyx_v_pretty_print, __pyx_v_encoding);
 
-    /* "src/lxml/serializer.pxi":386
+    /* "src/lxml/serializer.pxi":385
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_sibling, 0,
  *                                pretty_print, encoding)
  *         if pretty_print:             # <<<<<<<<<<<<<<
@@ -144312,7 +144345,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_1 = (__pyx_v_pretty_print != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":387
+      /* "src/lxml/serializer.pxi":386
  *                                pretty_print, encoding)
  *         if pretty_print:
  *             tree.xmlOutputBufferWriteString(c_buffer, "\n")             # <<<<<<<<<<<<<<
@@ -144321,7 +144354,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
       (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)"\n")));
 
-      /* "src/lxml/serializer.pxi":386
+      /* "src/lxml/serializer.pxi":385
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_sibling, 0,
  *                                pretty_print, encoding)
  *         if pretty_print:             # <<<<<<<<<<<<<<
@@ -144330,7 +144363,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
     }
 
-    /* "src/lxml/serializer.pxi":388
+    /* "src/lxml/serializer.pxi":387
  *         if pretty_print:
  *             tree.xmlOutputBufferWriteString(c_buffer, "\n")
  *         c_sibling = c_sibling.next             # <<<<<<<<<<<<<<
@@ -144341,7 +144374,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_v_c_sibling = __pyx_t_3;
   }
 
-  /* "src/lxml/serializer.pxi":372
+  /* "src/lxml/serializer.pxi":371
  *         c_node = c_node.next
  * 
  * cdef void _writePrevSiblings(tree.xmlOutputBuffer* c_buffer, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -144353,7 +144386,7 @@ static void __pyx_f_4lxml_5etree__writePrevSiblings(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L0:;
 }
 
-/* "src/lxml/serializer.pxi":390
+/* "src/lxml/serializer.pxi":389
  *         c_sibling = c_sibling.next
  * 
  * cdef void _writeNextSiblings(tree.xmlOutputBuffer* c_buffer, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -144367,7 +144400,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
   int __pyx_t_2;
   xmlNode *__pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":393
+  /* "src/lxml/serializer.pxi":392
  *                              const_char* encoding, bint pretty_print) nogil:
  *     cdef xmlNode* c_sibling
  *     if c_node.parent and _isElement(c_node.parent):             # <<<<<<<<<<<<<<
@@ -144385,7 +144418,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":394
+    /* "src/lxml/serializer.pxi":393
  *     cdef xmlNode* c_sibling
  *     if c_node.parent and _isElement(c_node.parent):
  *         return             # <<<<<<<<<<<<<<
@@ -144394,7 +144427,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":393
+    /* "src/lxml/serializer.pxi":392
  *                              const_char* encoding, bint pretty_print) nogil:
  *     cdef xmlNode* c_sibling
  *     if c_node.parent and _isElement(c_node.parent):             # <<<<<<<<<<<<<<
@@ -144403,7 +144436,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
   }
 
-  /* "src/lxml/serializer.pxi":396
+  /* "src/lxml/serializer.pxi":395
  *         return
  *     # we are at a root node, so add PI and comment siblings
  *     c_sibling = c_node.next             # <<<<<<<<<<<<<<
@@ -144413,7 +144446,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
   __pyx_t_3 = __pyx_v_c_node->next;
   __pyx_v_c_sibling = __pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":397
+  /* "src/lxml/serializer.pxi":396
  *     # we are at a root node, so add PI and comment siblings
  *     c_sibling = c_node.next
  *     while not c_buffer.error and c_sibling and \             # <<<<<<<<<<<<<<
@@ -144434,7 +144467,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
       goto __pyx_L8_bool_binop_done;
     }
 
-    /* "src/lxml/serializer.pxi":398
+    /* "src/lxml/serializer.pxi":397
  *     c_sibling = c_node.next
  *     while not c_buffer.error and c_sibling and \
  *             (c_sibling.type == tree.XML_PI_NODE or             # <<<<<<<<<<<<<<
@@ -144445,7 +144478,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
       case XML_PI_NODE:
       case XML_COMMENT_NODE:
 
-      /* "src/lxml/serializer.pxi":399
+      /* "src/lxml/serializer.pxi":398
  *     while not c_buffer.error and c_sibling and \
  *             (c_sibling.type == tree.XML_PI_NODE or
  *              c_sibling.type == tree.XML_COMMENT_NODE):             # <<<<<<<<<<<<<<
@@ -144454,7 +144487,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
       __pyx_t_2 = 1;
 
-      /* "src/lxml/serializer.pxi":398
+      /* "src/lxml/serializer.pxi":397
  *     c_sibling = c_node.next
  *     while not c_buffer.error and c_sibling and \
  *             (c_sibling.type == tree.XML_PI_NODE or             # <<<<<<<<<<<<<<
@@ -144470,7 +144503,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_L8_bool_binop_done:;
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/serializer.pxi":400
+    /* "src/lxml/serializer.pxi":399
  *             (c_sibling.type == tree.XML_PI_NODE or
  *              c_sibling.type == tree.XML_COMMENT_NODE):
  *         if pretty_print:             # <<<<<<<<<<<<<<
@@ -144480,7 +144513,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_t_1 = (__pyx_v_pretty_print != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":401
+      /* "src/lxml/serializer.pxi":400
  *              c_sibling.type == tree.XML_COMMENT_NODE):
  *         if pretty_print:
  *             tree.xmlOutputBufferWriteString(c_buffer, "\n")             # <<<<<<<<<<<<<<
@@ -144489,7 +144522,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
       (void)(xmlOutputBufferWriteString(__pyx_v_c_buffer, ((const char *)"\n")));
 
-      /* "src/lxml/serializer.pxi":400
+      /* "src/lxml/serializer.pxi":399
  *             (c_sibling.type == tree.XML_PI_NODE or
  *              c_sibling.type == tree.XML_COMMENT_NODE):
  *         if pretty_print:             # <<<<<<<<<<<<<<
@@ -144498,7 +144531,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
     }
 
-    /* "src/lxml/serializer.pxi":402
+    /* "src/lxml/serializer.pxi":401
  *         if pretty_print:
  *             tree.xmlOutputBufferWriteString(c_buffer, "\n")
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_sibling, 0,             # <<<<<<<<<<<<<<
@@ -144507,7 +144540,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
  */
     xmlNodeDumpOutput(__pyx_v_c_buffer, __pyx_v_c_node->doc, __pyx_v_c_sibling, 0, __pyx_v_pretty_print, __pyx_v_encoding);
 
-    /* "src/lxml/serializer.pxi":404
+    /* "src/lxml/serializer.pxi":403
  *         tree.xmlNodeDumpOutput(c_buffer, c_node.doc, c_sibling, 0,
  *                                pretty_print, encoding)
  *         c_sibling = c_sibling.next             # <<<<<<<<<<<<<<
@@ -144518,7 +144551,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
     __pyx_v_c_sibling = __pyx_t_3;
   }
 
-  /* "src/lxml/serializer.pxi":390
+  /* "src/lxml/serializer.pxi":389
  *         c_sibling = c_sibling.next
  * 
  * cdef void _writeNextSiblings(tree.xmlOutputBuffer* c_buffer, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -144530,7 +144563,7 @@ static void __pyx_f_4lxml_5etree__writeNextSiblings(xmlOutputBuffer *__pyx_v_c_b
   __pyx_L0:;
 }
 
-/* "src/lxml/serializer.pxi":408
+/* "src/lxml/serializer.pxi":407
  * 
  * # copied and adapted from libxml2
  * cdef unsigned char *xmlSerializeHexCharRef(unsigned char *out, int val):             # <<<<<<<<<<<<<<
@@ -144546,7 +144579,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("xmlSerializeHexCharRef", 0);
 
-  /* "src/lxml/serializer.pxi":412
+  /* "src/lxml/serializer.pxi":411
  *     cdef xmlChar c
  * 
  *     out[0] = '&'             # <<<<<<<<<<<<<<
@@ -144555,7 +144588,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   (__pyx_v_out[0]) = '&';
 
-  /* "src/lxml/serializer.pxi":413
+  /* "src/lxml/serializer.pxi":412
  * 
  *     out[0] = '&'
  *     out += 1             # <<<<<<<<<<<<<<
@@ -144564,7 +144597,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   __pyx_v_out = (__pyx_v_out + 1);
 
-  /* "src/lxml/serializer.pxi":415
+  /* "src/lxml/serializer.pxi":414
  *     out += 1
  * 
  *     out[0] = '#'             # <<<<<<<<<<<<<<
@@ -144573,7 +144606,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   (__pyx_v_out[0]) = '#';
 
-  /* "src/lxml/serializer.pxi":416
+  /* "src/lxml/serializer.pxi":415
  * 
  *     out[0] = '#'
  *     out += 1             # <<<<<<<<<<<<<<
@@ -144582,7 +144615,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   __pyx_v_out = (__pyx_v_out + 1);
 
-  /* "src/lxml/serializer.pxi":418
+  /* "src/lxml/serializer.pxi":417
  *     out += 1
  * 
  *     out[0] = 'x'             # <<<<<<<<<<<<<<
@@ -144591,7 +144624,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   (__pyx_v_out[0]) = 'x';
 
-  /* "src/lxml/serializer.pxi":419
+  /* "src/lxml/serializer.pxi":418
  * 
  *     out[0] = 'x'
  *     out += 1             # <<<<<<<<<<<<<<
@@ -144600,7 +144633,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   __pyx_v_out = (__pyx_v_out + 1);
 
-  /* "src/lxml/serializer.pxi":421
+  /* "src/lxml/serializer.pxi":420
  *     out += 1
  * 
  *     if val < 0x10:             # <<<<<<<<<<<<<<
@@ -144610,7 +144643,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   __pyx_t_1 = ((__pyx_v_val < 0x10) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":422
+    /* "src/lxml/serializer.pxi":421
  * 
  *     if val < 0x10:
  *         ptr = out             # <<<<<<<<<<<<<<
@@ -144619,7 +144652,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_ptr = __pyx_v_out;
 
-    /* "src/lxml/serializer.pxi":421
+    /* "src/lxml/serializer.pxi":420
  *     out += 1
  * 
  *     if val < 0x10:             # <<<<<<<<<<<<<<
@@ -144629,7 +144662,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":423
+  /* "src/lxml/serializer.pxi":422
  *     if val < 0x10:
  *         ptr = out
  *     elif val < 0x100:             # <<<<<<<<<<<<<<
@@ -144639,7 +144672,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   __pyx_t_1 = ((__pyx_v_val < 0x100) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":424
+    /* "src/lxml/serializer.pxi":423
  *         ptr = out
  *     elif val < 0x100:
  *         ptr = out + 1             # <<<<<<<<<<<<<<
@@ -144648,7 +144681,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_ptr = (__pyx_v_out + 1);
 
-    /* "src/lxml/serializer.pxi":423
+    /* "src/lxml/serializer.pxi":422
  *     if val < 0x10:
  *         ptr = out
  *     elif val < 0x100:             # <<<<<<<<<<<<<<
@@ -144658,7 +144691,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":425
+  /* "src/lxml/serializer.pxi":424
  *     elif val < 0x100:
  *         ptr = out + 1
  *     elif val < 0x1000:             # <<<<<<<<<<<<<<
@@ -144668,7 +144701,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   __pyx_t_1 = ((__pyx_v_val < 0x1000) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":426
+    /* "src/lxml/serializer.pxi":425
  *         ptr = out + 1
  *     elif val < 0x1000:
  *         ptr = out + 2             # <<<<<<<<<<<<<<
@@ -144677,7 +144710,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_ptr = (__pyx_v_out + 2);
 
-    /* "src/lxml/serializer.pxi":425
+    /* "src/lxml/serializer.pxi":424
  *     elif val < 0x100:
  *         ptr = out + 1
  *     elif val < 0x1000:             # <<<<<<<<<<<<<<
@@ -144687,7 +144720,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":427
+  /* "src/lxml/serializer.pxi":426
  *     elif val < 0x1000:
  *         ptr = out + 2
  *     elif val < 0x10000:             # <<<<<<<<<<<<<<
@@ -144697,7 +144730,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   __pyx_t_1 = ((__pyx_v_val < 0x10000) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":428
+    /* "src/lxml/serializer.pxi":427
  *         ptr = out + 2
  *     elif val < 0x10000:
  *         ptr = out + 3             # <<<<<<<<<<<<<<
@@ -144706,7 +144739,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_ptr = (__pyx_v_out + 3);
 
-    /* "src/lxml/serializer.pxi":427
+    /* "src/lxml/serializer.pxi":426
  *     elif val < 0x1000:
  *         ptr = out + 2
  *     elif val < 0x10000:             # <<<<<<<<<<<<<<
@@ -144716,7 +144749,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":429
+  /* "src/lxml/serializer.pxi":428
  *     elif val < 0x10000:
  *         ptr = out + 3
  *     elif val < 0x100000:             # <<<<<<<<<<<<<<
@@ -144726,7 +144759,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   __pyx_t_1 = ((__pyx_v_val < 0x100000) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":430
+    /* "src/lxml/serializer.pxi":429
  *         ptr = out + 3
  *     elif val < 0x100000:
  *         ptr = out + 4             # <<<<<<<<<<<<<<
@@ -144735,7 +144768,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_ptr = (__pyx_v_out + 4);
 
-    /* "src/lxml/serializer.pxi":429
+    /* "src/lxml/serializer.pxi":428
  *     elif val < 0x10000:
  *         ptr = out + 3
  *     elif val < 0x100000:             # <<<<<<<<<<<<<<
@@ -144745,7 +144778,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":432
+  /* "src/lxml/serializer.pxi":431
  *         ptr = out + 4
  *     else:
  *         ptr = out + 5             # <<<<<<<<<<<<<<
@@ -144757,7 +144790,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   }
   __pyx_L3:;
 
-  /* "src/lxml/serializer.pxi":434
+  /* "src/lxml/serializer.pxi":433
  *         ptr = out + 5
  * 
  *     out = ptr + 1             # <<<<<<<<<<<<<<
@@ -144766,7 +144799,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   __pyx_v_out = (__pyx_v_ptr + 1);
 
-  /* "src/lxml/serializer.pxi":435
+  /* "src/lxml/serializer.pxi":434
  * 
  *     out = ptr + 1
  *     while val > 0:             # <<<<<<<<<<<<<<
@@ -144777,7 +144810,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     __pyx_t_1 = ((__pyx_v_val > 0) != 0);
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/serializer.pxi":436
+    /* "src/lxml/serializer.pxi":435
  *     out = ptr + 1
  *     while val > 0:
  *         c = (val & 0xF)             # <<<<<<<<<<<<<<
@@ -144786,7 +144819,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_c = (__pyx_v_val & 0xF);
 
-    /* "src/lxml/serializer.pxi":438
+    /* "src/lxml/serializer.pxi":437
  *         c = (val & 0xF)
  * 
  *         if c == 0:             # <<<<<<<<<<<<<<
@@ -144796,7 +144829,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     switch (__pyx_v_c) {
       case 0:
 
-      /* "src/lxml/serializer.pxi":439
+      /* "src/lxml/serializer.pxi":438
  * 
  *         if c == 0:
  *             ptr[0] = '0'             # <<<<<<<<<<<<<<
@@ -144805,7 +144838,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '0';
 
-      /* "src/lxml/serializer.pxi":438
+      /* "src/lxml/serializer.pxi":437
  *         c = (val & 0xF)
  * 
  *         if c == 0:             # <<<<<<<<<<<<<<
@@ -144815,7 +144848,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 1:
 
-      /* "src/lxml/serializer.pxi":441
+      /* "src/lxml/serializer.pxi":440
  *             ptr[0] = '0'
  *         elif c == 1:
  *             ptr[0] = '1'             # <<<<<<<<<<<<<<
@@ -144824,7 +144857,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '1';
 
-      /* "src/lxml/serializer.pxi":440
+      /* "src/lxml/serializer.pxi":439
  *         if c == 0:
  *             ptr[0] = '0'
  *         elif c == 1:             # <<<<<<<<<<<<<<
@@ -144834,7 +144867,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 2:
 
-      /* "src/lxml/serializer.pxi":443
+      /* "src/lxml/serializer.pxi":442
  *             ptr[0] = '1'
  *         elif c == 2:
  *             ptr[0] = '2'             # <<<<<<<<<<<<<<
@@ -144843,7 +144876,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '2';
 
-      /* "src/lxml/serializer.pxi":442
+      /* "src/lxml/serializer.pxi":441
  *         elif c == 1:
  *             ptr[0] = '1'
  *         elif c == 2:             # <<<<<<<<<<<<<<
@@ -144853,7 +144886,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 3:
 
-      /* "src/lxml/serializer.pxi":445
+      /* "src/lxml/serializer.pxi":444
  *             ptr[0] = '2'
  *         elif c == 3:
  *             ptr[0] = '3'             # <<<<<<<<<<<<<<
@@ -144862,7 +144895,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '3';
 
-      /* "src/lxml/serializer.pxi":444
+      /* "src/lxml/serializer.pxi":443
  *         elif c == 2:
  *             ptr[0] = '2'
  *         elif c == 3:             # <<<<<<<<<<<<<<
@@ -144872,7 +144905,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 4:
 
-      /* "src/lxml/serializer.pxi":447
+      /* "src/lxml/serializer.pxi":446
  *             ptr[0] = '3'
  *         elif c == 4:
  *             ptr[0] = '4'             # <<<<<<<<<<<<<<
@@ -144881,7 +144914,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '4';
 
-      /* "src/lxml/serializer.pxi":446
+      /* "src/lxml/serializer.pxi":445
  *         elif c == 3:
  *             ptr[0] = '3'
  *         elif c == 4:             # <<<<<<<<<<<<<<
@@ -144891,7 +144924,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 5:
 
-      /* "src/lxml/serializer.pxi":449
+      /* "src/lxml/serializer.pxi":448
  *             ptr[0] = '4'
  *         elif c == 5:
  *             ptr[0] = '5'             # <<<<<<<<<<<<<<
@@ -144900,7 +144933,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '5';
 
-      /* "src/lxml/serializer.pxi":448
+      /* "src/lxml/serializer.pxi":447
  *         elif c == 4:
  *             ptr[0] = '4'
  *         elif c == 5:             # <<<<<<<<<<<<<<
@@ -144910,7 +144943,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 6:
 
-      /* "src/lxml/serializer.pxi":451
+      /* "src/lxml/serializer.pxi":450
  *             ptr[0] = '5'
  *         elif c == 6:
  *             ptr[0] = '6'             # <<<<<<<<<<<<<<
@@ -144919,7 +144952,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '6';
 
-      /* "src/lxml/serializer.pxi":450
+      /* "src/lxml/serializer.pxi":449
  *         elif c == 5:
  *             ptr[0] = '5'
  *         elif c == 6:             # <<<<<<<<<<<<<<
@@ -144929,7 +144962,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 7:
 
-      /* "src/lxml/serializer.pxi":453
+      /* "src/lxml/serializer.pxi":452
  *             ptr[0] = '6'
  *         elif c == 7:
  *             ptr[0] = '7'             # <<<<<<<<<<<<<<
@@ -144938,7 +144971,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '7';
 
-      /* "src/lxml/serializer.pxi":452
+      /* "src/lxml/serializer.pxi":451
  *         elif c == 6:
  *             ptr[0] = '6'
  *         elif c == 7:             # <<<<<<<<<<<<<<
@@ -144948,7 +144981,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 8:
 
-      /* "src/lxml/serializer.pxi":455
+      /* "src/lxml/serializer.pxi":454
  *             ptr[0] = '7'
  *         elif c == 8:
  *             ptr[0] = '8'             # <<<<<<<<<<<<<<
@@ -144957,7 +144990,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '8';
 
-      /* "src/lxml/serializer.pxi":454
+      /* "src/lxml/serializer.pxi":453
  *         elif c == 7:
  *             ptr[0] = '7'
  *         elif c == 8:             # <<<<<<<<<<<<<<
@@ -144967,7 +145000,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 9:
 
-      /* "src/lxml/serializer.pxi":457
+      /* "src/lxml/serializer.pxi":456
  *             ptr[0] = '8'
  *         elif c == 9:
  *             ptr[0] = '9'             # <<<<<<<<<<<<<<
@@ -144976,7 +145009,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = '9';
 
-      /* "src/lxml/serializer.pxi":456
+      /* "src/lxml/serializer.pxi":455
  *         elif c == 8:
  *             ptr[0] = '8'
  *         elif c == 9:             # <<<<<<<<<<<<<<
@@ -144986,7 +145019,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 0xA:
 
-      /* "src/lxml/serializer.pxi":459
+      /* "src/lxml/serializer.pxi":458
  *             ptr[0] = '9'
  *         elif c == 0xA:
  *             ptr[0] = 'A'             # <<<<<<<<<<<<<<
@@ -144995,7 +145028,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = 'A';
 
-      /* "src/lxml/serializer.pxi":458
+      /* "src/lxml/serializer.pxi":457
  *         elif c == 9:
  *             ptr[0] = '9'
  *         elif c == 0xA:             # <<<<<<<<<<<<<<
@@ -145005,7 +145038,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 0xB:
 
-      /* "src/lxml/serializer.pxi":461
+      /* "src/lxml/serializer.pxi":460
  *             ptr[0] = 'A'
  *         elif c == 0xB:
  *             ptr[0] = 'B'             # <<<<<<<<<<<<<<
@@ -145014,7 +145047,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = 'B';
 
-      /* "src/lxml/serializer.pxi":460
+      /* "src/lxml/serializer.pxi":459
  *         elif c == 0xA:
  *             ptr[0] = 'A'
  *         elif c == 0xB:             # <<<<<<<<<<<<<<
@@ -145024,7 +145057,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 0xC:
 
-      /* "src/lxml/serializer.pxi":463
+      /* "src/lxml/serializer.pxi":462
  *             ptr[0] = 'B'
  *         elif c == 0xC:
  *             ptr[0] = 'C'             # <<<<<<<<<<<<<<
@@ -145033,7 +145066,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = 'C';
 
-      /* "src/lxml/serializer.pxi":462
+      /* "src/lxml/serializer.pxi":461
  *         elif c == 0xB:
  *             ptr[0] = 'B'
  *         elif c == 0xC:             # <<<<<<<<<<<<<<
@@ -145043,7 +145076,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 0xD:
 
-      /* "src/lxml/serializer.pxi":465
+      /* "src/lxml/serializer.pxi":464
  *             ptr[0] = 'C'
  *         elif c == 0xD:
  *             ptr[0] = 'D'             # <<<<<<<<<<<<<<
@@ -145052,7 +145085,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = 'D';
 
-      /* "src/lxml/serializer.pxi":464
+      /* "src/lxml/serializer.pxi":463
  *         elif c == 0xC:
  *             ptr[0] = 'C'
  *         elif c == 0xD:             # <<<<<<<<<<<<<<
@@ -145062,7 +145095,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 0xE:
 
-      /* "src/lxml/serializer.pxi":467
+      /* "src/lxml/serializer.pxi":466
  *             ptr[0] = 'D'
  *         elif c == 0xE:
  *             ptr[0] = 'E'             # <<<<<<<<<<<<<<
@@ -145071,7 +145104,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = 'E';
 
-      /* "src/lxml/serializer.pxi":466
+      /* "src/lxml/serializer.pxi":465
  *         elif c == 0xD:
  *             ptr[0] = 'D'
  *         elif c == 0xE:             # <<<<<<<<<<<<<<
@@ -145081,7 +145114,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       case 0xF:
 
-      /* "src/lxml/serializer.pxi":469
+      /* "src/lxml/serializer.pxi":468
  *             ptr[0] = 'E'
  *         elif c == 0xF:
  *             ptr[0] = 'F'             # <<<<<<<<<<<<<<
@@ -145090,7 +145123,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
       (__pyx_v_ptr[0]) = 'F';
 
-      /* "src/lxml/serializer.pxi":468
+      /* "src/lxml/serializer.pxi":467
  *         elif c == 0xE:
  *             ptr[0] = 'E'
  *         elif c == 0xF:             # <<<<<<<<<<<<<<
@@ -145100,7 +145133,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
       default:
 
-      /* "src/lxml/serializer.pxi":471
+      /* "src/lxml/serializer.pxi":470
  *             ptr[0] = 'F'
  *         else:
  *             ptr[0] = '0'             # <<<<<<<<<<<<<<
@@ -145111,7 +145144,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
       break;
     }
 
-    /* "src/lxml/serializer.pxi":473
+    /* "src/lxml/serializer.pxi":472
  *             ptr[0] = '0'
  * 
  *         ptr -= 1             # <<<<<<<<<<<<<<
@@ -145120,7 +145153,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
     __pyx_v_ptr = (__pyx_v_ptr - 1);
 
-    /* "src/lxml/serializer.pxi":475
+    /* "src/lxml/serializer.pxi":474
  *         ptr -= 1
  * 
  *         val >>= 4             # <<<<<<<<<<<<<<
@@ -145130,7 +145163,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
     __pyx_v_val = (__pyx_v_val >> 4);
   }
 
-  /* "src/lxml/serializer.pxi":477
+  /* "src/lxml/serializer.pxi":476
  *         val >>= 4
  * 
  *     out[0] = ';'             # <<<<<<<<<<<<<<
@@ -145139,7 +145172,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   (__pyx_v_out[0]) = ';';
 
-  /* "src/lxml/serializer.pxi":478
+  /* "src/lxml/serializer.pxi":477
  * 
  *     out[0] = ';'
  *     out += 1             # <<<<<<<<<<<<<<
@@ -145148,7 +145181,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   __pyx_v_out = (__pyx_v_out + 1);
 
-  /* "src/lxml/serializer.pxi":479
+  /* "src/lxml/serializer.pxi":478
  *     out[0] = ';'
  *     out += 1
  *     out[0] = 0             # <<<<<<<<<<<<<<
@@ -145157,7 +145190,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
  */
   (__pyx_v_out[0]) = 0;
 
-  /* "src/lxml/serializer.pxi":481
+  /* "src/lxml/serializer.pxi":480
  *     out[0] = 0
  * 
  *     return out             # <<<<<<<<<<<<<<
@@ -145167,7 +145200,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   __pyx_r = __pyx_v_out;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":408
+  /* "src/lxml/serializer.pxi":407
  * 
  * # copied and adapted from libxml2
  * cdef unsigned char *xmlSerializeHexCharRef(unsigned char *out, int val):             # <<<<<<<<<<<<<<
@@ -145181,7 +145214,7 @@ static unsigned char *__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(unsigned char
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":485
+/* "src/lxml/serializer.pxi":484
  * 
  * # copied and adapted from libxml2 (xmlBufAttrSerializeTxtContent())
  * cdef _write_attr_string(tree.xmlOutputBuffer* buf, const char *string):             # <<<<<<<<<<<<<<
@@ -145208,7 +145241,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_attr_string", 0);
 
-  /* "src/lxml/serializer.pxi":491
+  /* "src/lxml/serializer.pxi":490
  * 
  *     cdef unsigned char tmp[12]
  *     cdef int val = 0             # <<<<<<<<<<<<<<
@@ -145217,7 +145250,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
   __pyx_v_val = 0;
 
-  /* "src/lxml/serializer.pxi":494
+  /* "src/lxml/serializer.pxi":493
  *     cdef int l
  * 
  *     if string == NULL:             # <<<<<<<<<<<<<<
@@ -145227,7 +145260,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
   __pyx_t_1 = ((__pyx_v_string == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":495
+    /* "src/lxml/serializer.pxi":494
  * 
  *     if string == NULL:
  *         return             # <<<<<<<<<<<<<<
@@ -145238,7 +145271,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":494
+    /* "src/lxml/serializer.pxi":493
  *     cdef int l
  * 
  *     if string == NULL:             # <<<<<<<<<<<<<<
@@ -145247,7 +145280,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
   }
 
-  /* "src/lxml/serializer.pxi":497
+  /* "src/lxml/serializer.pxi":496
  *         return
  * 
  *     base = cur = <const char*>string             # <<<<<<<<<<<<<<
@@ -145257,7 +145290,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
   __pyx_v_base = ((char const *)__pyx_v_string);
   __pyx_v_cur = ((char const *)__pyx_v_string);
 
-  /* "src/lxml/serializer.pxi":498
+  /* "src/lxml/serializer.pxi":497
  * 
  *     base = cur = <const char*>string
  *     while cur[0] != 0:             # <<<<<<<<<<<<<<
@@ -145268,7 +145301,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) != 0) != 0);
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/serializer.pxi":499
+    /* "src/lxml/serializer.pxi":498
  *     base = cur = <const char*>string
  *     while cur[0] != 0:
  *         if cur[0] == '\n':             # <<<<<<<<<<<<<<
@@ -145278,7 +145311,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '\n') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":500
+      /* "src/lxml/serializer.pxi":499
  *     while cur[0] != 0:
  *         if cur[0] == '\n':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145288,7 +145321,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":501
+        /* "src/lxml/serializer.pxi":500
  *         if cur[0] == '\n':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145297,7 +145330,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":500
+        /* "src/lxml/serializer.pxi":499
  *     while cur[0] != 0:
  *         if cur[0] == '\n':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145306,7 +145339,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":503
+      /* "src/lxml/serializer.pxi":502
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 5, "&#10;")             # <<<<<<<<<<<<<<
@@ -145315,7 +145348,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 5, ((const char *)"&#10;")));
 
-      /* "src/lxml/serializer.pxi":504
+      /* "src/lxml/serializer.pxi":503
  * 
  *             tree.xmlOutputBufferWrite(buf, 5, "&#10;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145324,7 +145357,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":505
+      /* "src/lxml/serializer.pxi":504
  *             tree.xmlOutputBufferWrite(buf, 5, "&#10;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145333,7 +145366,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":499
+      /* "src/lxml/serializer.pxi":498
  *     base = cur = <const char*>string
  *     while cur[0] != 0:
  *         if cur[0] == '\n':             # <<<<<<<<<<<<<<
@@ -145343,7 +145376,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":507
+    /* "src/lxml/serializer.pxi":506
  *             base = cur
  * 
  *         elif cur[0] == '\r':             # <<<<<<<<<<<<<<
@@ -145353,7 +145386,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '\r') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":508
+      /* "src/lxml/serializer.pxi":507
  * 
  *         elif cur[0] == '\r':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145363,7 +145396,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":509
+        /* "src/lxml/serializer.pxi":508
  *         elif cur[0] == '\r':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145372,7 +145405,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":508
+        /* "src/lxml/serializer.pxi":507
  * 
  *         elif cur[0] == '\r':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145381,7 +145414,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":511
+      /* "src/lxml/serializer.pxi":510
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 5, "&#13;")             # <<<<<<<<<<<<<<
@@ -145390,7 +145423,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 5, ((const char *)"&#13;")));
 
-      /* "src/lxml/serializer.pxi":512
+      /* "src/lxml/serializer.pxi":511
  * 
  *             tree.xmlOutputBufferWrite(buf, 5, "&#13;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145399,7 +145432,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":513
+      /* "src/lxml/serializer.pxi":512
  *             tree.xmlOutputBufferWrite(buf, 5, "&#13;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145408,7 +145441,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":507
+      /* "src/lxml/serializer.pxi":506
  *             base = cur
  * 
  *         elif cur[0] == '\r':             # <<<<<<<<<<<<<<
@@ -145418,7 +145451,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":515
+    /* "src/lxml/serializer.pxi":514
  *             base = cur
  * 
  *         elif cur[0] == '\t':             # <<<<<<<<<<<<<<
@@ -145428,7 +145461,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '\t') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":516
+      /* "src/lxml/serializer.pxi":515
  * 
  *         elif cur[0] == '\t':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145438,7 +145471,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":517
+        /* "src/lxml/serializer.pxi":516
  *         elif cur[0] == '\t':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145447,7 +145480,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":516
+        /* "src/lxml/serializer.pxi":515
  * 
  *         elif cur[0] == '\t':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145456,7 +145489,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":519
+      /* "src/lxml/serializer.pxi":518
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 4, "&#9;")             # <<<<<<<<<<<<<<
@@ -145465,7 +145498,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 4, ((const char *)"&#9;")));
 
-      /* "src/lxml/serializer.pxi":520
+      /* "src/lxml/serializer.pxi":519
  * 
  *             tree.xmlOutputBufferWrite(buf, 4, "&#9;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145474,7 +145507,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":521
+      /* "src/lxml/serializer.pxi":520
  *             tree.xmlOutputBufferWrite(buf, 4, "&#9;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145483,7 +145516,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":515
+      /* "src/lxml/serializer.pxi":514
  *             base = cur
  * 
  *         elif cur[0] == '\t':             # <<<<<<<<<<<<<<
@@ -145493,7 +145526,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":523
+    /* "src/lxml/serializer.pxi":522
  *             base = cur
  * 
  *         elif cur[0] == '"':             # <<<<<<<<<<<<<<
@@ -145503,7 +145536,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '"') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":524
+      /* "src/lxml/serializer.pxi":523
  * 
  *         elif cur[0] == '"':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145513,7 +145546,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":525
+        /* "src/lxml/serializer.pxi":524
  *         elif cur[0] == '"':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145522,7 +145555,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":524
+        /* "src/lxml/serializer.pxi":523
  * 
  *         elif cur[0] == '"':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145531,7 +145564,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":527
+      /* "src/lxml/serializer.pxi":526
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 6, "&quot;")             # <<<<<<<<<<<<<<
@@ -145540,7 +145573,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 6, ((const char *)"&quot;")));
 
-      /* "src/lxml/serializer.pxi":528
+      /* "src/lxml/serializer.pxi":527
  * 
  *             tree.xmlOutputBufferWrite(buf, 6, "&quot;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145549,7 +145582,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":529
+      /* "src/lxml/serializer.pxi":528
  *             tree.xmlOutputBufferWrite(buf, 6, "&quot;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145558,7 +145591,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":523
+      /* "src/lxml/serializer.pxi":522
  *             base = cur
  * 
  *         elif cur[0] == '"':             # <<<<<<<<<<<<<<
@@ -145568,7 +145601,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":531
+    /* "src/lxml/serializer.pxi":530
  *             base = cur
  * 
  *         elif cur[0] == '<':             # <<<<<<<<<<<<<<
@@ -145578,7 +145611,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '<') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":532
+      /* "src/lxml/serializer.pxi":531
  * 
  *         elif cur[0] == '<':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145588,7 +145621,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":533
+        /* "src/lxml/serializer.pxi":532
  *         elif cur[0] == '<':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145597,7 +145630,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":532
+        /* "src/lxml/serializer.pxi":531
  * 
  *         elif cur[0] == '<':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145606,7 +145639,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":535
+      /* "src/lxml/serializer.pxi":534
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 4, "&lt;")             # <<<<<<<<<<<<<<
@@ -145615,7 +145648,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 4, ((const char *)"&lt;")));
 
-      /* "src/lxml/serializer.pxi":536
+      /* "src/lxml/serializer.pxi":535
  * 
  *             tree.xmlOutputBufferWrite(buf, 4, "&lt;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145624,7 +145657,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":537
+      /* "src/lxml/serializer.pxi":536
  *             tree.xmlOutputBufferWrite(buf, 4, "&lt;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145633,7 +145666,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":531
+      /* "src/lxml/serializer.pxi":530
  *             base = cur
  * 
  *         elif cur[0] == '<':             # <<<<<<<<<<<<<<
@@ -145643,7 +145676,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":539
+    /* "src/lxml/serializer.pxi":538
  *             base = cur
  * 
  *         elif cur[0] == '>':             # <<<<<<<<<<<<<<
@@ -145653,7 +145686,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '>') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":540
+      /* "src/lxml/serializer.pxi":539
  * 
  *         elif cur[0] == '>':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145663,7 +145696,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":541
+        /* "src/lxml/serializer.pxi":540
  *         elif cur[0] == '>':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145672,7 +145705,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":540
+        /* "src/lxml/serializer.pxi":539
  * 
  *         elif cur[0] == '>':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145681,7 +145714,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":543
+      /* "src/lxml/serializer.pxi":542
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 4, "&gt;")             # <<<<<<<<<<<<<<
@@ -145690,7 +145723,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 4, ((const char *)"&gt;")));
 
-      /* "src/lxml/serializer.pxi":544
+      /* "src/lxml/serializer.pxi":543
  * 
  *             tree.xmlOutputBufferWrite(buf, 4, "&gt;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145699,7 +145732,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":545
+      /* "src/lxml/serializer.pxi":544
  *             tree.xmlOutputBufferWrite(buf, 4, "&gt;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145708,7 +145741,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":539
+      /* "src/lxml/serializer.pxi":538
  *             base = cur
  * 
  *         elif cur[0] == '>':             # <<<<<<<<<<<<<<
@@ -145718,7 +145751,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":546
+    /* "src/lxml/serializer.pxi":545
  *             cur += 1
  *             base = cur
  *         elif cur[0] == '&':             # <<<<<<<<<<<<<<
@@ -145728,7 +145761,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_t_1 = (((__pyx_v_cur[0]) == '&') != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":547
+      /* "src/lxml/serializer.pxi":546
  *             base = cur
  *         elif cur[0] == '&':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145738,7 +145771,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":548
+        /* "src/lxml/serializer.pxi":547
  *         elif cur[0] == '&':
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145747,7 +145780,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":547
+        /* "src/lxml/serializer.pxi":546
  *             base = cur
  *         elif cur[0] == '&':
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145756,7 +145789,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":550
+      /* "src/lxml/serializer.pxi":549
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             tree.xmlOutputBufferWrite(buf, 5, "&amp;")             # <<<<<<<<<<<<<<
@@ -145765,7 +145798,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(xmlOutputBufferWrite(__pyx_v_buf, 5, ((const char *)"&amp;")));
 
-      /* "src/lxml/serializer.pxi":551
+      /* "src/lxml/serializer.pxi":550
  * 
  *             tree.xmlOutputBufferWrite(buf, 5, "&amp;")
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -145774,7 +145807,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + 1);
 
-      /* "src/lxml/serializer.pxi":552
+      /* "src/lxml/serializer.pxi":551
  *             tree.xmlOutputBufferWrite(buf, 5, "&amp;")
  *             cur += 1
  *             base = cur             # <<<<<<<<<<<<<<
@@ -145783,7 +145816,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":546
+      /* "src/lxml/serializer.pxi":545
  *             cur += 1
  *             base = cur
  *         elif cur[0] == '&':             # <<<<<<<<<<<<<<
@@ -145793,7 +145826,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":554
+    /* "src/lxml/serializer.pxi":553
  *             base = cur
  * 
  *         elif (<const unsigned char>cur[0] >= 0x80) and (cur[1] != 0):             # <<<<<<<<<<<<<<
@@ -145811,7 +145844,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_L14_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":556
+      /* "src/lxml/serializer.pxi":555
  *         elif (<const unsigned char>cur[0] >= 0x80) and (cur[1] != 0):
  * 
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145821,7 +145854,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":557
+        /* "src/lxml/serializer.pxi":556
  * 
  *             if base != cur:
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -145830,7 +145863,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-        /* "src/lxml/serializer.pxi":556
+        /* "src/lxml/serializer.pxi":555
  *         elif (<const unsigned char>cur[0] >= 0x80) and (cur[1] != 0):
  * 
  *             if base != cur:             # <<<<<<<<<<<<<<
@@ -145839,7 +145872,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":559
+      /* "src/lxml/serializer.pxi":558
  *                 tree.xmlOutputBufferWrite(buf, cur - base, base)
  * 
  *             ucur = <const unsigned char *>cur             # <<<<<<<<<<<<<<
@@ -145848,7 +145881,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_ucur = ((unsigned char const *)__pyx_v_cur);
 
-      /* "src/lxml/serializer.pxi":561
+      /* "src/lxml/serializer.pxi":560
  *             ucur = <const unsigned char *>cur
  * 
  *             if ucur[0] < 0xC0:             # <<<<<<<<<<<<<<
@@ -145858,7 +145891,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = (((__pyx_v_ucur[0]) < 0xC0) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":563
+        /* "src/lxml/serializer.pxi":562
  *             if ucur[0] < 0xC0:
  *                 # invalid UTF-8 sequence
  *                 val = ucur[0]             # <<<<<<<<<<<<<<
@@ -145867,7 +145900,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_ucur[0]);
 
-        /* "src/lxml/serializer.pxi":564
+        /* "src/lxml/serializer.pxi":563
  *                 # invalid UTF-8 sequence
  *                 val = ucur[0]
  *                 l = 1             # <<<<<<<<<<<<<<
@@ -145876,7 +145909,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_l = 1;
 
-        /* "src/lxml/serializer.pxi":561
+        /* "src/lxml/serializer.pxi":560
  *             ucur = <const unsigned char *>cur
  * 
  *             if ucur[0] < 0xC0:             # <<<<<<<<<<<<<<
@@ -145886,7 +145919,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
         goto __pyx_L17;
       }
 
-      /* "src/lxml/serializer.pxi":566
+      /* "src/lxml/serializer.pxi":565
  *                 l = 1
  * 
  *             elif ucur[0] < 0xE0:             # <<<<<<<<<<<<<<
@@ -145896,7 +145929,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_1 = (((__pyx_v_ucur[0]) < 0xE0) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":567
+        /* "src/lxml/serializer.pxi":566
  * 
  *             elif ucur[0] < 0xE0:
  *                 val = (ucur[0]) & 0x1F             # <<<<<<<<<<<<<<
@@ -145905,7 +145938,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = ((__pyx_v_ucur[0]) & 0x1F);
 
-        /* "src/lxml/serializer.pxi":568
+        /* "src/lxml/serializer.pxi":567
  *             elif ucur[0] < 0xE0:
  *                 val = (ucur[0]) & 0x1F
  *                 val <<= 6             # <<<<<<<<<<<<<<
@@ -145914,7 +145947,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val << 6);
 
-        /* "src/lxml/serializer.pxi":569
+        /* "src/lxml/serializer.pxi":568
  *                 val = (ucur[0]) & 0x1F
  *                 val <<= 6
  *                 val |= (ucur[1]) & 0x3F             # <<<<<<<<<<<<<<
@@ -145923,7 +145956,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val | ((__pyx_v_ucur[1]) & 0x3F));
 
-        /* "src/lxml/serializer.pxi":570
+        /* "src/lxml/serializer.pxi":569
  *                 val <<= 6
  *                 val |= (ucur[1]) & 0x3F
  *                 l = 2             # <<<<<<<<<<<<<<
@@ -145932,7 +145965,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_l = 2;
 
-        /* "src/lxml/serializer.pxi":566
+        /* "src/lxml/serializer.pxi":565
  *                 l = 1
  * 
  *             elif ucur[0] < 0xE0:             # <<<<<<<<<<<<<<
@@ -145942,7 +145975,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
         goto __pyx_L17;
       }
 
-      /* "src/lxml/serializer.pxi":572
+      /* "src/lxml/serializer.pxi":571
  *                 l = 2
  * 
  *             elif (ucur[0] < 0xF0) and (ucur[2] != 0):             # <<<<<<<<<<<<<<
@@ -145960,7 +145993,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_L18_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":573
+        /* "src/lxml/serializer.pxi":572
  * 
  *             elif (ucur[0] < 0xF0) and (ucur[2] != 0):
  *                 val = (ucur[0]) & 0x0F             # <<<<<<<<<<<<<<
@@ -145969,7 +146002,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = ((__pyx_v_ucur[0]) & 0x0F);
 
-        /* "src/lxml/serializer.pxi":574
+        /* "src/lxml/serializer.pxi":573
  *             elif (ucur[0] < 0xF0) and (ucur[2] != 0):
  *                 val = (ucur[0]) & 0x0F
  *                 val <<= 6             # <<<<<<<<<<<<<<
@@ -145978,7 +146011,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val << 6);
 
-        /* "src/lxml/serializer.pxi":575
+        /* "src/lxml/serializer.pxi":574
  *                 val = (ucur[0]) & 0x0F
  *                 val <<= 6
  *                 val |= (ucur[1]) & 0x3F             # <<<<<<<<<<<<<<
@@ -145987,7 +146020,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val | ((__pyx_v_ucur[1]) & 0x3F));
 
-        /* "src/lxml/serializer.pxi":576
+        /* "src/lxml/serializer.pxi":575
  *                 val <<= 6
  *                 val |= (ucur[1]) & 0x3F
  *                 val <<= 6             # <<<<<<<<<<<<<<
@@ -145996,7 +146029,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val << 6);
 
-        /* "src/lxml/serializer.pxi":577
+        /* "src/lxml/serializer.pxi":576
  *                 val |= (ucur[1]) & 0x3F
  *                 val <<= 6
  *                 val |= (ucur[2]) & 0x3F             # <<<<<<<<<<<<<<
@@ -146005,7 +146038,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val | ((__pyx_v_ucur[2]) & 0x3F));
 
-        /* "src/lxml/serializer.pxi":578
+        /* "src/lxml/serializer.pxi":577
  *                 val <<= 6
  *                 val |= (ucur[2]) & 0x3F
  *                 l = 3             # <<<<<<<<<<<<<<
@@ -146014,7 +146047,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_l = 3;
 
-        /* "src/lxml/serializer.pxi":572
+        /* "src/lxml/serializer.pxi":571
  *                 l = 2
  * 
  *             elif (ucur[0] < 0xF0) and (ucur[2] != 0):             # <<<<<<<<<<<<<<
@@ -146024,7 +146057,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
         goto __pyx_L17;
       }
 
-      /* "src/lxml/serializer.pxi":580
+      /* "src/lxml/serializer.pxi":579
  *                 l = 3
  * 
  *             elif (ucur[0] < 0xF8) and (ucur[2] != 0) and (ucur[3] != 0):             # <<<<<<<<<<<<<<
@@ -146048,7 +146081,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_L20_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":581
+        /* "src/lxml/serializer.pxi":580
  * 
  *             elif (ucur[0] < 0xF8) and (ucur[2] != 0) and (ucur[3] != 0):
  *                 val = (ucur[0]) & 0x07             # <<<<<<<<<<<<<<
@@ -146057,7 +146090,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = ((__pyx_v_ucur[0]) & 0x07);
 
-        /* "src/lxml/serializer.pxi":582
+        /* "src/lxml/serializer.pxi":581
  *             elif (ucur[0] < 0xF8) and (ucur[2] != 0) and (ucur[3] != 0):
  *                 val = (ucur[0]) & 0x07
  *                 val <<= 6             # <<<<<<<<<<<<<<
@@ -146066,7 +146099,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val << 6);
 
-        /* "src/lxml/serializer.pxi":583
+        /* "src/lxml/serializer.pxi":582
  *                 val = (ucur[0]) & 0x07
  *                 val <<= 6
  *                 val |= (ucur[1]) & 0x3F             # <<<<<<<<<<<<<<
@@ -146075,7 +146108,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val | ((__pyx_v_ucur[1]) & 0x3F));
 
-        /* "src/lxml/serializer.pxi":584
+        /* "src/lxml/serializer.pxi":583
  *                 val <<= 6
  *                 val |= (ucur[1]) & 0x3F
  *                 val <<= 6             # <<<<<<<<<<<<<<
@@ -146084,7 +146117,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val << 6);
 
-        /* "src/lxml/serializer.pxi":585
+        /* "src/lxml/serializer.pxi":584
  *                 val |= (ucur[1]) & 0x3F
  *                 val <<= 6
  *                 val |= (ucur[2]) & 0x3F             # <<<<<<<<<<<<<<
@@ -146093,7 +146126,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val | ((__pyx_v_ucur[2]) & 0x3F));
 
-        /* "src/lxml/serializer.pxi":586
+        /* "src/lxml/serializer.pxi":585
  *                 val <<= 6
  *                 val |= (ucur[2]) & 0x3F
  *                 val <<= 6             # <<<<<<<<<<<<<<
@@ -146102,7 +146135,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val << 6);
 
-        /* "src/lxml/serializer.pxi":587
+        /* "src/lxml/serializer.pxi":586
  *                 val |= (ucur[2]) & 0x3F
  *                 val <<= 6
  *                 val |= (ucur[3]) & 0x3F             # <<<<<<<<<<<<<<
@@ -146111,7 +146144,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_val = (__pyx_v_val | ((__pyx_v_ucur[3]) & 0x3F));
 
-        /* "src/lxml/serializer.pxi":588
+        /* "src/lxml/serializer.pxi":587
  *                 val <<= 6
  *                 val |= (ucur[3]) & 0x3F
  *                 l = 4             # <<<<<<<<<<<<<<
@@ -146120,7 +146153,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
         __pyx_v_l = 4;
 
-        /* "src/lxml/serializer.pxi":580
+        /* "src/lxml/serializer.pxi":579
  *                 l = 3
  * 
  *             elif (ucur[0] < 0xF8) and (ucur[2] != 0) and (ucur[3] != 0):             # <<<<<<<<<<<<<<
@@ -146130,7 +146163,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
         goto __pyx_L17;
       }
 
-      /* "src/lxml/serializer.pxi":591
+      /* "src/lxml/serializer.pxi":590
  *             else:
  *                 # invalid UTF-8 sequence
  *                 val = ucur[0]             # <<<<<<<<<<<<<<
@@ -146140,7 +146173,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       /*else*/ {
         __pyx_v_val = (__pyx_v_ucur[0]);
 
-        /* "src/lxml/serializer.pxi":592
+        /* "src/lxml/serializer.pxi":591
  *                 # invalid UTF-8 sequence
  *                 val = ucur[0]
  *                 l = 1             # <<<<<<<<<<<<<<
@@ -146151,7 +146184,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       }
       __pyx_L17:;
 
-      /* "src/lxml/serializer.pxi":594
+      /* "src/lxml/serializer.pxi":593
  *                 l = 1
  * 
  *             if (l == 1) or (not tree.xmlIsCharQ(val)):             # <<<<<<<<<<<<<<
@@ -146169,26 +146202,26 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_L24_bool_binop_done:;
       if (unlikely(__pyx_t_1)) {
 
-        /* "src/lxml/serializer.pxi":595
+        /* "src/lxml/serializer.pxi":594
  * 
  *             if (l == 1) or (not tree.xmlIsCharQ(val)):
  *                 raise ValueError(f"Invalid character: {val:X}")             # <<<<<<<<<<<<<<
  * 
  *             # We could do multiple things here. Just save
  */
-        __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_v_val, 0, ' ', 'X'); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 595, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_v_val, 0, ' ', 'X'); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 594, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_character, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 595, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_character, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 594, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 595, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 594, __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(9, 595, __pyx_L1_error)
+        __PYX_ERR(9, 594, __pyx_L1_error)
 
-        /* "src/lxml/serializer.pxi":594
+        /* "src/lxml/serializer.pxi":593
  *                 l = 1
  * 
  *             if (l == 1) or (not tree.xmlIsCharQ(val)):             # <<<<<<<<<<<<<<
@@ -146197,7 +146230,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       }
 
-      /* "src/lxml/serializer.pxi":599
+      /* "src/lxml/serializer.pxi":598
  *             # We could do multiple things here. Just save
  *             # as a char ref
  *             xmlSerializeHexCharRef(tmp, val)             # <<<<<<<<<<<<<<
@@ -146206,7 +146239,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       (void)(__pyx_f_4lxml_5etree_xmlSerializeHexCharRef(__pyx_v_tmp, __pyx_v_val));
 
-      /* "src/lxml/serializer.pxi":600
+      /* "src/lxml/serializer.pxi":599
  *             # as a char ref
  *             xmlSerializeHexCharRef(tmp, val)
  *             tree.xmlOutputBufferWrite(buf, len(tmp), <const char*> tmp)             # <<<<<<<<<<<<<<
@@ -146216,7 +146249,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       __pyx_t_5 = strlen(((char const *)__pyx_v_tmp)); 
       (void)(xmlOutputBufferWrite(__pyx_v_buf, __pyx_t_5, ((char const *)__pyx_v_tmp)));
 
-      /* "src/lxml/serializer.pxi":601
+      /* "src/lxml/serializer.pxi":600
  *             xmlSerializeHexCharRef(tmp, val)
  *             tree.xmlOutputBufferWrite(buf, len(tmp), <const char*> tmp)
  *             cur += l             # <<<<<<<<<<<<<<
@@ -146225,7 +146258,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_cur = (__pyx_v_cur + __pyx_v_l);
 
-      /* "src/lxml/serializer.pxi":602
+      /* "src/lxml/serializer.pxi":601
  *             tree.xmlOutputBufferWrite(buf, len(tmp), <const char*> tmp)
  *             cur += l
  *             base = cur             # <<<<<<<<<<<<<<
@@ -146234,7 +146267,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
       __pyx_v_base = __pyx_v_cur;
 
-      /* "src/lxml/serializer.pxi":554
+      /* "src/lxml/serializer.pxi":553
  *             base = cur
  * 
  *         elif (<const unsigned char>cur[0] >= 0x80) and (cur[1] != 0):             # <<<<<<<<<<<<<<
@@ -146244,7 +146277,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":605
+    /* "src/lxml/serializer.pxi":604
  * 
  *         else:
  *             cur += 1             # <<<<<<<<<<<<<<
@@ -146257,7 +146290,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
     __pyx_L6:;
   }
 
-  /* "src/lxml/serializer.pxi":607
+  /* "src/lxml/serializer.pxi":606
  *             cur += 1
  * 
  *     if base != cur:             # <<<<<<<<<<<<<<
@@ -146267,7 +146300,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
   __pyx_t_1 = ((__pyx_v_base != __pyx_v_cur) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":608
+    /* "src/lxml/serializer.pxi":607
  * 
  *     if base != cur:
  *         tree.xmlOutputBufferWrite(buf, cur - base, base)             # <<<<<<<<<<<<<<
@@ -146276,7 +146309,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
     (void)(xmlOutputBufferWrite(__pyx_v_buf, (__pyx_v_cur - __pyx_v_base), __pyx_v_base));
 
-    /* "src/lxml/serializer.pxi":607
+    /* "src/lxml/serializer.pxi":606
  *             cur += 1
  * 
  *     if base != cur:             # <<<<<<<<<<<<<<
@@ -146285,7 +146318,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
  */
   }
 
-  /* "src/lxml/serializer.pxi":485
+  /* "src/lxml/serializer.pxi":484
  * 
  * # copied and adapted from libxml2 (xmlBufAttrSerializeTxtContent())
  * cdef _write_attr_string(tree.xmlOutputBuffer* buf, const char *string):             # <<<<<<<<<<<<<<
@@ -146308,7 +146341,7 @@ static PyObject *__pyx_f_4lxml_5etree__write_attr_string(xmlOutputBuffer *__pyx_
 }
 static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":630
+/* "src/lxml/serializer.pxi":629
  * 
  * @contextmanager
  * def _open_utf8_file(file, compression=0):             # <<<<<<<<<<<<<<
@@ -146356,7 +146389,7 @@ static PyObject *__pyx_pw_4lxml_5etree_51_open_utf8_file(PyObject *__pyx_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_open_utf8_file") < 0)) __PYX_ERR(9, 630, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_open_utf8_file") < 0)) __PYX_ERR(9, 629, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -146372,7 +146405,7 @@ static PyObject *__pyx_pw_4lxml_5etree_51_open_utf8_file(PyObject *__pyx_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_open_utf8_file", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 630, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_open_utf8_file", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 629, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._open_utf8_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -146397,7 +146430,7 @@ static PyObject *__pyx_pf_4lxml_5etree_50_open_utf8_file(CYTHON_UNUSED PyObject
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct___open_utf8_file *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 630, __pyx_L1_error)
+    __PYX_ERR(9, 629, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -146408,7 +146441,7 @@ static PyObject *__pyx_pf_4lxml_5etree_50_open_utf8_file(CYTHON_UNUSED PyObject
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_compression);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_compression);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_52generator, __pyx_codeobj__61, (PyObject *) __pyx_cur_scope, __pyx_n_s_open_utf8_file, __pyx_n_s_open_utf8_file, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 630, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_52generator, __pyx_codeobj__61, (PyObject *) __pyx_cur_scope, __pyx_n_s_open_utf8_file, __pyx_n_s_open_utf8_file, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 629, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -146455,9 +146488,9 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 630, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 629, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":631
+  /* "src/lxml/serializer.pxi":630
  * @contextmanager
  * def _open_utf8_file(file, compression=0):
  *     if _isString(file):             # <<<<<<<<<<<<<<
@@ -146467,17 +146500,17 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
   __pyx_t_1 = (_isString(__pyx_cur_scope->__pyx_v_file) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":632
+    /* "src/lxml/serializer.pxi":631
  * def _open_utf8_file(file, compression=0):
  *     if _isString(file):
  *         if compression:             # <<<<<<<<<<<<<<
  *             with gzip.GzipFile(file, mode='wb', compresslevel=compression) as zf:
  *                 yield utf8_writer(zf)
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_compression); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 632, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_compression); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 631, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":633
+      /* "src/lxml/serializer.pxi":632
  *     if _isString(file):
  *         if compression:
  *             with gzip.GzipFile(file, mode='wb', compresslevel=compression) as zf:             # <<<<<<<<<<<<<<
@@ -146485,25 +146518,25 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
  *         else:
  */
       /*with:*/ {
-        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_gzip, __pyx_n_s_GzipFile); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 633, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_gzip, __pyx_n_s_GzipFile); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 633, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(__pyx_cur_scope->__pyx_v_file);
         __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_file);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_file);
-        __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 633, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 633, __pyx_L1_error)
-        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_compresslevel, __pyx_cur_scope->__pyx_v_compression) < 0) __PYX_ERR(9, 633, __pyx_L1_error)
-        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 633, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 632, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_compresslevel, __pyx_cur_scope->__pyx_v_compression) < 0) __PYX_ERR(9, 632, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 633, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 633, __pyx_L6_error)
+        __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 632, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_2 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -146517,7 +146550,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
         }
         __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-        if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 633, __pyx_L6_error)
+        if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 632, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_t_3 = __pyx_t_4;
@@ -146534,7 +146567,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               __pyx_cur_scope->__pyx_v_zf = __pyx_t_3;
               __pyx_t_3 = 0;
 
-              /* "src/lxml/serializer.pxi":634
+              /* "src/lxml/serializer.pxi":633
  *         if compression:
  *             with gzip.GzipFile(file, mode='wb', compresslevel=compression) as zf:
  *                 yield utf8_writer(zf)             # <<<<<<<<<<<<<<
@@ -146554,7 +146587,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               }
               __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_cur_scope->__pyx_v_zf) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_v_zf);
               __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-              if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 634, __pyx_L10_error)
+              if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 633, __pyx_L10_error)
               __Pyx_GOTREF(__pyx_t_3);
               __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
               __pyx_r = __pyx_t_3;
@@ -146586,9 +146619,9 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
               __pyx_cur_scope->__pyx_t_3 = 0;
               __Pyx_XGOTREF(__pyx_t_9);
-              if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 634, __pyx_L10_error)
+              if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 633, __pyx_L10_error)
 
-              /* "src/lxml/serializer.pxi":633
+              /* "src/lxml/serializer.pxi":632
  *     if _isString(file):
  *         if compression:
  *             with gzip.GzipFile(file, mode='wb', compresslevel=compression) as zf:             # <<<<<<<<<<<<<<
@@ -146607,20 +146640,20 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
             __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
             /*except:*/ {
               __Pyx_AddTraceback("lxml.etree._open_utf8_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
-              if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(9, 633, __pyx_L12_except_error)
+              if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(9, 632, __pyx_L12_except_error)
               __Pyx_GOTREF(__pyx_t_3);
               __Pyx_GOTREF(__pyx_t_5);
               __Pyx_GOTREF(__pyx_t_4);
-              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 633, __pyx_L12_except_error)
+              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 632, __pyx_L12_except_error)
               __Pyx_GOTREF(__pyx_t_2);
               __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 633, __pyx_L12_except_error)
+              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 632, __pyx_L12_except_error)
               __Pyx_GOTREF(__pyx_t_10);
               __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              if (__pyx_t_1 < 0) __PYX_ERR(9, 633, __pyx_L12_except_error)
+              if (__pyx_t_1 < 0) __PYX_ERR(9, 632, __pyx_L12_except_error)
               __pyx_t_11 = ((!(__pyx_t_1 != 0)) != 0);
               if (__pyx_t_11) {
                 __Pyx_GIVEREF(__pyx_t_3);
@@ -146628,7 +146661,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
                 __Pyx_XGIVEREF(__pyx_t_4);
                 __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_4);
                 __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; 
-                __PYX_ERR(9, 633, __pyx_L12_except_error)
+                __PYX_ERR(9, 632, __pyx_L12_except_error)
               }
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
               __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -146654,7 +146687,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
             if (__pyx_t_6) {
               __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-              if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 633, __pyx_L1_error)
+              if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 632, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_9);
               __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
             }
@@ -146669,7 +146702,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
         __pyx_L20:;
       }
 
-      /* "src/lxml/serializer.pxi":632
+      /* "src/lxml/serializer.pxi":631
  * def _open_utf8_file(file, compression=0):
  *     if _isString(file):
  *         if compression:             # <<<<<<<<<<<<<<
@@ -146679,7 +146712,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
       goto __pyx_L5;
     }
 
-    /* "src/lxml/serializer.pxi":636
+    /* "src/lxml/serializer.pxi":635
  *                 yield utf8_writer(zf)
  *         else:
  *             with io_open(file, 'w', encoding='utf8') as f:             # <<<<<<<<<<<<<<
@@ -146688,7 +146721,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
  */
     /*else*/ {
       /*with:*/ {
-        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 636, __pyx_L1_error)
+        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 635, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_INCREF(__pyx_cur_scope->__pyx_v_file);
         __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_file);
@@ -146696,16 +146729,16 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
         __Pyx_INCREF(__pyx_n_s_w);
         __Pyx_GIVEREF(__pyx_n_s_w);
         PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_w);
-        __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 636, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 635, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_encoding, __pyx_n_s_utf8) < 0) __PYX_ERR(9, 636, __pyx_L1_error)
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_io_open, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 636, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_encoding, __pyx_n_s_utf8) < 0) __PYX_ERR(9, 635, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_io_open, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 635, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 636, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 635, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 636, __pyx_L21_error)
+        __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 635, __pyx_L21_error)
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_2 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -146719,7 +146752,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
         }
         __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-        if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 636, __pyx_L21_error)
+        if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 635, __pyx_L21_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_4 = __pyx_t_5;
@@ -146736,7 +146769,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               __pyx_cur_scope->__pyx_v_f = __pyx_t_4;
               __pyx_t_4 = 0;
 
-              /* "src/lxml/serializer.pxi":637
+              /* "src/lxml/serializer.pxi":636
  *         else:
  *             with io_open(file, 'w', encoding='utf8') as f:
  *                 yield f             # <<<<<<<<<<<<<<
@@ -146772,9 +146805,9 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
               __pyx_cur_scope->__pyx_t_3 = 0;
               __Pyx_XGOTREF(__pyx_t_9);
-              if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 637, __pyx_L25_error)
+              if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 636, __pyx_L25_error)
 
-              /* "src/lxml/serializer.pxi":636
+              /* "src/lxml/serializer.pxi":635
  *                 yield utf8_writer(zf)
  *         else:
  *             with io_open(file, 'w', encoding='utf8') as f:             # <<<<<<<<<<<<<<
@@ -146793,20 +146826,20 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
             __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
             /*except:*/ {
               __Pyx_AddTraceback("lxml.etree._open_utf8_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
-              if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_5) < 0) __PYX_ERR(9, 636, __pyx_L27_except_error)
+              if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_5) < 0) __PYX_ERR(9, 635, __pyx_L27_except_error)
               __Pyx_GOTREF(__pyx_t_4);
               __Pyx_GOTREF(__pyx_t_3);
               __Pyx_GOTREF(__pyx_t_5);
-              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 636, __pyx_L27_except_error)
+              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 635, __pyx_L27_except_error)
               __Pyx_GOTREF(__pyx_t_2);
               __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 636, __pyx_L27_except_error)
+              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 635, __pyx_L27_except_error)
               __Pyx_GOTREF(__pyx_t_10);
               __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              if (__pyx_t_11 < 0) __PYX_ERR(9, 636, __pyx_L27_except_error)
+              if (__pyx_t_11 < 0) __PYX_ERR(9, 635, __pyx_L27_except_error)
               __pyx_t_1 = ((!(__pyx_t_11 != 0)) != 0);
               if (__pyx_t_1) {
                 __Pyx_GIVEREF(__pyx_t_4);
@@ -146814,7 +146847,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
                 __Pyx_XGIVEREF(__pyx_t_5);
                 __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_3, __pyx_t_5);
                 __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_5 = 0; 
-                __PYX_ERR(9, 636, __pyx_L27_except_error)
+                __PYX_ERR(9, 635, __pyx_L27_except_error)
               }
               __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -146840,7 +146873,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
             if (__pyx_t_6) {
               __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-              if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 636, __pyx_L1_error)
+              if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 635, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_7);
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             }
@@ -146857,7 +146890,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
     }
     __pyx_L5:;
 
-    /* "src/lxml/serializer.pxi":631
+    /* "src/lxml/serializer.pxi":630
  * @contextmanager
  * def _open_utf8_file(file, compression=0):
  *     if _isString(file):             # <<<<<<<<<<<<<<
@@ -146867,7 +146900,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
     goto __pyx_L4;
   }
 
-  /* "src/lxml/serializer.pxi":639
+  /* "src/lxml/serializer.pxi":638
  *                 yield f
  *     else:
  *         if compression:             # <<<<<<<<<<<<<<
@@ -146875,10 +146908,10 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
  *                 yield utf8_writer(zf)
  */
   /*else*/ {
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_compression); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 639, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_compression); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 638, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":640
+      /* "src/lxml/serializer.pxi":639
  *     else:
  *         if compression:
  *             with gzip.GzipFile(fileobj=file, mode='wb', compresslevel=compression) as zf:             # <<<<<<<<<<<<<<
@@ -146886,20 +146919,20 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
  *         else:
  */
       /*with:*/ {
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_gzip, __pyx_n_s_GzipFile); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 640, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_gzip, __pyx_n_s_GzipFile); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 639, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 640, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 639, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_fileobj, __pyx_cur_scope->__pyx_v_file) < 0) __PYX_ERR(9, 640, __pyx_L1_error)
-        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 640, __pyx_L1_error)
-        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compresslevel, __pyx_cur_scope->__pyx_v_compression) < 0) __PYX_ERR(9, 640, __pyx_L1_error)
-        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 640, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_fileobj, __pyx_cur_scope->__pyx_v_file) < 0) __PYX_ERR(9, 639, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 639, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compresslevel, __pyx_cur_scope->__pyx_v_compression) < 0) __PYX_ERR(9, 639, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 639, __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_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 640, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 639, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 640, __pyx_L37_error)
+        __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 639, __pyx_L37_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_2 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -146913,7 +146946,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
         }
         __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-        if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 640, __pyx_L37_error)
+        if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 639, __pyx_L37_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_5 = __pyx_t_3;
@@ -146930,7 +146963,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               __pyx_cur_scope->__pyx_v_zf = __pyx_t_5;
               __pyx_t_5 = 0;
 
-              /* "src/lxml/serializer.pxi":641
+              /* "src/lxml/serializer.pxi":640
  *         if compression:
  *             with gzip.GzipFile(fileobj=file, mode='wb', compresslevel=compression) as zf:
  *                 yield utf8_writer(zf)             # <<<<<<<<<<<<<<
@@ -146950,7 +146983,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               }
               __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_cur_scope->__pyx_v_zf) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_cur_scope->__pyx_v_zf);
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-              if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 641, __pyx_L41_error)
+              if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 640, __pyx_L41_error)
               __Pyx_GOTREF(__pyx_t_5);
               __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
               __pyx_r = __pyx_t_5;
@@ -146982,9 +147015,9 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
               __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
               __pyx_cur_scope->__pyx_t_3 = 0;
               __Pyx_XGOTREF(__pyx_t_9);
-              if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 641, __pyx_L41_error)
+              if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 640, __pyx_L41_error)
 
-              /* "src/lxml/serializer.pxi":640
+              /* "src/lxml/serializer.pxi":639
  *     else:
  *         if compression:
  *             with gzip.GzipFile(fileobj=file, mode='wb', compresslevel=compression) as zf:             # <<<<<<<<<<<<<<
@@ -147003,20 +147036,20 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
             __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
             /*except:*/ {
               __Pyx_AddTraceback("lxml.etree._open_utf8_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
-              if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(9, 640, __pyx_L43_except_error)
+              if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(9, 639, __pyx_L43_except_error)
               __Pyx_GOTREF(__pyx_t_5);
               __Pyx_GOTREF(__pyx_t_4);
               __Pyx_GOTREF(__pyx_t_3);
-              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 640, __pyx_L43_except_error)
+              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 639, __pyx_L43_except_error)
               __Pyx_GOTREF(__pyx_t_2);
               __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 640, __pyx_L43_except_error)
+              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 639, __pyx_L43_except_error)
               __Pyx_GOTREF(__pyx_t_10);
               __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              if (__pyx_t_1 < 0) __PYX_ERR(9, 640, __pyx_L43_except_error)
+              if (__pyx_t_1 < 0) __PYX_ERR(9, 639, __pyx_L43_except_error)
               __pyx_t_11 = ((!(__pyx_t_1 != 0)) != 0);
               if (__pyx_t_11) {
                 __Pyx_GIVEREF(__pyx_t_5);
@@ -147024,7 +147057,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
                 __Pyx_XGIVEREF(__pyx_t_3);
                 __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_4, __pyx_t_3);
                 __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; 
-                __PYX_ERR(9, 640, __pyx_L43_except_error)
+                __PYX_ERR(9, 639, __pyx_L43_except_error)
               }
               __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
               __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -147050,7 +147083,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
             if (__pyx_t_6) {
               __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-              if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 640, __pyx_L1_error)
+              if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 639, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_9);
               __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
             }
@@ -147065,7 +147098,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
         __pyx_L51:;
       }
 
-      /* "src/lxml/serializer.pxi":639
+      /* "src/lxml/serializer.pxi":638
  *                 yield f
  *     else:
  *         if compression:             # <<<<<<<<<<<<<<
@@ -147075,7 +147108,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
       goto __pyx_L36;
     }
 
-    /* "src/lxml/serializer.pxi":643
+    /* "src/lxml/serializer.pxi":642
  *                 yield utf8_writer(zf)
  *         else:
  *             yield utf8_writer(file)             # <<<<<<<<<<<<<<
@@ -147096,7 +147129,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_cur_scope->__pyx_v_file) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_cur_scope->__pyx_v_file);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 643, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 642, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_3;
@@ -147108,14 +147141,14 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
       __pyx_generator->resume_label = 4;
       return __pyx_r;
       __pyx_L52_resume_from_yield:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 643, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 642, __pyx_L1_error)
     }
     __pyx_L36:;
   }
   __pyx_L4:;
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":630
+  /* "src/lxml/serializer.pxi":629
  * 
  * @contextmanager
  * def _open_utf8_file(file, compression=0):             # <<<<<<<<<<<<<<
@@ -147143,7 +147176,7 @@ static PyObject *__pyx_gb_4lxml_5etree_52generator(__pyx_CoroutineObject *__pyx_
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":653
+/* "src/lxml/serializer.pxi":652
  *     cdef _ExceptionContext _exc_context
  *     cdef _ErrorLog error_log
  *     def __cinit__(self, filelike, exc_context=None, compression=None, close=False):             # <<<<<<<<<<<<<<
@@ -147210,7 +147243,7 @@ static int __pyx_pw_4lxml_5etree_15_FilelikeWriter_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(9, 653, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 652, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -147232,7 +147265,7 @@ static int __pyx_pw_4lxml_5etree_15_FilelikeWriter_1__cinit__(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 653, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 652, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._FilelikeWriter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -147259,7 +147292,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   __Pyx_RefNannySetupContext("__cinit__", 0);
   __Pyx_INCREF(__pyx_v_filelike);
 
-  /* "src/lxml/serializer.pxi":654
+  /* "src/lxml/serializer.pxi":653
  *     cdef _ErrorLog error_log
  *     def __cinit__(self, filelike, exc_context=None, compression=None, close=False):
  *         if compression is not None and compression > 0:             # <<<<<<<<<<<<<<
@@ -147273,47 +147306,47 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
     __pyx_t_1 = __pyx_t_3;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = PyObject_RichCompare(__pyx_v_compression, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 654, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 654, __pyx_L1_error)
+  __pyx_t_4 = PyObject_RichCompare(__pyx_v_compression, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 653, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 653, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":656
+    /* "src/lxml/serializer.pxi":655
  *         if compression is not None and compression > 0:
  *             filelike = GzipFile(
  *                 fileobj=filelike, mode='wb', compresslevel=compression)             # <<<<<<<<<<<<<<
  *             self._close_filelike = filelike.close
  *         elif close:
  */
-    __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 656, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 655, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_fileobj, __pyx_v_filelike) < 0) __PYX_ERR(9, 656, __pyx_L1_error)
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 656, __pyx_L1_error)
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_compresslevel, __pyx_v_compression) < 0) __PYX_ERR(9, 656, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_fileobj, __pyx_v_filelike) < 0) __PYX_ERR(9, 655, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 655, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_compresslevel, __pyx_v_compression) < 0) __PYX_ERR(9, 655, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":655
+    /* "src/lxml/serializer.pxi":654
  *     def __cinit__(self, filelike, exc_context=None, compression=None, close=False):
  *         if compression is not None and compression > 0:
  *             filelike = GzipFile(             # <<<<<<<<<<<<<<
  *                 fileobj=filelike, mode='wb', compresslevel=compression)
  *             self._close_filelike = filelike.close
  */
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 655, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 654, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_filelike, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "src/lxml/serializer.pxi":657
+    /* "src/lxml/serializer.pxi":656
  *             filelike = GzipFile(
  *                 fileobj=filelike, mode='wb', compresslevel=compression)
  *             self._close_filelike = filelike.close             # <<<<<<<<<<<<<<
  *         elif close:
  *             self._close_filelike = filelike.close
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 657, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 656, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_v_self->_close_filelike);
@@ -147321,7 +147354,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
     __pyx_v_self->_close_filelike = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "src/lxml/serializer.pxi":654
+    /* "src/lxml/serializer.pxi":653
  *     cdef _ErrorLog error_log
  *     def __cinit__(self, filelike, exc_context=None, compression=None, close=False):
  *         if compression is not None and compression > 0:             # <<<<<<<<<<<<<<
@@ -147331,24 +147364,24 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":658
+  /* "src/lxml/serializer.pxi":657
  *                 fileobj=filelike, mode='wb', compresslevel=compression)
  *             self._close_filelike = filelike.close
  *         elif close:             # <<<<<<<<<<<<<<
  *             self._close_filelike = filelike.close
  *         self._filelike = filelike
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_close); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 658, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_close); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 657, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":659
+    /* "src/lxml/serializer.pxi":658
  *             self._close_filelike = filelike.close
  *         elif close:
  *             self._close_filelike = filelike.close             # <<<<<<<<<<<<<<
  *         self._filelike = filelike
  *         if exc_context is None:
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 659, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 658, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_v_self->_close_filelike);
@@ -147356,7 +147389,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
     __pyx_v_self->_close_filelike = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "src/lxml/serializer.pxi":658
+    /* "src/lxml/serializer.pxi":657
  *                 fileobj=filelike, mode='wb', compresslevel=compression)
  *             self._close_filelike = filelike.close
  *         elif close:             # <<<<<<<<<<<<<<
@@ -147366,7 +147399,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   }
   __pyx_L3:;
 
-  /* "src/lxml/serializer.pxi":660
+  /* "src/lxml/serializer.pxi":659
  *         elif close:
  *             self._close_filelike = filelike.close
  *         self._filelike = filelike             # <<<<<<<<<<<<<<
@@ -147379,7 +147412,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   __Pyx_DECREF(__pyx_v_self->_filelike);
   __pyx_v_self->_filelike = __pyx_v_filelike;
 
-  /* "src/lxml/serializer.pxi":661
+  /* "src/lxml/serializer.pxi":660
  *             self._close_filelike = filelike.close
  *         self._filelike = filelike
  *         if exc_context is None:             # <<<<<<<<<<<<<<
@@ -147390,14 +147423,14 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":662
+    /* "src/lxml/serializer.pxi":661
  *         self._filelike = filelike
  *         if exc_context is None:
  *             self._exc_context = _ExceptionContext()             # <<<<<<<<<<<<<<
  *         else:
  *             self._exc_context = exc_context
  */
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ExceptionContext)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 662, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ExceptionContext)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 661, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_v_self->_exc_context);
@@ -147405,7 +147438,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
     __pyx_v_self->_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "src/lxml/serializer.pxi":661
+    /* "src/lxml/serializer.pxi":660
  *             self._close_filelike = filelike.close
  *         self._filelike = filelike
  *         if exc_context is None:             # <<<<<<<<<<<<<<
@@ -147415,7 +147448,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
     goto __pyx_L6;
   }
 
-  /* "src/lxml/serializer.pxi":664
+  /* "src/lxml/serializer.pxi":663
  *             self._exc_context = _ExceptionContext()
  *         else:
  *             self._exc_context = exc_context             # <<<<<<<<<<<<<<
@@ -147423,7 +147456,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
  * 
  */
   /*else*/ {
-    if (!(likely(((__pyx_v_exc_context) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_exc_context, __pyx_ptype_4lxml_5etree__ExceptionContext))))) __PYX_ERR(9, 664, __pyx_L1_error)
+    if (!(likely(((__pyx_v_exc_context) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_exc_context, __pyx_ptype_4lxml_5etree__ExceptionContext))))) __PYX_ERR(9, 663, __pyx_L1_error)
     __pyx_t_5 = __pyx_v_exc_context;
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
@@ -147434,14 +147467,14 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   }
   __pyx_L6:;
 
-  /* "src/lxml/serializer.pxi":665
+  /* "src/lxml/serializer.pxi":664
  *         else:
  *             self._exc_context = exc_context
  *         self.error_log = _ErrorLog()             # <<<<<<<<<<<<<<
  * 
  *     cdef tree.xmlOutputBuffer* _createOutputBuffer(
  */
-  __pyx_t_5 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 665, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __Pyx_GOTREF(__pyx_v_self->error_log);
@@ -147449,7 +147482,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   __pyx_v_self->error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":653
+  /* "src/lxml/serializer.pxi":652
  *     cdef _ExceptionContext _exc_context
  *     cdef _ErrorLog error_log
  *     def __cinit__(self, filelike, exc_context=None, compression=None, close=False):             # <<<<<<<<<<<<<<
@@ -147471,7 +147504,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":667
+/* "src/lxml/serializer.pxi":666
  *         self.error_log = _ErrorLog()
  * 
  *     cdef tree.xmlOutputBuffer* _createOutputBuffer(             # <<<<<<<<<<<<<<
@@ -147489,7 +147522,7 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_createOutputBuffer", 0);
 
-  /* "src/lxml/serializer.pxi":670
+  /* "src/lxml/serializer.pxi":669
  *         self, tree.xmlCharEncodingHandler* enchandler) except NULL:
  *         cdef tree.xmlOutputBuffer* c_buffer
  *         c_buffer = tree.xmlOutputBufferCreateIO(             # <<<<<<<<<<<<<<
@@ -147498,7 +147531,7 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
  */
   __pyx_v_c_buffer = xmlOutputBufferCreateIO(((xmlOutputWriteCallback)__pyx_f_4lxml_5etree__writeFilelikeWriter), __pyx_f_4lxml_5etree__closeFilelikeWriter, ((PyObject *)__pyx_v_self), __pyx_v_enchandler);
 
-  /* "src/lxml/serializer.pxi":673
+  /* "src/lxml/serializer.pxi":672
  *             <tree.xmlOutputWriteCallback>_writeFilelikeWriter, _closeFilelikeWriter,
  *             <python.PyObject*>self, enchandler)
  *         if c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -147508,7 +147541,7 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
   __pyx_t_1 = ((__pyx_v_c_buffer == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":674
+    /* "src/lxml/serializer.pxi":673
  *             <python.PyObject*>self, enchandler)
  *         if c_buffer is NULL:
  *             raise IOError, u"Could not create I/O writer context."             # <<<<<<<<<<<<<<
@@ -147516,9 +147549,9 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
  * 
  */
     __Pyx_Raise(__pyx_builtin_IOError, __pyx_kp_u_Could_not_create_I_O_writer_cont, 0, 0);
-    __PYX_ERR(9, 674, __pyx_L1_error)
+    __PYX_ERR(9, 673, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":673
+    /* "src/lxml/serializer.pxi":672
  *             <tree.xmlOutputWriteCallback>_writeFilelikeWriter, _closeFilelikeWriter,
  *             <python.PyObject*>self, enchandler)
  *         if c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -147527,7 +147560,7 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
  */
   }
 
-  /* "src/lxml/serializer.pxi":675
+  /* "src/lxml/serializer.pxi":674
  *         if c_buffer is NULL:
  *             raise IOError, u"Could not create I/O writer context."
  *         return c_buffer             # <<<<<<<<<<<<<<
@@ -147537,7 +147570,7 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
   __pyx_r = __pyx_v_c_buffer;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":667
+  /* "src/lxml/serializer.pxi":666
  *         self.error_log = _ErrorLog()
  * 
  *     cdef tree.xmlOutputBuffer* _createOutputBuffer(             # <<<<<<<<<<<<<<
@@ -147554,7 +147587,7 @@ static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuff
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":677
+/* "src/lxml/serializer.pxi":676
  *         return c_buffer
  * 
  *     cdef int write(self, char* c_buffer, int size):             # <<<<<<<<<<<<<<
@@ -147582,7 +147615,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "src/lxml/serializer.pxi":678
+  /* "src/lxml/serializer.pxi":677
  * 
  *     cdef int write(self, char* c_buffer, int size):
  *         try:             # <<<<<<<<<<<<<<
@@ -147599,7 +147632,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
       __Pyx_XGOTREF(__pyx_t_3);
       /*try:*/ {
 
-        /* "src/lxml/serializer.pxi":679
+        /* "src/lxml/serializer.pxi":678
  *     cdef int write(self, char* c_buffer, int size):
  *         try:
  *             if self._filelike is None:             # <<<<<<<<<<<<<<
@@ -147610,7 +147643,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
         __pyx_t_5 = (__pyx_t_4 != 0);
         if (unlikely(__pyx_t_5)) {
 
-          /* "src/lxml/serializer.pxi":680
+          /* "src/lxml/serializer.pxi":679
  *         try:
  *             if self._filelike is None:
  *                 raise IOError, u"File is already closed"             # <<<<<<<<<<<<<<
@@ -147618,9 +147651,9 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
  *             self._filelike.write(py_buffer)
  */
           __Pyx_Raise(__pyx_builtin_IOError, __pyx_kp_u_File_is_already_closed, 0, 0);
-          __PYX_ERR(9, 680, __pyx_L6_error)
+          __PYX_ERR(9, 679, __pyx_L6_error)
 
-          /* "src/lxml/serializer.pxi":679
+          /* "src/lxml/serializer.pxi":678
  *     cdef int write(self, char* c_buffer, int size):
  *         try:
  *             if self._filelike is None:             # <<<<<<<<<<<<<<
@@ -147629,14 +147662,14 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
  */
         }
 
-        /* "src/lxml/serializer.pxi":681
+        /* "src/lxml/serializer.pxi":680
  *             if self._filelike is None:
  *                 raise IOError, u"File is already closed"
  *             py_buffer = <bytes>c_buffer[:size]             # <<<<<<<<<<<<<<
  *             self._filelike.write(py_buffer)
  *         except:
  */
-        __pyx_t_6 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_buffer + 0, __pyx_v_size - 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 681, __pyx_L6_error)
+        __pyx_t_6 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_buffer + 0, __pyx_v_size - 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 680, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_7 = __pyx_t_6;
         __Pyx_INCREF(__pyx_t_7);
@@ -147644,14 +147677,14 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
         __pyx_v_py_buffer = ((PyObject*)__pyx_t_7);
         __pyx_t_7 = 0;
 
-        /* "src/lxml/serializer.pxi":682
+        /* "src/lxml/serializer.pxi":681
  *                 raise IOError, u"File is already closed"
  *             py_buffer = <bytes>c_buffer[:size]
  *             self._filelike.write(py_buffer)             # <<<<<<<<<<<<<<
  *         except:
  *             size = -1
  */
-        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_filelike, __pyx_n_s_write); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 682, __pyx_L6_error)
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_filelike, __pyx_n_s_write); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 681, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_8 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -147665,12 +147698,12 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
         }
         __pyx_t_7 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_v_py_buffer) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_py_buffer);
         __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-        if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 682, __pyx_L6_error)
+        if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 681, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-        /* "src/lxml/serializer.pxi":678
+        /* "src/lxml/serializer.pxi":677
  * 
  *     cdef int write(self, char* c_buffer, int size):
  *         try:             # <<<<<<<<<<<<<<
@@ -147687,7 +147720,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":683
+      /* "src/lxml/serializer.pxi":682
  *             py_buffer = <bytes>c_buffer[:size]
  *             self._filelike.write(py_buffer)
  *         except:             # <<<<<<<<<<<<<<
@@ -147696,12 +147729,12 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
  */
       /*except:*/ {
         __Pyx_AddTraceback("lxml.etree._FilelikeWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_8) < 0) __PYX_ERR(9, 683, __pyx_L8_except_error)
+        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_8) < 0) __PYX_ERR(9, 682, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_GOTREF(__pyx_t_8);
 
-        /* "src/lxml/serializer.pxi":684
+        /* "src/lxml/serializer.pxi":683
  *             self._filelike.write(py_buffer)
  *         except:
  *             size = -1             # <<<<<<<<<<<<<<
@@ -147710,7 +147743,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
  */
         __pyx_v_size = -1;
 
-        /* "src/lxml/serializer.pxi":685
+        /* "src/lxml/serializer.pxi":684
  *         except:
  *             size = -1
  *             self._exc_context._store_raised()             # <<<<<<<<<<<<<<
@@ -147725,7 +147758,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
       }
       __pyx_L8_except_error:;
 
-      /* "src/lxml/serializer.pxi":678
+      /* "src/lxml/serializer.pxi":677
  * 
  *     cdef int write(self, char* c_buffer, int size):
  *         try:             # <<<<<<<<<<<<<<
@@ -147746,7 +147779,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
     }
   }
 
-  /* "src/lxml/serializer.pxi":687
+  /* "src/lxml/serializer.pxi":686
  *             self._exc_context._store_raised()
  *         finally:
  *             return size  # and swallow any further exceptions             # <<<<<<<<<<<<<<
@@ -147793,7 +147826,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
     }
   }
 
-  /* "src/lxml/serializer.pxi":677
+  /* "src/lxml/serializer.pxi":676
  *         return c_buffer
  * 
  *     cdef int write(self, char* c_buffer, int size):             # <<<<<<<<<<<<<<
@@ -147808,7 +147841,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":689
+/* "src/lxml/serializer.pxi":688
  *             return size  # and swallow any further exceptions
  * 
  *     cdef int close(self):             # <<<<<<<<<<<<<<
@@ -147836,7 +147869,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "src/lxml/serializer.pxi":690
+  /* "src/lxml/serializer.pxi":689
  * 
  *     cdef int close(self):
  *         retval = 0             # <<<<<<<<<<<<<<
@@ -147845,7 +147878,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
  */
   __pyx_v_retval = 0;
 
-  /* "src/lxml/serializer.pxi":691
+  /* "src/lxml/serializer.pxi":690
  *     cdef int close(self):
  *         retval = 0
  *         try:             # <<<<<<<<<<<<<<
@@ -147862,7 +147895,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
       __Pyx_XGOTREF(__pyx_t_3);
       /*try:*/ {
 
-        /* "src/lxml/serializer.pxi":692
+        /* "src/lxml/serializer.pxi":691
  *         retval = 0
  *         try:
  *             if self._close_filelike is not None:             # <<<<<<<<<<<<<<
@@ -147873,7 +147906,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
         __pyx_t_5 = (__pyx_t_4 != 0);
         if (__pyx_t_5) {
 
-          /* "src/lxml/serializer.pxi":693
+          /* "src/lxml/serializer.pxi":692
  *         try:
  *             if self._close_filelike is not None:
  *                 self._close_filelike()             # <<<<<<<<<<<<<<
@@ -147893,12 +147926,12 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
           }
           __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-          if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 693, __pyx_L6_error)
+          if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 692, __pyx_L6_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-          /* "src/lxml/serializer.pxi":692
+          /* "src/lxml/serializer.pxi":691
  *         retval = 0
  *         try:
  *             if self._close_filelike is not None:             # <<<<<<<<<<<<<<
@@ -147907,7 +147940,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
  */
         }
 
-        /* "src/lxml/serializer.pxi":695
+        /* "src/lxml/serializer.pxi":694
  *                 self._close_filelike()
  *             # we should not close the file here as we didn't open it
  *             self._filelike = None             # <<<<<<<<<<<<<<
@@ -147920,7 +147953,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
         __Pyx_DECREF(__pyx_v_self->_filelike);
         __pyx_v_self->_filelike = Py_None;
 
-        /* "src/lxml/serializer.pxi":691
+        /* "src/lxml/serializer.pxi":690
  *     cdef int close(self):
  *         retval = 0
  *         try:             # <<<<<<<<<<<<<<
@@ -147937,7 +147970,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":696
+      /* "src/lxml/serializer.pxi":695
  *             # we should not close the file here as we didn't open it
  *             self._filelike = None
  *         except:             # <<<<<<<<<<<<<<
@@ -147946,12 +147979,12 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
  */
       /*except:*/ {
         __Pyx_AddTraceback("lxml.etree._FilelikeWriter.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(9, 696, __pyx_L8_except_error)
+        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(9, 695, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GOTREF(__pyx_t_8);
 
-        /* "src/lxml/serializer.pxi":697
+        /* "src/lxml/serializer.pxi":696
  *             self._filelike = None
  *         except:
  *             retval = -1             # <<<<<<<<<<<<<<
@@ -147960,7 +147993,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
  */
         __pyx_v_retval = -1L;
 
-        /* "src/lxml/serializer.pxi":698
+        /* "src/lxml/serializer.pxi":697
  *         except:
  *             retval = -1
  *             self._exc_context._store_raised()             # <<<<<<<<<<<<<<
@@ -147975,7 +148008,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
       }
       __pyx_L8_except_error:;
 
-      /* "src/lxml/serializer.pxi":691
+      /* "src/lxml/serializer.pxi":690
  *     cdef int close(self):
  *         retval = 0
  *         try:             # <<<<<<<<<<<<<<
@@ -147996,7 +148029,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
     }
   }
 
-  /* "src/lxml/serializer.pxi":700
+  /* "src/lxml/serializer.pxi":699
  *             self._exc_context._store_raised()
  *         finally:
  *             return retval  # and swallow any further exceptions             # <<<<<<<<<<<<<<
@@ -148043,7 +148076,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
     }
   }
 
-  /* "src/lxml/serializer.pxi":689
+  /* "src/lxml/serializer.pxi":688
  *             return size  # and swallow any further exceptions
  * 
  *     cdef int close(self):             # <<<<<<<<<<<<<<
@@ -148057,7 +148090,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":702
+/* "src/lxml/serializer.pxi":701
  *             return retval  # and swallow any further exceptions
  * 
  * cdef int _writeFilelikeWriter(void* ctxt, char* c_buffer, int length):             # <<<<<<<<<<<<<<
@@ -148070,7 +148103,7 @@ static int __pyx_f_4lxml_5etree__writeFilelikeWriter(void *__pyx_v_ctxt, char *_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_writeFilelikeWriter", 0);
 
-  /* "src/lxml/serializer.pxi":703
+  /* "src/lxml/serializer.pxi":702
  * 
  * cdef int _writeFilelikeWriter(void* ctxt, char* c_buffer, int length):
  *     return (<_FilelikeWriter>ctxt).write(c_buffer, length)             # <<<<<<<<<<<<<<
@@ -148080,7 +148113,7 @@ static int __pyx_f_4lxml_5etree__writeFilelikeWriter(void *__pyx_v_ctxt, char *_
   __pyx_r = __pyx_f_4lxml_5etree_15_FilelikeWriter_write(((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_v_ctxt), __pyx_v_c_buffer, __pyx_v_length);
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":702
+  /* "src/lxml/serializer.pxi":701
  *             return retval  # and swallow any further exceptions
  * 
  * cdef int _writeFilelikeWriter(void* ctxt, char* c_buffer, int length):             # <<<<<<<<<<<<<<
@@ -148094,7 +148127,7 @@ static int __pyx_f_4lxml_5etree__writeFilelikeWriter(void *__pyx_v_ctxt, char *_
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":705
+/* "src/lxml/serializer.pxi":704
  *     return (<_FilelikeWriter>ctxt).write(c_buffer, length)
  * 
  * cdef int _closeFilelikeWriter(void* ctxt):             # <<<<<<<<<<<<<<
@@ -148107,7 +148140,7 @@ static int __pyx_f_4lxml_5etree__closeFilelikeWriter(void *__pyx_v_ctxt) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_closeFilelikeWriter", 0);
 
-  /* "src/lxml/serializer.pxi":706
+  /* "src/lxml/serializer.pxi":705
  * 
  * cdef int _closeFilelikeWriter(void* ctxt):
  *     return (<_FilelikeWriter>ctxt).close()             # <<<<<<<<<<<<<<
@@ -148117,7 +148150,7 @@ static int __pyx_f_4lxml_5etree__closeFilelikeWriter(void *__pyx_v_ctxt) {
   __pyx_r = __pyx_f_4lxml_5etree_15_FilelikeWriter_close(((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_v_ctxt));
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":705
+  /* "src/lxml/serializer.pxi":704
  *     return (<_FilelikeWriter>ctxt).write(c_buffer, length)
  * 
  * cdef int _closeFilelikeWriter(void* ctxt):             # <<<<<<<<<<<<<<
@@ -148131,7 +148164,7 @@ static int __pyx_f_4lxml_5etree__closeFilelikeWriter(void *__pyx_v_ctxt) {
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":708
+/* "src/lxml/serializer.pxi":707
  *     return (<_FilelikeWriter>ctxt).close()
  * 
  * cdef _tofilelike(f, _Element element, encoding, doctype, method,             # <<<<<<<<<<<<<<
@@ -148172,7 +148205,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __Pyx_INCREF(__pyx_v_encoding);
   __Pyx_INCREF(__pyx_v_doctype);
 
-  /* "src/lxml/serializer.pxi":712
+  /* "src/lxml/serializer.pxi":711
  *                  bint pretty_print, bint with_tail, int standalone,
  *                  int compression):
  *     cdef _FilelikeWriter writer = None             # <<<<<<<<<<<<<<
@@ -148182,17 +148215,17 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __Pyx_INCREF(Py_None);
   __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None);
 
-  /* "src/lxml/serializer.pxi":719
+  /* "src/lxml/serializer.pxi":718
  *     cdef int error_result
  * 
  *     c_method = _findOutputMethod(method)             # <<<<<<<<<<<<<<
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         data = _textToString(element._c_node, encoding, with_tail)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 719, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 718, __pyx_L1_error)
   __pyx_v_c_method = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":720
+  /* "src/lxml/serializer.pxi":719
  * 
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:             # <<<<<<<<<<<<<<
@@ -148202,19 +148235,19 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __pyx_t_2 = ((__pyx_v_c_method == __pyx_e_4lxml_5etree_OUTPUT_METHOD_TEXT) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":721
+    /* "src/lxml/serializer.pxi":720
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         data = _textToString(element._c_node, encoding, with_tail)             # <<<<<<<<<<<<<<
  *         if compression:
  *             bytes_out = BytesIO()
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__textToString(__pyx_v_element->_c_node, __pyx_v_encoding, __pyx_v_with_tail); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 721, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__textToString(__pyx_v_element->_c_node, __pyx_v_encoding, __pyx_v_with_tail); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 720, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_data = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "src/lxml/serializer.pxi":722
+    /* "src/lxml/serializer.pxi":721
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         data = _textToString(element._c_node, encoding, with_tail)
  *         if compression:             # <<<<<<<<<<<<<<
@@ -148224,7 +148257,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
     __pyx_t_2 = (__pyx_v_compression != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":723
+      /* "src/lxml/serializer.pxi":722
  *         data = _textToString(element._c_node, encoding, with_tail)
  *         if compression:
  *             bytes_out = BytesIO()             # <<<<<<<<<<<<<<
@@ -148244,13 +148277,13 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 723, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 722, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_v_bytes_out = __pyx_t_3;
       __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":724
+      /* "src/lxml/serializer.pxi":723
  *         if compression:
  *             bytes_out = BytesIO()
  *             with GzipFile(fileobj=bytes_out, mode='wb', compresslevel=compression) as gzip_file:             # <<<<<<<<<<<<<<
@@ -148258,20 +148291,20 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  *             data = bytes_out.getvalue()
  */
       /*with:*/ {
-        __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 724, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 723, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_fileobj, __pyx_v_bytes_out) < 0) __PYX_ERR(9, 724, __pyx_L1_error)
-        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 724, __pyx_L1_error)
-        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_compression); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 724, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_fileobj, __pyx_v_bytes_out) < 0) __PYX_ERR(9, 723, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_mode, __pyx_n_s_wb) < 0) __PYX_ERR(9, 723, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_compression); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 723, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compresslevel, __pyx_t_4) < 0) __PYX_ERR(9, 724, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compresslevel, __pyx_t_4) < 0) __PYX_ERR(9, 723, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 724, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 723, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 724, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 723, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 724, __pyx_L5_error)
+        __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 723, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_7 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -148285,7 +148318,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         }
         __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 724, __pyx_L5_error)
+        if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 723, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_5 = __pyx_t_3;
@@ -148303,14 +148336,14 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
               __pyx_v_gzip_file = __pyx_t_5;
               __pyx_t_5 = 0;
 
-              /* "src/lxml/serializer.pxi":725
+              /* "src/lxml/serializer.pxi":724
  *             bytes_out = BytesIO()
  *             with GzipFile(fileobj=bytes_out, mode='wb', compresslevel=compression) as gzip_file:
  *                 gzip_file.write(data)             # <<<<<<<<<<<<<<
  *             data = bytes_out.getvalue()
  *         if _isString(f):
  */
-              __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_file, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 725, __pyx_L9_error)
+              __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_file, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 724, __pyx_L9_error)
               __Pyx_GOTREF(__pyx_t_4);
               __pyx_t_3 = NULL;
               if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -148324,12 +148357,12 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
               }
               __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_data);
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-              if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 725, __pyx_L9_error)
+              if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 724, __pyx_L9_error)
               __Pyx_GOTREF(__pyx_t_5);
               __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
               __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-              /* "src/lxml/serializer.pxi":724
+              /* "src/lxml/serializer.pxi":723
  *         if compression:
  *             bytes_out = BytesIO()
  *             with GzipFile(fileobj=bytes_out, mode='wb', compresslevel=compression) as gzip_file:             # <<<<<<<<<<<<<<
@@ -148348,20 +148381,20 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
             __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
             /*except:*/ {
               __Pyx_AddTraceback("lxml.etree._tofilelike", __pyx_clineno, __pyx_lineno, __pyx_filename);
-              if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(9, 724, __pyx_L11_except_error)
+              if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(9, 723, __pyx_L11_except_error)
               __Pyx_GOTREF(__pyx_t_5);
               __Pyx_GOTREF(__pyx_t_4);
               __Pyx_GOTREF(__pyx_t_3);
-              __pyx_t_7 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 724, __pyx_L11_except_error)
+              __pyx_t_7 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 723, __pyx_L11_except_error)
               __Pyx_GOTREF(__pyx_t_7);
               __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-              if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 724, __pyx_L11_except_error)
+              if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 723, __pyx_L11_except_error)
               __Pyx_GOTREF(__pyx_t_11);
               __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
               __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-              if (__pyx_t_2 < 0) __PYX_ERR(9, 724, __pyx_L11_except_error)
+              if (__pyx_t_2 < 0) __PYX_ERR(9, 723, __pyx_L11_except_error)
               __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
               if (__pyx_t_12) {
                 __Pyx_GIVEREF(__pyx_t_5);
@@ -148369,7 +148402,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
                 __Pyx_XGIVEREF(__pyx_t_3);
                 __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_4, __pyx_t_3);
                 __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; 
-                __PYX_ERR(9, 724, __pyx_L11_except_error)
+                __PYX_ERR(9, 723, __pyx_L11_except_error)
               }
               __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
               __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -148395,7 +148428,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
             if (__pyx_t_6) {
               __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 724, __pyx_L1_error)
+              if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 723, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
             }
@@ -148410,14 +148443,14 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         __pyx_L18:;
       }
 
-      /* "src/lxml/serializer.pxi":726
+      /* "src/lxml/serializer.pxi":725
  *             with GzipFile(fileobj=bytes_out, mode='wb', compresslevel=compression) as gzip_file:
  *                 gzip_file.write(data)
  *             data = bytes_out.getvalue()             # <<<<<<<<<<<<<<
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_bytes_out, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 726, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_bytes_out, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 725, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -148431,13 +148464,13 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 726, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 725, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":722
+      /* "src/lxml/serializer.pxi":721
  *     if c_method == OUTPUT_METHOD_TEXT:
  *         data = _textToString(element._c_node, encoding, with_tail)
  *         if compression:             # <<<<<<<<<<<<<<
@@ -148446,7 +148479,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
     }
 
-    /* "src/lxml/serializer.pxi":727
+    /* "src/lxml/serializer.pxi":726
  *                 gzip_file.write(data)
  *             data = bytes_out.getvalue()
  *         if _isString(f):             # <<<<<<<<<<<<<<
@@ -148456,19 +148489,19 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
     __pyx_t_12 = (_isString(__pyx_v_f) != 0);
     if (__pyx_t_12) {
 
-      /* "src/lxml/serializer.pxi":728
+      /* "src/lxml/serializer.pxi":727
  *             data = bytes_out.getvalue()
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)             # <<<<<<<<<<<<<<
  *             with open(filename8, 'wb') as f:
  *                 f.write(data)
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 728, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 727, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_filename8 = __pyx_t_3;
       __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":729
+      /* "src/lxml/serializer.pxi":728
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  *             with open(filename8, 'wb') as f:             # <<<<<<<<<<<<<<
@@ -148476,7 +148509,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  *         else:
  */
       /*with:*/ {
-        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_open); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 729, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_open); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 728, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_5 = NULL;
         __pyx_t_1 = 0;
@@ -148493,7 +148526,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         #if CYTHON_FAST_PYCALL
         if (PyFunction_Check(__pyx_t_4)) {
           PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_filename8, __pyx_n_s_wb};
-          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 729, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 728, __pyx_L1_error)
           __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_GOTREF(__pyx_t_3);
         } else
@@ -148501,13 +148534,13 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         #if CYTHON_FAST_PYCCALL
         if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
           PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_filename8, __pyx_n_s_wb};
-          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 729, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 728, __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_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 729, __pyx_L1_error)
+          __pyx_t_7 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 728, __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;
@@ -148518,14 +148551,14 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
           __Pyx_INCREF(__pyx_n_s_wb);
           __Pyx_GIVEREF(__pyx_n_s_wb);
           PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_1, __pyx_n_s_wb);
-          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 729, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 728, __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_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 729, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 728, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 729, __pyx_L20_error)
+        __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 728, __pyx_L20_error)
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_5 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
@@ -148539,7 +148572,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         }
         __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-        if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 729, __pyx_L20_error)
+        if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 728, __pyx_L20_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_t_7 = __pyx_t_4;
@@ -148557,14 +148590,14 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
               __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_7);
               __pyx_t_7 = 0;
 
-              /* "src/lxml/serializer.pxi":730
+              /* "src/lxml/serializer.pxi":729
  *             filename8 = _encodeFilename(f)
  *             with open(filename8, 'wb') as f:
  *                 f.write(data)             # <<<<<<<<<<<<<<
  *         else:
  *             f.write(data)
  */
-              __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 730, __pyx_L24_error)
+              __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 729, __pyx_L24_error)
               __Pyx_GOTREF(__pyx_t_3);
               __pyx_t_4 = NULL;
               if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -148578,12 +148611,12 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
               }
               __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_data);
               __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-              if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 730, __pyx_L24_error)
+              if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 729, __pyx_L24_error)
               __Pyx_GOTREF(__pyx_t_7);
               __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-              /* "src/lxml/serializer.pxi":729
+              /* "src/lxml/serializer.pxi":728
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  *             with open(filename8, 'wb') as f:             # <<<<<<<<<<<<<<
@@ -148602,20 +148635,20 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
             __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
             /*except:*/ {
               __Pyx_AddTraceback("lxml.etree._tofilelike", __pyx_clineno, __pyx_lineno, __pyx_filename);
-              if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(9, 729, __pyx_L26_except_error)
+              if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(9, 728, __pyx_L26_except_error)
               __Pyx_GOTREF(__pyx_t_7);
               __Pyx_GOTREF(__pyx_t_3);
               __Pyx_GOTREF(__pyx_t_4);
-              __pyx_t_5 = PyTuple_Pack(3, __pyx_t_7, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 729, __pyx_L26_except_error)
+              __pyx_t_5 = PyTuple_Pack(3, __pyx_t_7, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 728, __pyx_L26_except_error)
               __Pyx_GOTREF(__pyx_t_5);
               __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-              if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 729, __pyx_L26_except_error)
+              if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 728, __pyx_L26_except_error)
               __Pyx_GOTREF(__pyx_t_11);
               __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
               __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-              if (__pyx_t_12 < 0) __PYX_ERR(9, 729, __pyx_L26_except_error)
+              if (__pyx_t_12 < 0) __PYX_ERR(9, 728, __pyx_L26_except_error)
               __pyx_t_2 = ((!(__pyx_t_12 != 0)) != 0);
               if (__pyx_t_2) {
                 __Pyx_GIVEREF(__pyx_t_7);
@@ -148623,7 +148656,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
                 __Pyx_XGIVEREF(__pyx_t_4);
                 __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_3, __pyx_t_4);
                 __pyx_t_7 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; 
-                __PYX_ERR(9, 729, __pyx_L26_except_error)
+                __PYX_ERR(9, 728, __pyx_L26_except_error)
               }
               __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -148649,7 +148682,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
             if (__pyx_t_6) {
               __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-              if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 729, __pyx_L1_error)
+              if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 728, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_8);
               __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
             }
@@ -148664,7 +148697,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         __pyx_L33:;
       }
 
-      /* "src/lxml/serializer.pxi":727
+      /* "src/lxml/serializer.pxi":726
  *                 gzip_file.write(data)
  *             data = bytes_out.getvalue()
  *         if _isString(f):             # <<<<<<<<<<<<<<
@@ -148674,7 +148707,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
       goto __pyx_L19;
     }
 
-    /* "src/lxml/serializer.pxi":732
+    /* "src/lxml/serializer.pxi":731
  *                 f.write(data)
  *         else:
  *             f.write(data)             # <<<<<<<<<<<<<<
@@ -148682,7 +148715,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  * 
  */
     /*else*/ {
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 732, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 731, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_7 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -148696,14 +148729,14 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
       }
       __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_7, __pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_data);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 732, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 731, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
     __pyx_L19:;
 
-    /* "src/lxml/serializer.pxi":733
+    /* "src/lxml/serializer.pxi":732
  *         else:
  *             f.write(data)
  *         return             # <<<<<<<<<<<<<<
@@ -148714,7 +148747,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":720
+    /* "src/lxml/serializer.pxi":719
  * 
  *     c_method = _findOutputMethod(method)
  *     if c_method == OUTPUT_METHOD_TEXT:             # <<<<<<<<<<<<<<
@@ -148723,7 +148756,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
   }
 
-  /* "src/lxml/serializer.pxi":735
+  /* "src/lxml/serializer.pxi":734
  *         return
  * 
  *     if encoding is None:             # <<<<<<<<<<<<<<
@@ -148734,7 +148767,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __pyx_t_12 = (__pyx_t_2 != 0);
   if (__pyx_t_12) {
 
-    /* "src/lxml/serializer.pxi":736
+    /* "src/lxml/serializer.pxi":735
  * 
  *     if encoding is None:
  *         c_enc = NULL             # <<<<<<<<<<<<<<
@@ -148743,7 +148776,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
     __pyx_v_c_enc = NULL;
 
-    /* "src/lxml/serializer.pxi":735
+    /* "src/lxml/serializer.pxi":734
  *         return
  * 
  *     if encoding is None:             # <<<<<<<<<<<<<<
@@ -148753,7 +148786,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
     goto __pyx_L34;
   }
 
-  /* "src/lxml/serializer.pxi":738
+  /* "src/lxml/serializer.pxi":737
  *         c_enc = NULL
  *     else:
  *         encoding = _utf8(encoding)             # <<<<<<<<<<<<<<
@@ -148761,12 +148794,12 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  *     if doctype is None:
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 738, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 737, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":739
+    /* "src/lxml/serializer.pxi":738
  *     else:
  *         encoding = _utf8(encoding)
  *         c_enc = _cstr(encoding)             # <<<<<<<<<<<<<<
@@ -148777,7 +148810,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   }
   __pyx_L34:;
 
-  /* "src/lxml/serializer.pxi":740
+  /* "src/lxml/serializer.pxi":739
  *         encoding = _utf8(encoding)
  *         c_enc = _cstr(encoding)
  *     if doctype is None:             # <<<<<<<<<<<<<<
@@ -148788,7 +148821,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __pyx_t_2 = (__pyx_t_12 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":741
+    /* "src/lxml/serializer.pxi":740
  *         c_enc = _cstr(encoding)
  *     if doctype is None:
  *         c_doctype = NULL             # <<<<<<<<<<<<<<
@@ -148797,7 +148830,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
     __pyx_v_c_doctype = NULL;
 
-    /* "src/lxml/serializer.pxi":740
+    /* "src/lxml/serializer.pxi":739
  *         encoding = _utf8(encoding)
  *         c_enc = _cstr(encoding)
  *     if doctype is None:             # <<<<<<<<<<<<<<
@@ -148807,7 +148840,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
     goto __pyx_L35;
   }
 
-  /* "src/lxml/serializer.pxi":743
+  /* "src/lxml/serializer.pxi":742
  *         c_doctype = NULL
  *     else:
  *         doctype = _utf8(doctype)             # <<<<<<<<<<<<<<
@@ -148815,12 +148848,12 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  * 
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_doctype); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 743, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_doctype); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 742, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":744
+    /* "src/lxml/serializer.pxi":743
  *     else:
  *         doctype = _utf8(doctype)
  *         c_doctype = _xcstr(doctype)             # <<<<<<<<<<<<<<
@@ -148831,19 +148864,19 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   }
   __pyx_L35:;
 
-  /* "src/lxml/serializer.pxi":746
+  /* "src/lxml/serializer.pxi":745
  *         c_doctype = _xcstr(doctype)
  * 
  *     writer = _create_output_buffer(f, c_enc, compression, &c_buffer, close=False)             # <<<<<<<<<<<<<<
  *     if writer is None:
  *         with nogil:
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_f, __pyx_v_c_enc, __pyx_v_compression, (&__pyx_v_c_buffer), 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 746, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_f, __pyx_v_c_enc, __pyx_v_compression, (&__pyx_v_c_buffer), 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 745, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_writer, ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_t_4));
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":747
+  /* "src/lxml/serializer.pxi":746
  * 
  *     writer = _create_output_buffer(f, c_enc, compression, &c_buffer, close=False)
  *     if writer is None:             # <<<<<<<<<<<<<<
@@ -148854,7 +148887,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __pyx_t_12 = (__pyx_t_2 != 0);
   if (__pyx_t_12) {
 
-    /* "src/lxml/serializer.pxi":748
+    /* "src/lxml/serializer.pxi":747
  *     writer = _create_output_buffer(f, c_enc, compression, &c_buffer, close=False)
  *     if writer is None:
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -148869,7 +148902,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         #endif
         /*try:*/ {
 
-          /* "src/lxml/serializer.pxi":749
+          /* "src/lxml/serializer.pxi":748
  *     if writer is None:
  *         with nogil:
  *             error_result = _serialise_node(             # <<<<<<<<<<<<<<
@@ -148879,7 +148912,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
           __pyx_v_error_result = __pyx_f_4lxml_5etree__serialise_node(__pyx_v_c_buffer, __pyx_v_c_doctype, __pyx_v_c_enc, __pyx_v_element->_c_node, __pyx_v_c_method, __pyx_v_write_xml_declaration, __pyx_v_write_doctype, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_standalone);
         }
 
-        /* "src/lxml/serializer.pxi":748
+        /* "src/lxml/serializer.pxi":747
  *     writer = _create_output_buffer(f, c_enc, compression, &c_buffer, close=False)
  *     if writer is None:
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -148898,7 +148931,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         }
     }
 
-    /* "src/lxml/serializer.pxi":747
+    /* "src/lxml/serializer.pxi":746
  * 
  *     writer = _create_output_buffer(f, c_enc, compression, &c_buffer, close=False)
  *     if writer is None:             # <<<<<<<<<<<<<<
@@ -148908,7 +148941,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
     goto __pyx_L36;
   }
 
-  /* "src/lxml/serializer.pxi":753
+  /* "src/lxml/serializer.pxi":752
  *                 write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)
  *     else:
  *         error_result = _serialise_node(             # <<<<<<<<<<<<<<
@@ -148917,7 +148950,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
   /*else*/ {
 
-    /* "src/lxml/serializer.pxi":755
+    /* "src/lxml/serializer.pxi":754
  *         error_result = _serialise_node(
  *             c_buffer, c_doctype, c_enc, element._c_node, c_method,
  *             write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)             # <<<<<<<<<<<<<<
@@ -148928,7 +148961,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   }
   __pyx_L36:;
 
-  /* "src/lxml/serializer.pxi":757
+  /* "src/lxml/serializer.pxi":756
  *             write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)
  * 
  *     if writer is not None:             # <<<<<<<<<<<<<<
@@ -148939,16 +148972,16 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __pyx_t_2 = (__pyx_t_12 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":758
+    /* "src/lxml/serializer.pxi":757
  * 
  *     if writer is not None:
  *         writer._exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
  *     if error_result != xmlerror.XML_ERR_OK:
  *         _raiseSerialisationError(error_result)
  */
-    __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_writer->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_writer->_exc_context); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 758, __pyx_L1_error)
+    __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_writer->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_writer->_exc_context); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 757, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":757
+    /* "src/lxml/serializer.pxi":756
  *             write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)
  * 
  *     if writer is not None:             # <<<<<<<<<<<<<<
@@ -148957,7 +148990,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
   }
 
-  /* "src/lxml/serializer.pxi":759
+  /* "src/lxml/serializer.pxi":758
  *     if writer is not None:
  *         writer._exc_context._raise_if_stored()
  *     if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -148967,18 +149000,18 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   __pyx_t_2 = ((__pyx_v_error_result != XML_ERR_OK) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":760
+    /* "src/lxml/serializer.pxi":759
  *         writer._exc_context._raise_if_stored()
  *     if error_result != xmlerror.XML_ERR_OK:
  *         _raiseSerialisationError(error_result)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 760, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 759, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":759
+    /* "src/lxml/serializer.pxi":758
  *     if writer is not None:
  *         writer._exc_context._raise_if_stored()
  *     if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -148987,7 +149020,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
   }
 
-  /* "src/lxml/serializer.pxi":708
+  /* "src/lxml/serializer.pxi":707
  *     return (<_FilelikeWriter>ctxt).close()
  * 
  * cdef _tofilelike(f, _Element element, encoding, doctype, method,             # <<<<<<<<<<<<<<
@@ -149019,7 +149052,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":763
+/* "src/lxml/serializer.pxi":762
  * 
  * 
  * cdef int _serialise_node(tree.xmlOutputBuffer* c_buffer, const_xmlChar* c_doctype,             # <<<<<<<<<<<<<<
@@ -149033,7 +149066,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "src/lxml/serializer.pxi":767
+  /* "src/lxml/serializer.pxi":766
  *                          bint write_xml_declaration, bint write_doctype, bint pretty_print,
  *                          bint with_tail, int standalone) nogil:
  *     _writeNodeToBuffer(             # <<<<<<<<<<<<<<
@@ -149042,7 +149075,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
  */
   __pyx_f_4lxml_5etree__writeNodeToBuffer(__pyx_v_c_buffer, __pyx_v_c_node, __pyx_v_c_enc, __pyx_v_c_doctype, __pyx_v_c_method, __pyx_v_write_xml_declaration, __pyx_v_write_doctype, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_standalone);
 
-  /* "src/lxml/serializer.pxi":770
+  /* "src/lxml/serializer.pxi":769
  *         c_buffer, c_node, c_enc, c_doctype, c_method,
  *         write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)
  *     error_result = c_buffer.error             # <<<<<<<<<<<<<<
@@ -149052,7 +149085,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
   __pyx_t_1 = __pyx_v_c_buffer->error;
   __pyx_v_error_result = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":771
+  /* "src/lxml/serializer.pxi":770
  *         write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)
  *     error_result = c_buffer.error
  *     if error_result == xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -149062,7 +149095,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
   __pyx_t_2 = ((__pyx_v_error_result == XML_ERR_OK) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":772
+    /* "src/lxml/serializer.pxi":771
  *     error_result = c_buffer.error
  *     if error_result == xmlerror.XML_ERR_OK:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -149071,7 +149104,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
  */
     __pyx_v_error_result = xmlOutputBufferClose(__pyx_v_c_buffer);
 
-    /* "src/lxml/serializer.pxi":773
+    /* "src/lxml/serializer.pxi":772
  *     if error_result == xmlerror.XML_ERR_OK:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  *         if error_result != -1:             # <<<<<<<<<<<<<<
@@ -149081,7 +149114,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
     __pyx_t_2 = ((__pyx_v_error_result != -1L) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":774
+      /* "src/lxml/serializer.pxi":773
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  *         if error_result != -1:
  *             error_result = xmlerror.XML_ERR_OK             # <<<<<<<<<<<<<<
@@ -149090,7 +149123,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
  */
       __pyx_v_error_result = XML_ERR_OK;
 
-      /* "src/lxml/serializer.pxi":773
+      /* "src/lxml/serializer.pxi":772
  *     if error_result == xmlerror.XML_ERR_OK:
  *         error_result = tree.xmlOutputBufferClose(c_buffer)
  *         if error_result != -1:             # <<<<<<<<<<<<<<
@@ -149099,7 +149132,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
  */
     }
 
-    /* "src/lxml/serializer.pxi":771
+    /* "src/lxml/serializer.pxi":770
  *         write_xml_declaration, write_doctype, pretty_print, with_tail, standalone)
  *     error_result = c_buffer.error
  *     if error_result == xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -149109,7 +149142,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":776
+  /* "src/lxml/serializer.pxi":775
  *             error_result = xmlerror.XML_ERR_OK
  *     else:
  *         tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -149121,7 +149154,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
   }
   __pyx_L3:;
 
-  /* "src/lxml/serializer.pxi":777
+  /* "src/lxml/serializer.pxi":776
  *     else:
  *         tree.xmlOutputBufferClose(c_buffer)
  *     return error_result             # <<<<<<<<<<<<<<
@@ -149131,7 +149164,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
   __pyx_r = __pyx_v_error_result;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":763
+  /* "src/lxml/serializer.pxi":762
  * 
  * 
  * cdef int _serialise_node(tree.xmlOutputBuffer* c_buffer, const_xmlChar* c_doctype,             # <<<<<<<<<<<<<<
@@ -149144,7 +149177,7 @@ static int __pyx_f_4lxml_5etree__serialise_node(xmlOutputBuffer *__pyx_v_c_buffe
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":780
+/* "src/lxml/serializer.pxi":779
  * 
  * 
  * cdef _FilelikeWriter _create_output_buffer(             # <<<<<<<<<<<<<<
@@ -149179,7 +149212,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_create_output_buffer", 0);
 
-  /* "src/lxml/serializer.pxi":786
+  /* "src/lxml/serializer.pxi":785
  *     cdef _FilelikeWriter writer
  *     cdef bytes filename8
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)             # <<<<<<<<<<<<<<
@@ -149188,7 +149221,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
   __pyx_v_enchandler = xmlFindCharEncodingHandler(__pyx_v_c_enc);
 
-  /* "src/lxml/serializer.pxi":787
+  /* "src/lxml/serializer.pxi":786
  *     cdef bytes filename8
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL:             # <<<<<<<<<<<<<<
@@ -149198,14 +149231,14 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
   __pyx_t_1 = ((__pyx_v_enchandler == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":789
+    /* "src/lxml/serializer.pxi":788
  *     if enchandler is NULL:
  *         raise LookupError(
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")             # <<<<<<<<<<<<<<
  *     try:
  *         if _isString(f):
  */
-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 789, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = 0;
     __pyx_t_4 = 127;
@@ -149214,7 +149247,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
     __Pyx_GIVEREF(__pyx_kp_u_unknown_encoding);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_unknown_encoding);
     if (((__pyx_v_c_enc != NULL) != 0)) {
-      __pyx_t_6 = __Pyx_decode_c_string(__pyx_v_c_enc, 0, strlen(__pyx_v_c_enc), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 789, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_decode_c_string(__pyx_v_c_enc, 0, strlen(__pyx_v_c_enc), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 788, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_5 = __pyx_t_6;
       __pyx_t_6 = 0;
@@ -149222,7 +149255,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
       __Pyx_INCREF(__pyx_kp_u__12);
       __pyx_t_5 = __pyx_kp_u__12;
     }
-    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 789, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_4;
@@ -149234,25 +149267,25 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
     __pyx_t_3 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__22);
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__22);
-    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 789, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 788, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":788
+    /* "src/lxml/serializer.pxi":787
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL:
  *         raise LookupError(             # <<<<<<<<<<<<<<
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")
  *     try:
  */
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_LookupError, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 788, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_LookupError, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 787, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(9, 788, __pyx_L1_error)
+    __PYX_ERR(9, 787, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":787
+    /* "src/lxml/serializer.pxi":786
  *     cdef bytes filename8
  *     enchandler = tree.xmlFindCharEncodingHandler(c_enc)
  *     if enchandler is NULL:             # <<<<<<<<<<<<<<
@@ -149261,7 +149294,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
   }
 
-  /* "src/lxml/serializer.pxi":790
+  /* "src/lxml/serializer.pxi":789
  *         raise LookupError(
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")
  *     try:             # <<<<<<<<<<<<<<
@@ -149277,7 +149310,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
     __Pyx_XGOTREF(__pyx_t_9);
     /*try:*/ {
 
-      /* "src/lxml/serializer.pxi":791
+      /* "src/lxml/serializer.pxi":790
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")
  *     try:
  *         if _isString(f):             # <<<<<<<<<<<<<<
@@ -149287,27 +149320,27 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
       __pyx_t_1 = (_isString(__pyx_v_f) != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":792
+        /* "src/lxml/serializer.pxi":791
  *     try:
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)             # <<<<<<<<<<<<<<
  *             if b'%' in filename8 and (
  *                     # Exclude absolute Windows paths and file:// URLs.
  */
-        __pyx_t_2 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 792, __pyx_L4_error)
+        __pyx_t_2 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 791, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_2);
-        if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(9, 792, __pyx_L4_error)
+        if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(9, 791, __pyx_L4_error)
         __pyx_v_filename8 = ((PyObject*)__pyx_t_2);
         __pyx_t_2 = 0;
 
-        /* "src/lxml/serializer.pxi":793
+        /* "src/lxml/serializer.pxi":792
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  *             if b'%' in filename8 and (             # <<<<<<<<<<<<<<
  *                     # Exclude absolute Windows paths and file:// URLs.
  *                     _isFilePath(<const xmlChar*>filename8) not in (NO_FILE_PATH, ABS_WIN_FILE_PATH)
  */
-        __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__62, __pyx_v_filename8, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(9, 793, __pyx_L4_error)
+        __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__62, __pyx_v_filename8, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(9, 792, __pyx_L4_error)
         __pyx_t_11 = (__pyx_t_10 != 0);
         if (__pyx_t_11) {
         } else {
@@ -149315,7 +149348,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
           goto __pyx_L12_bool_binop_done;
         }
 
-        /* "src/lxml/serializer.pxi":795
+        /* "src/lxml/serializer.pxi":794
  *             if b'%' in filename8 and (
  *                     # Exclude absolute Windows paths and file:// URLs.
  *                     _isFilePath(<const xmlChar*>filename8) not in (NO_FILE_PATH, ABS_WIN_FILE_PATH)             # <<<<<<<<<<<<<<
@@ -149324,9 +149357,9 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         if (unlikely(__pyx_v_filename8 == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
-          __PYX_ERR(9, 795, __pyx_L4_error)
+          __PYX_ERR(9, 794, __pyx_L4_error)
         }
-        __pyx_t_12 = __Pyx_PyBytes_AsUString(__pyx_v_filename8); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(9, 795, __pyx_L4_error)
+        __pyx_t_12 = __Pyx_PyBytes_AsUString(__pyx_v_filename8); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(9, 794, __pyx_L4_error)
         __pyx_t_11 = __pyx_f_4lxml_5etree__isFilePath(((xmlChar const *)__pyx_t_12));
         __pyx_t_13 = ((__pyx_t_11 != __pyx_e_4lxml_5etree_NO_FILE_PATH) != 0);
         if (__pyx_t_13) {
@@ -149344,7 +149377,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
           goto __pyx_L12_bool_binop_done;
         }
 
-        /* "src/lxml/serializer.pxi":796
+        /* "src/lxml/serializer.pxi":795
  *                     # Exclude absolute Windows paths and file:// URLs.
  *                     _isFilePath(<const xmlChar*>filename8) not in (NO_FILE_PATH, ABS_WIN_FILE_PATH)
  *                     or filename8[:7].lower() == b'file://'):             # <<<<<<<<<<<<<<
@@ -149353,11 +149386,11 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         if (unlikely(__pyx_v_filename8 == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-          __PYX_ERR(9, 796, __pyx_L4_error)
+          __PYX_ERR(9, 795, __pyx_L4_error)
         }
-        __pyx_t_6 = PySequence_GetSlice(__pyx_v_filename8, 0, 7); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 796, __pyx_L4_error)
+        __pyx_t_6 = PySequence_GetSlice(__pyx_v_filename8, 0, 7); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 795, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_lower); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 796, __pyx_L4_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_lower); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 795, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_6 = NULL;
@@ -149372,15 +149405,15 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         }
         __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 796, __pyx_L4_error)
+        if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 795, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __pyx_t_11 = (__Pyx_PyBytes_Equals(__pyx_t_2, __pyx_kp_b_file_2, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 796, __pyx_L4_error)
+        __pyx_t_11 = (__Pyx_PyBytes_Equals(__pyx_t_2, __pyx_kp_b_file_2, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 795, __pyx_L4_error)
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __pyx_t_1 = __pyx_t_11;
         __pyx_L12_bool_binop_done:;
 
-        /* "src/lxml/serializer.pxi":793
+        /* "src/lxml/serializer.pxi":792
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  *             if b'%' in filename8 and (             # <<<<<<<<<<<<<<
@@ -149389,20 +149422,20 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         if (__pyx_t_1) {
 
-          /* "src/lxml/serializer.pxi":799
+          /* "src/lxml/serializer.pxi":798
  *                 # A file path (not a URL) containing the '%' URL escape character.
  *                 # libxml2 uses URL-unescaping on these, so escape the path before passing it in.
  *                 filename8 = filename8.replace(b'%', b'%25')             # <<<<<<<<<<<<<<
  *             c_buffer = tree.xmlOutputBufferCreateFilename(
  *                 _cstr(filename8), enchandler, c_compression)
  */
-          __pyx_t_2 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_replace, __pyx_v_filename8, __pyx_kp_b__62, __pyx_kp_b_25); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 799, __pyx_L4_error)
+          __pyx_t_2 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_replace, __pyx_v_filename8, __pyx_kp_b__62, __pyx_kp_b_25); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 798, __pyx_L4_error)
           __Pyx_GOTREF(__pyx_t_2);
-          if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(9, 799, __pyx_L4_error)
+          if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(9, 798, __pyx_L4_error)
           __Pyx_DECREF_SET(__pyx_v_filename8, ((PyObject*)__pyx_t_2));
           __pyx_t_2 = 0;
 
-          /* "src/lxml/serializer.pxi":793
+          /* "src/lxml/serializer.pxi":792
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  *             if b'%' in filename8 and (             # <<<<<<<<<<<<<<
@@ -149411,7 +149444,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         }
 
-        /* "src/lxml/serializer.pxi":800
+        /* "src/lxml/serializer.pxi":799
  *                 # libxml2 uses URL-unescaping on these, so escape the path before passing it in.
  *                 filename8 = filename8.replace(b'%', b'%25')
  *             c_buffer = tree.xmlOutputBufferCreateFilename(             # <<<<<<<<<<<<<<
@@ -149420,7 +149453,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         __pyx_v_c_buffer = xmlOutputBufferCreateFilename(PyBytes_AS_STRING(__pyx_v_filename8), __pyx_v_enchandler, __pyx_v_c_compression);
 
-        /* "src/lxml/serializer.pxi":802
+        /* "src/lxml/serializer.pxi":801
  *             c_buffer = tree.xmlOutputBufferCreateFilename(
  *                 _cstr(filename8), enchandler, c_compression)
  *             if c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -149430,18 +149463,18 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         __pyx_t_1 = ((__pyx_v_c_buffer == NULL) != 0);
         if (__pyx_t_1) {
 
-          /* "src/lxml/serializer.pxi":803
+          /* "src/lxml/serializer.pxi":802
  *                 _cstr(filename8), enchandler, c_compression)
  *             if c_buffer is NULL:
  *                 python.PyErr_SetFromErrno(IOError)  # raises IOError             # <<<<<<<<<<<<<<
  *             writer = None
  *         elif hasattr(f, 'write'):
  */
-          __pyx_t_2 = PyErr_SetFromErrno(__pyx_builtin_IOError); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 803, __pyx_L4_error)
+          __pyx_t_2 = PyErr_SetFromErrno(__pyx_builtin_IOError); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 802, __pyx_L4_error)
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-          /* "src/lxml/serializer.pxi":802
+          /* "src/lxml/serializer.pxi":801
  *             c_buffer = tree.xmlOutputBufferCreateFilename(
  *                 _cstr(filename8), enchandler, c_compression)
  *             if c_buffer is NULL:             # <<<<<<<<<<<<<<
@@ -149450,7 +149483,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         }
 
-        /* "src/lxml/serializer.pxi":804
+        /* "src/lxml/serializer.pxi":803
  *             if c_buffer is NULL:
  *                 python.PyErr_SetFromErrno(IOError)  # raises IOError
  *             writer = None             # <<<<<<<<<<<<<<
@@ -149460,7 +149493,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         __Pyx_INCREF(Py_None);
         __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None);
 
-        /* "src/lxml/serializer.pxi":791
+        /* "src/lxml/serializer.pxi":790
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")
  *     try:
  *         if _isString(f):             # <<<<<<<<<<<<<<
@@ -149470,57 +149503,57 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         goto __pyx_L10;
       }
 
-      /* "src/lxml/serializer.pxi":805
+      /* "src/lxml/serializer.pxi":804
  *                 python.PyErr_SetFromErrno(IOError)  # raises IOError
  *             writer = None
  *         elif hasattr(f, 'write'):             # <<<<<<<<<<<<<<
  *             writer = _FilelikeWriter(f, compression=c_compression, close=close)
  *             c_buffer = writer._createOutputBuffer(enchandler)
  */
-      __pyx_t_1 = __Pyx_HasAttr(__pyx_v_f, __pyx_n_s_write); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 805, __pyx_L4_error)
+      __pyx_t_1 = __Pyx_HasAttr(__pyx_v_f, __pyx_n_s_write); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 804, __pyx_L4_error)
       __pyx_t_11 = (__pyx_t_1 != 0);
       if (likely(__pyx_t_11)) {
 
-        /* "src/lxml/serializer.pxi":806
+        /* "src/lxml/serializer.pxi":805
  *             writer = None
  *         elif hasattr(f, 'write'):
  *             writer = _FilelikeWriter(f, compression=c_compression, close=close)             # <<<<<<<<<<<<<<
  *             c_buffer = writer._createOutputBuffer(enchandler)
  *         else:
  */
-        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 806, __pyx_L4_error)
+        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_INCREF(__pyx_v_f);
         __Pyx_GIVEREF(__pyx_v_f);
         PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_f);
-        __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 806, __pyx_L4_error)
+        __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_c_compression); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 806, __pyx_L4_error)
+        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_c_compression); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_compression, __pyx_t_6) < 0) __PYX_ERR(9, 806, __pyx_L4_error)
+        if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_compression, __pyx_t_6) < 0) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_close); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 806, __pyx_L4_error)
+        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_close); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_close, __pyx_t_6) < 0) __PYX_ERR(9, 806, __pyx_L4_error)
+        if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_close, __pyx_t_6) < 0) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FilelikeWriter), __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 806, __pyx_L4_error)
+        __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FilelikeWriter), __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 805, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "src/lxml/serializer.pxi":807
+        /* "src/lxml/serializer.pxi":806
  *         elif hasattr(f, 'write'):
  *             writer = _FilelikeWriter(f, compression=c_compression, close=close)
  *             c_buffer = writer._createOutputBuffer(enchandler)             # <<<<<<<<<<<<<<
  *         else:
  *             raise TypeError(
  */
-        __pyx_t_14 = __pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer(__pyx_v_writer, __pyx_v_enchandler); if (unlikely(__pyx_t_14 == ((xmlOutputBuffer *)NULL))) __PYX_ERR(9, 807, __pyx_L4_error)
+        __pyx_t_14 = __pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer(__pyx_v_writer, __pyx_v_enchandler); if (unlikely(__pyx_t_14 == ((xmlOutputBuffer *)NULL))) __PYX_ERR(9, 806, __pyx_L4_error)
         __pyx_v_c_buffer = __pyx_t_14;
 
-        /* "src/lxml/serializer.pxi":805
+        /* "src/lxml/serializer.pxi":804
  *                 python.PyErr_SetFromErrno(IOError)  # raises IOError
  *             writer = None
  *         elif hasattr(f, 'write'):             # <<<<<<<<<<<<<<
@@ -149530,7 +149563,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         goto __pyx_L10;
       }
 
-      /* "src/lxml/serializer.pxi":809
+      /* "src/lxml/serializer.pxi":808
  *             c_buffer = writer._createOutputBuffer(enchandler)
  *         else:
  *             raise TypeError(             # <<<<<<<<<<<<<<
@@ -149539,14 +149572,14 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
       /*else*/ {
 
-        /* "src/lxml/serializer.pxi":810
+        /* "src/lxml/serializer.pxi":809
  *         else:
  *             raise TypeError(
  *                 f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")             # <<<<<<<<<<<<<<
  *     except:
  *         tree.xmlCharEncCloseFunc(enchandler)
  */
-        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 810, __pyx_L4_error)
+        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 809, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_3 = 0;
         __pyx_t_4 = 127;
@@ -149555,7 +149588,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         __Pyx_GIVEREF(__pyx_kp_u_File_or_filename_expected_got);
         PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_File_or_filename_expected_got);
         __pyx_t_15 = _fqtypename(__pyx_v_f);
-        __pyx_t_5 = __Pyx_decode_c_string(__pyx_t_15, 0, strlen(__pyx_t_15), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 810, __pyx_L4_error)
+        __pyx_t_5 = __Pyx_decode_c_string(__pyx_t_15, 0, strlen(__pyx_t_15), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 809, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_5);
         __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
@@ -149567,27 +149600,27 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
         __pyx_t_3 += 1;
         __Pyx_GIVEREF(__pyx_kp_u__22);
         PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__22);
-        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 810, __pyx_L4_error)
+        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 809, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "src/lxml/serializer.pxi":809
+        /* "src/lxml/serializer.pxi":808
  *             c_buffer = writer._createOutputBuffer(enchandler)
  *         else:
  *             raise TypeError(             # <<<<<<<<<<<<<<
  *                 f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")
  *     except:
  */
-        __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 809, __pyx_L4_error)
+        __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 808, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_Raise(__pyx_t_6, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __PYX_ERR(9, 809, __pyx_L4_error)
+        __PYX_ERR(9, 808, __pyx_L4_error)
       }
       __pyx_L10:;
 
-      /* "src/lxml/serializer.pxi":790
+      /* "src/lxml/serializer.pxi":789
  *         raise LookupError(
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")
  *     try:             # <<<<<<<<<<<<<<
@@ -149604,7 +149637,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":811
+    /* "src/lxml/serializer.pxi":810
  *             raise TypeError(
  *                 f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")
  *     except:             # <<<<<<<<<<<<<<
@@ -149613,12 +149646,12 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
     /*except:*/ {
       __Pyx_AddTraceback("lxml.etree._create_output_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_2) < 0) __PYX_ERR(9, 811, __pyx_L6_except_error)
+      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_2) < 0) __PYX_ERR(9, 810, __pyx_L6_except_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_2);
 
-      /* "src/lxml/serializer.pxi":812
+      /* "src/lxml/serializer.pxi":811
  *                 f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")
  *     except:
  *         tree.xmlCharEncCloseFunc(enchandler)             # <<<<<<<<<<<<<<
@@ -149627,7 +149660,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
       (void)(xmlCharEncCloseFunc(__pyx_v_enchandler));
 
-      /* "src/lxml/serializer.pxi":813
+      /* "src/lxml/serializer.pxi":812
  *     except:
  *         tree.xmlCharEncCloseFunc(enchandler)
  *         raise             # <<<<<<<<<<<<<<
@@ -149639,11 +149672,11 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
       __Pyx_XGIVEREF(__pyx_t_2);
       __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_5, __pyx_t_2);
       __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; 
-      __PYX_ERR(9, 813, __pyx_L6_except_error)
+      __PYX_ERR(9, 812, __pyx_L6_except_error)
     }
     __pyx_L6_except_error:;
 
-    /* "src/lxml/serializer.pxi":790
+    /* "src/lxml/serializer.pxi":789
  *         raise LookupError(
  *             f"unknown encoding: '{c_enc.decode('UTF-8') if c_enc is not NULL else u''}'")
  *     try:             # <<<<<<<<<<<<<<
@@ -149658,7 +149691,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
     __pyx_L9_try_end:;
   }
 
-  /* "src/lxml/serializer.pxi":814
+  /* "src/lxml/serializer.pxi":813
  *         tree.xmlCharEncCloseFunc(enchandler)
  *         raise
  *     c_buffer_ret[0] = c_buffer             # <<<<<<<<<<<<<<
@@ -149667,7 +149700,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
   (__pyx_v_c_buffer_ret[0]) = __pyx_v_c_buffer;
 
-  /* "src/lxml/serializer.pxi":815
+  /* "src/lxml/serializer.pxi":814
  *         raise
  *     c_buffer_ret[0] = c_buffer
  *     return writer             # <<<<<<<<<<<<<<
@@ -149679,7 +149712,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
   __pyx_r = __pyx_v_writer;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":780
+  /* "src/lxml/serializer.pxi":779
  * 
  * 
  * cdef _FilelikeWriter _create_output_buffer(             # <<<<<<<<<<<<<<
@@ -149702,7 +149735,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":817
+/* "src/lxml/serializer.pxi":816
  *     return writer
  * 
  * cdef xmlChar **_convert_ns_prefixes(tree.xmlDict* c_dict, ns_prefixes) except NULL:             # <<<<<<<<<<<<<<
@@ -149734,17 +149767,17 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_convert_ns_prefixes", 0);
 
-  /* "src/lxml/serializer.pxi":818
+  /* "src/lxml/serializer.pxi":817
  * 
  * cdef xmlChar **_convert_ns_prefixes(tree.xmlDict* c_dict, ns_prefixes) except NULL:
  *     cdef size_t i, num_ns_prefixes = len(ns_prefixes)             # <<<<<<<<<<<<<<
  *     # Need to allocate one extra memory block to handle last NULL entry
  *     c_ns_prefixes = <xmlChar **>python.lxml_malloc(num_ns_prefixes + 1, sizeof(xmlChar*))
  */
-  __pyx_t_1 = PyObject_Length(__pyx_v_ns_prefixes); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(9, 818, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Length(__pyx_v_ns_prefixes); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(9, 817, __pyx_L1_error)
   __pyx_v_num_ns_prefixes = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":820
+  /* "src/lxml/serializer.pxi":819
  *     cdef size_t i, num_ns_prefixes = len(ns_prefixes)
  *     # Need to allocate one extra memory block to handle last NULL entry
  *     c_ns_prefixes = <xmlChar **>python.lxml_malloc(num_ns_prefixes + 1, sizeof(xmlChar*))             # <<<<<<<<<<<<<<
@@ -149753,7 +149786,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
   __pyx_v_c_ns_prefixes = ((xmlChar **)lxml_malloc((__pyx_v_num_ns_prefixes + 1), (sizeof(xmlChar *))));
 
-  /* "src/lxml/serializer.pxi":821
+  /* "src/lxml/serializer.pxi":820
  *     # Need to allocate one extra memory block to handle last NULL entry
  *     c_ns_prefixes = <xmlChar **>python.lxml_malloc(num_ns_prefixes + 1, sizeof(xmlChar*))
  *     if not c_ns_prefixes:             # <<<<<<<<<<<<<<
@@ -149763,16 +149796,16 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
   __pyx_t_2 = ((!(__pyx_v_c_ns_prefixes != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/serializer.pxi":822
+    /* "src/lxml/serializer.pxi":821
  *     c_ns_prefixes = <xmlChar **>python.lxml_malloc(num_ns_prefixes + 1, sizeof(xmlChar*))
  *     if not c_ns_prefixes:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     i = 0
  *     try:
  */
-    PyErr_NoMemory(); __PYX_ERR(9, 822, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(9, 821, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":821
+    /* "src/lxml/serializer.pxi":820
  *     # Need to allocate one extra memory block to handle last NULL entry
  *     c_ns_prefixes = <xmlChar **>python.lxml_malloc(num_ns_prefixes + 1, sizeof(xmlChar*))
  *     if not c_ns_prefixes:             # <<<<<<<<<<<<<<
@@ -149781,7 +149814,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
   }
 
-  /* "src/lxml/serializer.pxi":823
+  /* "src/lxml/serializer.pxi":822
  *     if not c_ns_prefixes:
  *         raise MemoryError()
  *     i = 0             # <<<<<<<<<<<<<<
@@ -149790,7 +149823,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
   __pyx_v_i = 0;
 
-  /* "src/lxml/serializer.pxi":824
+  /* "src/lxml/serializer.pxi":823
  *         raise MemoryError()
  *     i = 0
  *     try:             # <<<<<<<<<<<<<<
@@ -149806,7 +149839,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
     __Pyx_XGOTREF(__pyx_t_5);
     /*try:*/ {
 
-      /* "src/lxml/serializer.pxi":825
+      /* "src/lxml/serializer.pxi":824
  *     i = 0
  *     try:
  *         for prefix in ns_prefixes:             # <<<<<<<<<<<<<<
@@ -149817,26 +149850,26 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
         __pyx_t_6 = __pyx_v_ns_prefixes; __Pyx_INCREF(__pyx_t_6); __pyx_t_1 = 0;
         __pyx_t_7 = NULL;
       } else {
-        __pyx_t_1 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_ns_prefixes); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 825, __pyx_L4_error)
+        __pyx_t_1 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_ns_prefixes); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 824, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 825, __pyx_L4_error)
+        __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 824, __pyx_L4_error)
       }
       for (;;) {
         if (likely(!__pyx_t_7)) {
           if (likely(PyList_CheckExact(__pyx_t_6))) {
             if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_6)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_8 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_1); __Pyx_INCREF(__pyx_t_8); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(9, 825, __pyx_L4_error)
+            __pyx_t_8 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_1); __Pyx_INCREF(__pyx_t_8); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(9, 824, __pyx_L4_error)
             #else
-            __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 825, __pyx_L4_error)
+            __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 824, __pyx_L4_error)
             __Pyx_GOTREF(__pyx_t_8);
             #endif
           } else {
             if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_1); __Pyx_INCREF(__pyx_t_8); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(9, 825, __pyx_L4_error)
+            __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_1); __Pyx_INCREF(__pyx_t_8); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(9, 824, __pyx_L4_error)
             #else
-            __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 825, __pyx_L4_error)
+            __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 824, __pyx_L4_error)
             __Pyx_GOTREF(__pyx_t_8);
             #endif
           }
@@ -149846,7 +149879,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(9, 825, __pyx_L4_error)
+              else __PYX_ERR(9, 824, __pyx_L4_error)
             }
             break;
           }
@@ -149855,19 +149888,19 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
         __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_8);
         __pyx_t_8 = 0;
 
-        /* "src/lxml/serializer.pxi":826
+        /* "src/lxml/serializer.pxi":825
  *     try:
  *         for prefix in ns_prefixes:
  *              prefix_utf = _utf8(prefix)             # <<<<<<<<<<<<<<
  *              c_prefix = tree.xmlDictExists(c_dict, _xcstr(prefix_utf), len(prefix_utf))
  *              if c_prefix:
  */
-        __pyx_t_8 = __pyx_f_4lxml_5etree__utf8(__pyx_v_prefix); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 826, __pyx_L4_error)
+        __pyx_t_8 = __pyx_f_4lxml_5etree__utf8(__pyx_v_prefix); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 825, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_XDECREF_SET(__pyx_v_prefix_utf, ((PyObject*)__pyx_t_8));
         __pyx_t_8 = 0;
 
-        /* "src/lxml/serializer.pxi":827
+        /* "src/lxml/serializer.pxi":826
  *         for prefix in ns_prefixes:
  *              prefix_utf = _utf8(prefix)
  *              c_prefix = tree.xmlDictExists(c_dict, _xcstr(prefix_utf), len(prefix_utf))             # <<<<<<<<<<<<<<
@@ -149876,12 +149909,12 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
         if (unlikely(__pyx_v_prefix_utf == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-          __PYX_ERR(9, 827, __pyx_L4_error)
+          __PYX_ERR(9, 826, __pyx_L4_error)
         }
-        __pyx_t_9 = PyBytes_GET_SIZE(__pyx_v_prefix_utf); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(9, 827, __pyx_L4_error)
+        __pyx_t_9 = PyBytes_GET_SIZE(__pyx_v_prefix_utf); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(9, 826, __pyx_L4_error)
         __pyx_v_c_prefix = xmlDictExists(__pyx_v_c_dict, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_prefix_utf), __pyx_t_9);
 
-        /* "src/lxml/serializer.pxi":828
+        /* "src/lxml/serializer.pxi":827
  *              prefix_utf = _utf8(prefix)
  *              c_prefix = tree.xmlDictExists(c_dict, _xcstr(prefix_utf), len(prefix_utf))
  *              if c_prefix:             # <<<<<<<<<<<<<<
@@ -149891,7 +149924,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
         __pyx_t_2 = (__pyx_v_c_prefix != 0);
         if (__pyx_t_2) {
 
-          /* "src/lxml/serializer.pxi":830
+          /* "src/lxml/serializer.pxi":829
  *              if c_prefix:
  *                  # unknown prefixes do not need to get serialised
  *                  c_ns_prefixes[i] = <xmlChar*>c_prefix             # <<<<<<<<<<<<<<
@@ -149900,7 +149933,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
           (__pyx_v_c_ns_prefixes[__pyx_v_i]) = ((xmlChar *)__pyx_v_c_prefix);
 
-          /* "src/lxml/serializer.pxi":831
+          /* "src/lxml/serializer.pxi":830
  *                  # unknown prefixes do not need to get serialised
  *                  c_ns_prefixes[i] = <xmlChar*>c_prefix
  *                  i += 1             # <<<<<<<<<<<<<<
@@ -149909,7 +149942,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
           __pyx_v_i = (__pyx_v_i + 1);
 
-          /* "src/lxml/serializer.pxi":828
+          /* "src/lxml/serializer.pxi":827
  *              prefix_utf = _utf8(prefix)
  *              c_prefix = tree.xmlDictExists(c_dict, _xcstr(prefix_utf), len(prefix_utf))
  *              if c_prefix:             # <<<<<<<<<<<<<<
@@ -149918,7 +149951,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
         }
 
-        /* "src/lxml/serializer.pxi":825
+        /* "src/lxml/serializer.pxi":824
  *     i = 0
  *     try:
  *         for prefix in ns_prefixes:             # <<<<<<<<<<<<<<
@@ -149928,7 +149961,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
       }
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":824
+      /* "src/lxml/serializer.pxi":823
  *         raise MemoryError()
  *     i = 0
  *     try:             # <<<<<<<<<<<<<<
@@ -149944,7 +149977,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "src/lxml/serializer.pxi":832
+    /* "src/lxml/serializer.pxi":831
  *                  c_ns_prefixes[i] = <xmlChar*>c_prefix
  *                  i += 1
  *     except:             # <<<<<<<<<<<<<<
@@ -149953,12 +149986,12 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
     /*except:*/ {
       __Pyx_AddTraceback("lxml.etree._convert_ns_prefixes", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_10) < 0) __PYX_ERR(9, 832, __pyx_L6_except_error)
+      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_10) < 0) __PYX_ERR(9, 831, __pyx_L6_except_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_10);
 
-      /* "src/lxml/serializer.pxi":833
+      /* "src/lxml/serializer.pxi":832
  *                  i += 1
  *     except:
  *         python.lxml_free(c_ns_prefixes)             # <<<<<<<<<<<<<<
@@ -149967,7 +150000,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
       lxml_free(__pyx_v_c_ns_prefixes);
 
-      /* "src/lxml/serializer.pxi":834
+      /* "src/lxml/serializer.pxi":833
  *     except:
  *         python.lxml_free(c_ns_prefixes)
  *         raise             # <<<<<<<<<<<<<<
@@ -149979,11 +150012,11 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
       __Pyx_XGIVEREF(__pyx_t_10);
       __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_8, __pyx_t_10);
       __pyx_t_6 = 0; __pyx_t_8 = 0; __pyx_t_10 = 0; 
-      __PYX_ERR(9, 834, __pyx_L6_except_error)
+      __PYX_ERR(9, 833, __pyx_L6_except_error)
     }
     __pyx_L6_except_error:;
 
-    /* "src/lxml/serializer.pxi":824
+    /* "src/lxml/serializer.pxi":823
  *         raise MemoryError()
  *     i = 0
  *     try:             # <<<<<<<<<<<<<<
@@ -149998,7 +150031,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
     __pyx_L9_try_end:;
   }
 
-  /* "src/lxml/serializer.pxi":836
+  /* "src/lxml/serializer.pxi":835
  *         raise
  * 
  *     c_ns_prefixes[i] = NULL  # append end marker             # <<<<<<<<<<<<<<
@@ -150007,7 +150040,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
  */
   (__pyx_v_c_ns_prefixes[__pyx_v_i]) = NULL;
 
-  /* "src/lxml/serializer.pxi":837
+  /* "src/lxml/serializer.pxi":836
  * 
  *     c_ns_prefixes[i] = NULL  # append end marker
  *     return c_ns_prefixes             # <<<<<<<<<<<<<<
@@ -150017,7 +150050,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
   __pyx_r = __pyx_v_c_ns_prefixes;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":817
+  /* "src/lxml/serializer.pxi":816
  *     return writer
  * 
  * cdef xmlChar **_convert_ns_prefixes(tree.xmlDict* c_dict, ns_prefixes) except NULL:             # <<<<<<<<<<<<<<
@@ -150039,7 +150072,7 @@ static xmlChar **__pyx_f_4lxml_5etree__convert_ns_prefixes(xmlDict *__pyx_v_c_di
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":839
+/* "src/lxml/serializer.pxi":838
  *     return c_ns_prefixes
  * 
  * cdef _tofilelikeC14N(f, _Element element, bint exclusive, bint with_comments,             # <<<<<<<<<<<<<<
@@ -150087,7 +150120,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_tofilelikeC14N", 0);
 
-  /* "src/lxml/serializer.pxi":841
+  /* "src/lxml/serializer.pxi":840
  * cdef _tofilelikeC14N(f, _Element element, bint exclusive, bint with_comments,
  *                      int compression, inclusive_ns_prefixes):
  *     cdef _FilelikeWriter writer = None             # <<<<<<<<<<<<<<
@@ -150097,7 +150130,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
   __Pyx_INCREF(Py_None);
   __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None);
 
-  /* "src/lxml/serializer.pxi":843
+  /* "src/lxml/serializer.pxi":842
  *     cdef _FilelikeWriter writer = None
  *     cdef tree.xmlOutputBuffer* c_buffer
  *     cdef xmlChar **c_inclusive_ns_prefixes = NULL             # <<<<<<<<<<<<<<
@@ -150106,7 +150139,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
   __pyx_v_c_inclusive_ns_prefixes = NULL;
 
-  /* "src/lxml/serializer.pxi":847
+  /* "src/lxml/serializer.pxi":846
  *     cdef xmlDoc* c_base_doc
  *     cdef xmlDoc* c_doc
  *     cdef int bytes_count, error = 0             # <<<<<<<<<<<<<<
@@ -150115,7 +150148,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
   __pyx_v_error = 0;
 
-  /* "src/lxml/serializer.pxi":849
+  /* "src/lxml/serializer.pxi":848
  *     cdef int bytes_count, error = 0
  * 
  *     c_base_doc = element._c_node.doc             # <<<<<<<<<<<<<<
@@ -150125,17 +150158,17 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
   __pyx_t_1 = __pyx_v_element->_c_node->doc;
   __pyx_v_c_base_doc = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":850
+  /* "src/lxml/serializer.pxi":849
  * 
  *     c_base_doc = element._c_node.doc
  *     c_doc = _fakeRootDoc(c_base_doc, element._c_node)             # <<<<<<<<<<<<<<
  *     try:
  *         c_inclusive_ns_prefixes = (
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_c_base_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(9, 850, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_c_base_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(9, 849, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":851
+  /* "src/lxml/serializer.pxi":850
  *     c_base_doc = element._c_node.doc
  *     c_doc = _fakeRootDoc(c_base_doc, element._c_node)
  *     try:             # <<<<<<<<<<<<<<
@@ -150144,28 +150177,28 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
   /*try:*/ {
 
-    /* "src/lxml/serializer.pxi":854
+    /* "src/lxml/serializer.pxi":853
  *         c_inclusive_ns_prefixes = (
  *             _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes)
  *             if inclusive_ns_prefixes else NULL)             # <<<<<<<<<<<<<<
  * 
  *         if _isString(f):
  */
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 854, __pyx_L4_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 853, __pyx_L4_error)
     if (__pyx_t_3) {
 
-      /* "src/lxml/serializer.pxi":853
+      /* "src/lxml/serializer.pxi":852
  *     try:
  *         c_inclusive_ns_prefixes = (
  *             _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
  *             if inclusive_ns_prefixes else NULL)
  * 
  */
-      __pyx_t_4 = __pyx_f_4lxml_5etree__convert_ns_prefixes(__pyx_v_c_doc->dict, __pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_4 == ((xmlChar **)NULL))) __PYX_ERR(9, 853, __pyx_L4_error)
+      __pyx_t_4 = __pyx_f_4lxml_5etree__convert_ns_prefixes(__pyx_v_c_doc->dict, __pyx_v_inclusive_ns_prefixes); if (unlikely(__pyx_t_4 == ((xmlChar **)NULL))) __PYX_ERR(9, 852, __pyx_L4_error)
       __pyx_t_2 = __pyx_t_4;
     } else {
 
-      /* "src/lxml/serializer.pxi":854
+      /* "src/lxml/serializer.pxi":853
  *         c_inclusive_ns_prefixes = (
  *             _convert_ns_prefixes(c_doc.dict, inclusive_ns_prefixes)
  *             if inclusive_ns_prefixes else NULL)             # <<<<<<<<<<<<<<
@@ -150176,7 +150209,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     }
     __pyx_v_c_inclusive_ns_prefixes = __pyx_t_2;
 
-    /* "src/lxml/serializer.pxi":856
+    /* "src/lxml/serializer.pxi":855
  *             if inclusive_ns_prefixes else NULL)
  * 
  *         if _isString(f):             # <<<<<<<<<<<<<<
@@ -150186,19 +150219,19 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     __pyx_t_3 = (_isString(__pyx_v_f) != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/serializer.pxi":857
+      /* "src/lxml/serializer.pxi":856
  * 
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)             # <<<<<<<<<<<<<<
  *             c_filename = _cstr(filename8)
  *             with nogil:
  */
-      __pyx_t_5 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 857, __pyx_L4_error)
+      __pyx_t_5 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 856, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_v_filename8 = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "src/lxml/serializer.pxi":858
+      /* "src/lxml/serializer.pxi":857
  *         if _isString(f):
  *             filename8 = _encodeFilename(f)
  *             c_filename = _cstr(filename8)             # <<<<<<<<<<<<<<
@@ -150207,7 +150240,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
       __pyx_v_c_filename = PyBytes_AS_STRING(__pyx_v_filename8);
 
-      /* "src/lxml/serializer.pxi":859
+      /* "src/lxml/serializer.pxi":858
  *             filename8 = _encodeFilename(f)
  *             c_filename = _cstr(filename8)
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -150222,7 +150255,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
           #endif
           /*try:*/ {
 
-            /* "src/lxml/serializer.pxi":860
+            /* "src/lxml/serializer.pxi":859
  *             c_filename = _cstr(filename8)
  *             with nogil:
  *                 error = c14n.xmlC14NDocSave(             # <<<<<<<<<<<<<<
@@ -150232,7 +150265,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
             __pyx_v_error = xmlC14NDocSave(__pyx_v_c_doc, NULL, __pyx_v_exclusive, __pyx_v_c_inclusive_ns_prefixes, __pyx_v_with_comments, __pyx_v_c_filename, __pyx_v_compression);
           }
 
-          /* "src/lxml/serializer.pxi":859
+          /* "src/lxml/serializer.pxi":858
  *             filename8 = _encodeFilename(f)
  *             c_filename = _cstr(filename8)
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -150251,7 +150284,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
           }
       }
 
-      /* "src/lxml/serializer.pxi":856
+      /* "src/lxml/serializer.pxi":855
  *             if inclusive_ns_prefixes else NULL)
  * 
  *         if _isString(f):             # <<<<<<<<<<<<<<
@@ -150261,53 +150294,53 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":863
+    /* "src/lxml/serializer.pxi":862
  *                     c_doc, NULL, exclusive, c_inclusive_ns_prefixes,
  *                     with_comments, c_filename, compression)
  *         elif hasattr(f, 'write'):             # <<<<<<<<<<<<<<
  *             writer   = _FilelikeWriter(f, compression=compression)
  *             c_buffer = writer._createOutputBuffer(NULL)
  */
-    __pyx_t_3 = __Pyx_HasAttr(__pyx_v_f, __pyx_n_s_write); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 863, __pyx_L4_error)
+    __pyx_t_3 = __Pyx_HasAttr(__pyx_v_f, __pyx_n_s_write); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 862, __pyx_L4_error)
     __pyx_t_6 = (__pyx_t_3 != 0);
     if (likely(__pyx_t_6)) {
 
-      /* "src/lxml/serializer.pxi":864
+      /* "src/lxml/serializer.pxi":863
  *                     with_comments, c_filename, compression)
  *         elif hasattr(f, 'write'):
  *             writer   = _FilelikeWriter(f, compression=compression)             # <<<<<<<<<<<<<<
  *             c_buffer = writer._createOutputBuffer(NULL)
  *             with writer.error_log:
  */
-      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 864, __pyx_L4_error)
+      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 863, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_v_f);
       __Pyx_GIVEREF(__pyx_v_f);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_f);
-      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 864, __pyx_L4_error)
+      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 863, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_compression); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 864, __pyx_L4_error)
+      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_compression); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 863, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_8);
-      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_compression, __pyx_t_8) < 0) __PYX_ERR(9, 864, __pyx_L4_error)
+      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_compression, __pyx_t_8) < 0) __PYX_ERR(9, 863, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FilelikeWriter), __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 864, __pyx_L4_error)
+      __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FilelikeWriter), __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 863, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF_SET(__pyx_v_writer, ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_t_8));
       __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":865
+      /* "src/lxml/serializer.pxi":864
  *         elif hasattr(f, 'write'):
  *             writer   = _FilelikeWriter(f, compression=compression)
  *             c_buffer = writer._createOutputBuffer(NULL)             # <<<<<<<<<<<<<<
  *             with writer.error_log:
  *                 bytes_count = c14n.xmlC14NDocSaveTo(
  */
-      __pyx_t_9 = __pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer(__pyx_v_writer, NULL); if (unlikely(__pyx_t_9 == ((xmlOutputBuffer *)NULL))) __PYX_ERR(9, 865, __pyx_L4_error)
+      __pyx_t_9 = __pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer(__pyx_v_writer, NULL); if (unlikely(__pyx_t_9 == ((xmlOutputBuffer *)NULL))) __PYX_ERR(9, 864, __pyx_L4_error)
       __pyx_v_c_buffer = __pyx_t_9;
 
-      /* "src/lxml/serializer.pxi":866
+      /* "src/lxml/serializer.pxi":865
  *             writer   = _FilelikeWriter(f, compression=compression)
  *             c_buffer = writer._createOutputBuffer(NULL)
  *             with writer.error_log:             # <<<<<<<<<<<<<<
@@ -150315,15 +150348,15 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  *                     c_doc, NULL, exclusive, c_inclusive_ns_prefixes,
  */
       /*with:*/ {
-        __pyx_t_10 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_writer->error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 866, __pyx_L4_error)
+        __pyx_t_10 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_writer->error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 865, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_11 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_writer->error_log); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 866, __pyx_L10_error)
+        __pyx_t_11 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_writer->error_log); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 865, __pyx_L10_error)
         /*try:*/ {
           {
             (void)__pyx_t_12; (void)__pyx_t_13; (void)__pyx_t_14; /* mark used */
             /*try:*/ {
 
-              /* "src/lxml/serializer.pxi":867
+              /* "src/lxml/serializer.pxi":866
  *             c_buffer = writer._createOutputBuffer(NULL)
  *             with writer.error_log:
  *                 bytes_count = c14n.xmlC14NDocSaveTo(             # <<<<<<<<<<<<<<
@@ -150332,7 +150365,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
               __pyx_v_bytes_count = xmlC14NDocSaveTo(__pyx_v_c_doc, NULL, __pyx_v_exclusive, __pyx_v_c_inclusive_ns_prefixes, __pyx_v_with_comments, __pyx_v_c_buffer);
 
-              /* "src/lxml/serializer.pxi":870
+              /* "src/lxml/serializer.pxi":869
  *                     c_doc, NULL, exclusive, c_inclusive_ns_prefixes,
  *                     with_comments, c_buffer)
  *                 error = tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -150341,7 +150374,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
               __pyx_v_error = xmlOutputBufferClose(__pyx_v_c_buffer);
 
-              /* "src/lxml/serializer.pxi":871
+              /* "src/lxml/serializer.pxi":870
  *                     with_comments, c_buffer)
  *                 error = tree.xmlOutputBufferClose(c_buffer)
  *                 if bytes_count < 0:             # <<<<<<<<<<<<<<
@@ -150351,7 +150384,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
               __pyx_t_6 = ((__pyx_v_bytes_count < 0) != 0);
               if (__pyx_t_6) {
 
-                /* "src/lxml/serializer.pxi":872
+                /* "src/lxml/serializer.pxi":871
  *                 error = tree.xmlOutputBufferClose(c_buffer)
  *                 if bytes_count < 0:
  *                     error = bytes_count             # <<<<<<<<<<<<<<
@@ -150360,7 +150393,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
                 __pyx_v_error = __pyx_v_bytes_count;
 
-                /* "src/lxml/serializer.pxi":871
+                /* "src/lxml/serializer.pxi":870
  *                     with_comments, c_buffer)
  *                 error = tree.xmlOutputBufferClose(c_buffer)
  *                 if bytes_count < 0:             # <<<<<<<<<<<<<<
@@ -150370,7 +150403,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
                 goto __pyx_L20;
               }
 
-              /* "src/lxml/serializer.pxi":873
+              /* "src/lxml/serializer.pxi":872
  *                 if bytes_count < 0:
  *                     error = bytes_count
  *                 elif error != -1:             # <<<<<<<<<<<<<<
@@ -150380,7 +150413,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
               __pyx_t_6 = ((__pyx_v_error != -1L) != 0);
               if (__pyx_t_6) {
 
-                /* "src/lxml/serializer.pxi":874
+                /* "src/lxml/serializer.pxi":873
  *                     error = bytes_count
  *                 elif error != -1:
  *                     error = xmlerror.XML_ERR_OK             # <<<<<<<<<<<<<<
@@ -150389,7 +150422,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
                 __pyx_v_error = XML_ERR_OK;
 
-                /* "src/lxml/serializer.pxi":873
+                /* "src/lxml/serializer.pxi":872
  *                 if bytes_count < 0:
  *                     error = bytes_count
  *                 elif error != -1:             # <<<<<<<<<<<<<<
@@ -150399,7 +150432,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
               }
               __pyx_L20:;
 
-              /* "src/lxml/serializer.pxi":866
+              /* "src/lxml/serializer.pxi":865
  *             writer   = _FilelikeWriter(f, compression=compression)
  *             c_buffer = writer._createOutputBuffer(NULL)
  *             with writer.error_log:             # <<<<<<<<<<<<<<
@@ -150414,7 +150447,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
             if (__pyx_t_10) {
               __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              if (unlikely(!__pyx_t_14)) __PYX_ERR(9, 866, __pyx_L4_error)
+              if (unlikely(!__pyx_t_14)) __PYX_ERR(9, 865, __pyx_L4_error)
               __Pyx_GOTREF(__pyx_t_14);
               __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
             }
@@ -150429,7 +150462,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
         __pyx_L21:;
       }
 
-      /* "src/lxml/serializer.pxi":863
+      /* "src/lxml/serializer.pxi":862
  *                     c_doc, NULL, exclusive, c_inclusive_ns_prefixes,
  *                     with_comments, c_filename, compression)
  *         elif hasattr(f, 'write'):             # <<<<<<<<<<<<<<
@@ -150439,7 +150472,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       goto __pyx_L6;
     }
 
-    /* "src/lxml/serializer.pxi":876
+    /* "src/lxml/serializer.pxi":875
  *                     error = xmlerror.XML_ERR_OK
  *         else:
  *             raise TypeError(f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")             # <<<<<<<<<<<<<<
@@ -150447,7 +150480,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  *         _destroyFakeDoc(c_base_doc, c_doc)
  */
     /*else*/ {
-      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 876, __pyx_L4_error)
+      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 875, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_15 = 0;
       __pyx_t_16 = 127;
@@ -150456,7 +150489,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       __Pyx_GIVEREF(__pyx_kp_u_File_or_filename_expected_got);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_File_or_filename_expected_got);
       __pyx_t_17 = _fqtypename(__pyx_v_f);
-      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_17, 0, strlen(__pyx_t_17), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 876, __pyx_L4_error)
+      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_17, 0, strlen(__pyx_t_17), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 875, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_t_7);
       __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_16;
@@ -150468,20 +150501,20 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       __pyx_t_15 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__22);
       PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__22);
-      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 876, __pyx_L4_error)
+      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 875, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 876, __pyx_L4_error)
+      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 875, __pyx_L4_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(9, 876, __pyx_L4_error)
+      __PYX_ERR(9, 875, __pyx_L4_error)
     }
     __pyx_L6:;
   }
 
-  /* "src/lxml/serializer.pxi":878
+  /* "src/lxml/serializer.pxi":877
  *             raise TypeError(f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")
  *     finally:
  *         _destroyFakeDoc(c_base_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -150492,7 +150525,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     /*normal exit:*/{
       __pyx_f_4lxml_5etree__destroyFakeDoc(__pyx_v_c_base_doc, __pyx_v_c_doc);
 
-      /* "src/lxml/serializer.pxi":879
+      /* "src/lxml/serializer.pxi":878
  *     finally:
  *         _destroyFakeDoc(c_base_doc, c_doc)
  *         if c_inclusive_ns_prefixes is not NULL:             # <<<<<<<<<<<<<<
@@ -150502,7 +150535,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       __pyx_t_6 = ((__pyx_v_c_inclusive_ns_prefixes != NULL) != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":880
+        /* "src/lxml/serializer.pxi":879
  *         _destroyFakeDoc(c_base_doc, c_doc)
  *         if c_inclusive_ns_prefixes is not NULL:
  *             python.lxml_free(c_inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
@@ -150511,7 +150544,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
         lxml_free(__pyx_v_c_inclusive_ns_prefixes);
 
-        /* "src/lxml/serializer.pxi":879
+        /* "src/lxml/serializer.pxi":878
  *     finally:
  *         _destroyFakeDoc(c_base_doc, c_doc)
  *         if c_inclusive_ns_prefixes is not NULL:             # <<<<<<<<<<<<<<
@@ -150540,7 +150573,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       __pyx_t_11 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
       {
 
-        /* "src/lxml/serializer.pxi":878
+        /* "src/lxml/serializer.pxi":877
  *             raise TypeError(f"File or filename expected, got '{python._fqtypename(f).decode('UTF-8')}'")
  *     finally:
  *         _destroyFakeDoc(c_base_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -150549,7 +150582,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
         __pyx_f_4lxml_5etree__destroyFakeDoc(__pyx_v_c_base_doc, __pyx_v_c_doc);
 
-        /* "src/lxml/serializer.pxi":879
+        /* "src/lxml/serializer.pxi":878
  *     finally:
  *         _destroyFakeDoc(c_base_doc, c_doc)
  *         if c_inclusive_ns_prefixes is not NULL:             # <<<<<<<<<<<<<<
@@ -150559,7 +150592,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
         __pyx_t_6 = ((__pyx_v_c_inclusive_ns_prefixes != NULL) != 0);
         if (__pyx_t_6) {
 
-          /* "src/lxml/serializer.pxi":880
+          /* "src/lxml/serializer.pxi":879
  *         _destroyFakeDoc(c_base_doc, c_doc)
  *         if c_inclusive_ns_prefixes is not NULL:
  *             python.lxml_free(c_inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
@@ -150568,7 +150601,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
           lxml_free(__pyx_v_c_inclusive_ns_prefixes);
 
-          /* "src/lxml/serializer.pxi":879
+          /* "src/lxml/serializer.pxi":878
  *     finally:
  *         _destroyFakeDoc(c_base_doc, c_doc)
  *         if c_inclusive_ns_prefixes is not NULL:             # <<<<<<<<<<<<<<
@@ -150594,7 +150627,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     __pyx_L5:;
   }
 
-  /* "src/lxml/serializer.pxi":882
+  /* "src/lxml/serializer.pxi":881
  *             python.lxml_free(c_inclusive_ns_prefixes)
  * 
  *     if writer is not None:             # <<<<<<<<<<<<<<
@@ -150605,16 +150638,16 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
   __pyx_t_3 = (__pyx_t_6 != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":883
+    /* "src/lxml/serializer.pxi":882
  * 
  *     if writer is not None:
  *         writer._exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
  * 
  *     if error < 0:
  */
-    __pyx_t_18 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_writer->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_writer->_exc_context); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(9, 883, __pyx_L1_error)
+    __pyx_t_18 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_writer->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_writer->_exc_context); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(9, 882, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":882
+    /* "src/lxml/serializer.pxi":881
  *             python.lxml_free(c_inclusive_ns_prefixes)
  * 
  *     if writer is not None:             # <<<<<<<<<<<<<<
@@ -150623,7 +150656,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
   }
 
-  /* "src/lxml/serializer.pxi":885
+  /* "src/lxml/serializer.pxi":884
  *         writer._exc_context._raise_if_stored()
  * 
  *     if error < 0:             # <<<<<<<<<<<<<<
@@ -150633,7 +150666,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
   __pyx_t_3 = ((__pyx_v_error < 0) != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":886
+    /* "src/lxml/serializer.pxi":885
  * 
  *     if error < 0:
  *         message = u"C14N failed"             # <<<<<<<<<<<<<<
@@ -150643,7 +150676,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     __Pyx_INCREF(__pyx_kp_u_C14N_failed);
     __pyx_v_message = __pyx_kp_u_C14N_failed;
 
-    /* "src/lxml/serializer.pxi":887
+    /* "src/lxml/serializer.pxi":886
  *     if error < 0:
  *         message = u"C14N failed"
  *         if writer is not None:             # <<<<<<<<<<<<<<
@@ -150654,7 +150687,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     __pyx_t_6 = (__pyx_t_3 != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/serializer.pxi":888
+      /* "src/lxml/serializer.pxi":887
  *         message = u"C14N failed"
  *         if writer is not None:
  *             errors = writer.error_log             # <<<<<<<<<<<<<<
@@ -150666,33 +150699,33 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       __pyx_v_errors = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":889
+      /* "src/lxml/serializer.pxi":888
  *         if writer is not None:
  *             errors = writer.error_log
  *             if len(errors):             # <<<<<<<<<<<<<<
  *                 message = errors[0].message
  *         raise C14NError(message)
  */
-      __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_errors)); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(9, 889, __pyx_L1_error)
+      __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_errors)); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(9, 888, __pyx_L1_error)
       __pyx_t_6 = (__pyx_t_15 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":890
+        /* "src/lxml/serializer.pxi":889
  *             errors = writer.error_log
  *             if len(errors):
  *                 message = errors[0].message             # <<<<<<<<<<<<<<
  *         raise C14NError(message)
  * 
  */
-        __pyx_t_8 = __Pyx_GetItemInt(((PyObject *)__pyx_v_errors), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 890, __pyx_L1_error)
+        __pyx_t_8 = __Pyx_GetItemInt(((PyObject *)__pyx_v_errors), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 889, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 890, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 889, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_7);
         __pyx_t_7 = 0;
 
-        /* "src/lxml/serializer.pxi":889
+        /* "src/lxml/serializer.pxi":888
  *         if writer is not None:
  *             errors = writer.error_log
  *             if len(errors):             # <<<<<<<<<<<<<<
@@ -150701,7 +150734,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
       }
 
-      /* "src/lxml/serializer.pxi":887
+      /* "src/lxml/serializer.pxi":886
  *     if error < 0:
  *         message = u"C14N failed"
  *         if writer is not None:             # <<<<<<<<<<<<<<
@@ -150710,20 +150743,20 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
     }
 
-    /* "src/lxml/serializer.pxi":891
+    /* "src/lxml/serializer.pxi":890
  *             if len(errors):
  *                 message = errors[0].message
  *         raise C14NError(message)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_C14NError), __pyx_v_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 891, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_C14NError), __pyx_v_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 890, __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(9, 891, __pyx_L1_error)
+    __PYX_ERR(9, 890, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":885
+    /* "src/lxml/serializer.pxi":884
  *         writer._exc_context._raise_if_stored()
  * 
  *     if error < 0:             # <<<<<<<<<<<<<<
@@ -150732,7 +150765,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
  */
   }
 
-  /* "src/lxml/serializer.pxi":839
+  /* "src/lxml/serializer.pxi":838
  *     return c_ns_prefixes
  * 
  * cdef _tofilelikeC14N(f, _Element element, bint exclusive, bint with_comments,             # <<<<<<<<<<<<<<
@@ -150759,7 +150792,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":896
+/* "src/lxml/serializer.pxi":895
  * # C14N 2.0
  * 
  * def canonicalize(xml_data=None, *, out=None, from_file=None, **options):             # <<<<<<<<<<<<<<
@@ -150815,7 +150848,7 @@ static PyObject *__pyx_pw_4lxml_5etree_54canonicalize(PyObject *__pyx_self, PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_options, values, pos_args, "canonicalize") < 0)) __PYX_ERR(9, 896, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_options, values, pos_args, "canonicalize") < 0)) __PYX_ERR(9, 895, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -150831,7 +150864,7 @@ static PyObject *__pyx_pw_4lxml_5etree_54canonicalize(PyObject *__pyx_self, PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("canonicalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 896, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("canonicalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 895, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_options); __pyx_v_options = 0;
   __Pyx_AddTraceback("lxml.etree.canonicalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -150869,7 +150902,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __Pyx_RefNannySetupContext("canonicalize", 0);
   __Pyx_INCREF(__pyx_v_out);
 
-  /* "src/lxml/serializer.pxi":909
+  /* "src/lxml/serializer.pxi":908
  *     The configuration options are the same as for the ``C14NWriterTarget``.
  *     """
  *     if xml_data is None and from_file is None:             # <<<<<<<<<<<<<<
@@ -150889,20 +150922,20 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __pyx_L4_bool_binop_done:;
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":910
+    /* "src/lxml/serializer.pxi":909
  *     """
  *     if xml_data is None and from_file is None:
  *         raise ValueError("Either 'xml_data' or 'from_file' must be provided as input")             # <<<<<<<<<<<<<<
  * 
  *     sio = None
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__63, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 910, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__63, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 909, __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(9, 910, __pyx_L1_error)
+    __PYX_ERR(9, 909, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":909
+    /* "src/lxml/serializer.pxi":908
  *     The configuration options are the same as for the ``C14NWriterTarget``.
  *     """
  *     if xml_data is None and from_file is None:             # <<<<<<<<<<<<<<
@@ -150911,7 +150944,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
  */
   }
 
-  /* "src/lxml/serializer.pxi":912
+  /* "src/lxml/serializer.pxi":911
  *         raise ValueError("Either 'xml_data' or 'from_file' must be provided as input")
  * 
  *     sio = None             # <<<<<<<<<<<<<<
@@ -150921,7 +150954,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __Pyx_INCREF(Py_None);
   __pyx_v_sio = Py_None;
 
-  /* "src/lxml/serializer.pxi":913
+  /* "src/lxml/serializer.pxi":912
  * 
  *     sio = None
  *     if out is None:             # <<<<<<<<<<<<<<
@@ -150932,7 +150965,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":914
+    /* "src/lxml/serializer.pxi":913
  *     sio = None
  *     if out is None:
  *         sio = out = StringIO()             # <<<<<<<<<<<<<<
@@ -150952,7 +150985,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
     }
     __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 914, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 913, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_INCREF(__pyx_t_4);
@@ -150961,7 +150994,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":913
+    /* "src/lxml/serializer.pxi":912
  * 
  *     sio = None
  *     if out is None:             # <<<<<<<<<<<<<<
@@ -150970,27 +151003,30 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
  */
   }
 
-  /* "src/lxml/serializer.pxi":916
+  /* "src/lxml/serializer.pxi":915
  *         sio = out = StringIO()
  * 
  *     target = C14NWriterTarget(out.write, **options)             # <<<<<<<<<<<<<<
  * 
  *     if xml_data is not None and not isinstance(xml_data, basestring):
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 916, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 915, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 916, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 915, __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(((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget), __pyx_t_5, __pyx_v_options); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 916, __pyx_L1_error)
+  __pyx_t_4 = PyDict_Copy(__pyx_v_options); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 915, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget), __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 915, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_v_target = ((struct __pyx_obj_4lxml_5etree_C14NWriterTarget *)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_target = ((struct __pyx_obj_4lxml_5etree_C14NWriterTarget *)__pyx_t_6);
+  __pyx_t_6 = 0;
 
-  /* "src/lxml/serializer.pxi":918
+  /* "src/lxml/serializer.pxi":917
  *     target = C14NWriterTarget(out.write, **options)
  * 
  *     if xml_data is not None and not isinstance(xml_data, basestring):             # <<<<<<<<<<<<<<
@@ -151010,18 +151046,18 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __pyx_L8_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":919
+    /* "src/lxml/serializer.pxi":918
  * 
  *     if xml_data is not None and not isinstance(xml_data, basestring):
  *         _tree_to_target(xml_data, target)             # <<<<<<<<<<<<<<
  *         return sio.getvalue() if sio is not None else None
  * 
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__tree_to_target(__pyx_v_xml_data, ((PyObject *)__pyx_v_target)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 919, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_6 = __pyx_f_4lxml_5etree__tree_to_target(__pyx_v_xml_data, ((PyObject *)__pyx_v_target)); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 918, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":920
+    /* "src/lxml/serializer.pxi":919
  *     if xml_data is not None and not isinstance(xml_data, basestring):
  *         _tree_to_target(xml_data, target)
  *         return sio.getvalue() if sio is not None else None             # <<<<<<<<<<<<<<
@@ -151031,34 +151067,34 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_2 = (__pyx_v_sio != Py_None);
     if ((__pyx_t_2 != 0)) {
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sio, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 920, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_sio, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 919, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_7 = NULL;
-      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
-        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
+      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_6);
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
           __Pyx_INCREF(__pyx_t_7);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_6, function);
+          __Pyx_DECREF_SET(__pyx_t_5, function);
         }
       }
-      __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
+      __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 920, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_4 = __pyx_t_5;
-      __pyx_t_5 = 0;
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 919, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_6 = __pyx_t_4;
+      __pyx_t_4 = 0;
     } else {
       __Pyx_INCREF(Py_None);
-      __pyx_t_4 = Py_None;
+      __pyx_t_6 = Py_None;
     }
-    __pyx_r = __pyx_t_4;
-    __pyx_t_4 = 0;
+    __pyx_r = __pyx_t_6;
+    __pyx_t_6 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":918
+    /* "src/lxml/serializer.pxi":917
  *     target = C14NWriterTarget(out.write, **options)
  * 
  *     if xml_data is not None and not isinstance(xml_data, basestring):             # <<<<<<<<<<<<<<
@@ -151067,49 +151103,49 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
  */
   }
 
-  /* "src/lxml/serializer.pxi":923
+  /* "src/lxml/serializer.pxi":922
  * 
  *     cdef _FeedParser parser = XMLParser(
  *         target=target,             # <<<<<<<<<<<<<<
  *         attribute_defaults=True,
  *         collect_ids=False,
  */
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 923, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_target, ((PyObject *)__pyx_v_target)) < 0) __PYX_ERR(9, 923, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 922, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_target, ((PyObject *)__pyx_v_target)) < 0) __PYX_ERR(9, 922, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":924
+  /* "src/lxml/serializer.pxi":923
  *     cdef _FeedParser parser = XMLParser(
  *         target=target,
  *         attribute_defaults=True,             # <<<<<<<<<<<<<<
  *         collect_ids=False,
  *     )
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_attribute_defaults, Py_True) < 0) __PYX_ERR(9, 923, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_attribute_defaults, Py_True) < 0) __PYX_ERR(9, 922, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":925
+  /* "src/lxml/serializer.pxi":924
  *         target=target,
  *         attribute_defaults=True,
  *         collect_ids=False,             # <<<<<<<<<<<<<<
  *     )
  * 
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_collect_ids, Py_False) < 0) __PYX_ERR(9, 923, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_collect_ids, Py_False) < 0) __PYX_ERR(9, 922, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":922
+  /* "src/lxml/serializer.pxi":921
  *         return sio.getvalue() if sio is not None else None
  * 
  *     cdef _FeedParser parser = XMLParser(             # <<<<<<<<<<<<<<
  *         target=target,
  *         attribute_defaults=True,
  */
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser), __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 922, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_v_parser = ((struct __pyx_obj_4lxml_5etree__FeedParser *)__pyx_t_5);
-  __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser), __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 921, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_v_parser = ((struct __pyx_obj_4lxml_5etree__FeedParser *)__pyx_t_4);
+  __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":928
+  /* "src/lxml/serializer.pxi":927
  *     )
  * 
  *     if xml_data is not None:             # <<<<<<<<<<<<<<
@@ -151120,29 +151156,29 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":929
+    /* "src/lxml/serializer.pxi":928
  * 
  *     if xml_data is not None:
  *         parser.feed(xml_data)             # <<<<<<<<<<<<<<
  *         parser.close()
  *     elif from_file is not None:
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_parser->__pyx_base.__pyx_vtab)->feed(__pyx_v_parser, __pyx_v_xml_data, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 929, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_parser->__pyx_base.__pyx_vtab)->feed(__pyx_v_parser, __pyx_v_xml_data, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 928, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":930
+    /* "src/lxml/serializer.pxi":929
  *     if xml_data is not None:
  *         parser.feed(xml_data)
  *         parser.close()             # <<<<<<<<<<<<<<
  *     elif from_file is not None:
  *         try:
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_parser->__pyx_base.__pyx_vtab)->close(__pyx_v_parser, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 930, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_parser->__pyx_base.__pyx_vtab)->close(__pyx_v_parser, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 929, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":928
+    /* "src/lxml/serializer.pxi":927
  *     )
  * 
  *     if xml_data is not None:             # <<<<<<<<<<<<<<
@@ -151152,7 +151188,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
     goto __pyx_L10;
   }
 
-  /* "src/lxml/serializer.pxi":931
+  /* "src/lxml/serializer.pxi":930
  *         parser.feed(xml_data)
  *         parser.close()
  *     elif from_file is not None:             # <<<<<<<<<<<<<<
@@ -151163,7 +151199,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":932
+    /* "src/lxml/serializer.pxi":931
  *         parser.close()
  *     elif from_file is not None:
  *         try:             # <<<<<<<<<<<<<<
@@ -151179,18 +151215,18 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
       __Pyx_XGOTREF(__pyx_t_10);
       /*try:*/ {
 
-        /* "src/lxml/serializer.pxi":933
+        /* "src/lxml/serializer.pxi":932
  *     elif from_file is not None:
  *         try:
  *             _parseDocument(from_file, parser, base_url=None)             # <<<<<<<<<<<<<<
  *         except _TargetParserResult:
  *             pass
  */
-        __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_from_file, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), Py_None)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 933, __pyx_L11_error)
-        __Pyx_GOTREF(__pyx_t_5);
-        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_from_file, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), Py_None)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 932, __pyx_L11_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":932
+        /* "src/lxml/serializer.pxi":931
  *         parser.close()
  *     elif from_file is not None:
  *         try:             # <<<<<<<<<<<<<<
@@ -151208,20 +151244,20 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "src/lxml/serializer.pxi":934
+      /* "src/lxml/serializer.pxi":933
  *         try:
  *             _parseDocument(from_file, parser, base_url=None)
  *         except _TargetParserResult:             # <<<<<<<<<<<<<<
  *             pass
  * 
  */
-      __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6);
-      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 934, __pyx_L13_except_error)
+      __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5);
+      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 933, __pyx_L13_except_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_7);
+      __pyx_t_11 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_7);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_6);
-      __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_6 = 0;
+      __Pyx_ErrRestore(__pyx_t_4, __pyx_t_6, __pyx_t_5);
+      __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0;
       if (__pyx_t_11) {
         __Pyx_ErrRestore(0,0,0);
         goto __pyx_L12_exception_handled;
@@ -151229,7 +151265,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
       goto __pyx_L13_except_error;
       __pyx_L13_except_error:;
 
-      /* "src/lxml/serializer.pxi":932
+      /* "src/lxml/serializer.pxi":931
  *         parser.close()
  *     elif from_file is not None:
  *         try:             # <<<<<<<<<<<<<<
@@ -151249,7 +151285,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
       __pyx_L16_try_end:;
     }
 
-    /* "src/lxml/serializer.pxi":931
+    /* "src/lxml/serializer.pxi":930
  *         parser.feed(xml_data)
  *         parser.close()
  *     elif from_file is not None:             # <<<<<<<<<<<<<<
@@ -151259,7 +151295,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   }
   __pyx_L10:;
 
-  /* "src/lxml/serializer.pxi":937
+  /* "src/lxml/serializer.pxi":936
  *             pass
  * 
  *     return sio.getvalue() if sio is not None else None             # <<<<<<<<<<<<<<
@@ -151269,34 +151305,34 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = (__pyx_v_sio != Py_None);
   if ((__pyx_t_2 != 0)) {
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_sio, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 937, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sio, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 936, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_7 = NULL;
-    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
-      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
+    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_5);
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
         __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_5, function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
+    __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 937, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_6 = __pyx_t_4;
-    __pyx_t_4 = 0;
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 936, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = __pyx_t_6;
+    __pyx_t_6 = 0;
   } else {
     __Pyx_INCREF(Py_None);
-    __pyx_t_6 = Py_None;
+    __pyx_t_5 = Py_None;
   }
-  __pyx_r = __pyx_t_6;
-  __pyx_t_6 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":896
+  /* "src/lxml/serializer.pxi":895
  * # C14N 2.0
  * 
  * def canonicalize(xml_data=None, *, out=None, from_file=None, **options):             # <<<<<<<<<<<<<<
@@ -151322,7 +151358,7 @@ static PyObject *__pyx_pf_4lxml_5etree_53canonicalize(CYTHON_UNUSED PyObject *__
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":940
+/* "src/lxml/serializer.pxi":939
  * 
  * 
  * cdef _tree_to_target(element, target):             # <<<<<<<<<<<<<<
@@ -151353,22 +151389,22 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_tree_to_target", 0);
 
-  /* "src/lxml/serializer.pxi":941
+  /* "src/lxml/serializer.pxi":940
  * 
  * cdef _tree_to_target(element, target):
  *     for event, elem in iterwalk(element, events=('start', 'end', 'start-ns', 'comment', 'pi')):             # <<<<<<<<<<<<<<
  *         text = None
  *         if event == 'start':
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 941, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 940, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_element);
   __Pyx_GIVEREF(__pyx_v_element);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_element);
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 941, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 940, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_events, __pyx_tuple__64) < 0) __PYX_ERR(9, 941, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_iterwalk), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 941, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_events, __pyx_tuple__64) < 0) __PYX_ERR(9, 940, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_iterwalk), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 940, __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;
@@ -151376,9 +151412,9 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
     __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 941, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 940, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 941, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 940, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   for (;;) {
@@ -151386,17 +151422,17 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(9, 941, __pyx_L1_error)
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(9, 940, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 941, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 940, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(9, 941, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(9, 940, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 941, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 940, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -151406,7 +151442,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(9, 941, __pyx_L1_error)
+          else __PYX_ERR(9, 940, __pyx_L1_error)
         }
         break;
       }
@@ -151418,7 +151454,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 941, __pyx_L1_error)
+        __PYX_ERR(9, 940, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -151431,15 +151467,15 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       __Pyx_INCREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 941, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 940, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 941, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 940, __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(9, 941, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 940, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -151447,7 +151483,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       __Pyx_GOTREF(__pyx_t_1);
       index = 1; __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), 2) < 0) __PYX_ERR(9, 941, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(9, 940, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -151455,7 +151491,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(9, 941, __pyx_L1_error)
+      __PYX_ERR(9, 940, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_event, __pyx_t_1);
@@ -151463,7 +151499,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
     __Pyx_XDECREF_SET(__pyx_v_elem, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":942
+    /* "src/lxml/serializer.pxi":941
  * cdef _tree_to_target(element, target):
  *     for event, elem in iterwalk(element, events=('start', 'end', 'start-ns', 'comment', 'pi')):
  *         text = None             # <<<<<<<<<<<<<<
@@ -151473,28 +151509,28 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
     __Pyx_INCREF(Py_None);
     __Pyx_XDECREF_SET(__pyx_v_text, Py_None);
 
-    /* "src/lxml/serializer.pxi":943
+    /* "src/lxml/serializer.pxi":942
  *     for event, elem in iterwalk(element, events=('start', 'end', 'start-ns', 'comment', 'pi')):
  *         text = None
  *         if event == 'start':             # <<<<<<<<<<<<<<
  *             target.start(elem.tag, elem.attrib)
  *             text = elem.text
  */
-    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_start, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 943, __pyx_L1_error)
+    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_start, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 942, __pyx_L1_error)
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":944
+      /* "src/lxml/serializer.pxi":943
  *         text = None
  *         if event == 'start':
  *             target.start(elem.tag, elem.attrib)             # <<<<<<<<<<<<<<
  *             text = elem.text
  *         elif event == 'end':
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_start); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 944, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_start); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 943, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 944, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 943, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_attrib); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 944, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_attrib); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 943, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_10 = NULL;
       __pyx_t_11 = 0;
@@ -151511,7 +151547,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_6)) {
         PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_1, __pyx_t_7};
-        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 944, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 943, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -151521,7 +151557,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
         PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_1, __pyx_t_7};
-        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 944, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 943, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -151529,7 +151565,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       } else
       #endif
       {
-        __pyx_t_12 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 944, __pyx_L1_error)
+        __pyx_t_12 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 943, __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;
@@ -151540,26 +151576,26 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
         PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_7);
         __pyx_t_1 = 0;
         __pyx_t_7 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 944, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 943, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
       }
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":945
+      /* "src/lxml/serializer.pxi":944
  *         if event == 'start':
  *             target.start(elem.tag, elem.attrib)
  *             text = elem.text             # <<<<<<<<<<<<<<
  *         elif event == 'end':
  *             target.end(elem.tag)
  */
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 945, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 944, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":943
+      /* "src/lxml/serializer.pxi":942
  *     for event, elem in iterwalk(element, events=('start', 'end', 'start-ns', 'comment', 'pi')):
  *         text = None
  *         if event == 'start':             # <<<<<<<<<<<<<<
@@ -151569,26 +151605,26 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       goto __pyx_L7;
     }
 
-    /* "src/lxml/serializer.pxi":946
+    /* "src/lxml/serializer.pxi":945
  *             target.start(elem.tag, elem.attrib)
  *             text = elem.text
  *         elif event == 'end':             # <<<<<<<<<<<<<<
  *             target.end(elem.tag)
  *             text = elem.tail
  */
-    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_end, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 946, __pyx_L1_error)
+    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_end, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 945, __pyx_L1_error)
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":947
+      /* "src/lxml/serializer.pxi":946
  *             text = elem.text
  *         elif event == 'end':
  *             target.end(elem.tag)             # <<<<<<<<<<<<<<
  *             text = elem.tail
  *         elif event == 'start-ns':
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_end); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 947, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_end); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 946, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tag); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 947, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tag); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 946, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __pyx_t_7 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -151603,24 +151639,24 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 947, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 946, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":948
+      /* "src/lxml/serializer.pxi":947
  *         elif event == 'end':
  *             target.end(elem.tag)
  *             text = elem.tail             # <<<<<<<<<<<<<<
  *         elif event == 'start-ns':
  *             target.start_ns(*elem)
  */
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tail); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 948, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tail); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 947, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/serializer.pxi":946
+      /* "src/lxml/serializer.pxi":945
  *             target.start(elem.tag, elem.attrib)
  *             text = elem.text
  *         elif event == 'end':             # <<<<<<<<<<<<<<
@@ -151630,34 +151666,34 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       goto __pyx_L7;
     }
 
-    /* "src/lxml/serializer.pxi":949
+    /* "src/lxml/serializer.pxi":948
  *             target.end(elem.tag)
  *             text = elem.tail
  *         elif event == 'start-ns':             # <<<<<<<<<<<<<<
  *             target.start_ns(*elem)
  *             continue
  */
-    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_kp_s_start_ns, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 949, __pyx_L1_error)
+    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_kp_s_start_ns, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 948, __pyx_L1_error)
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":950
+      /* "src/lxml/serializer.pxi":949
  *             text = elem.tail
  *         elif event == 'start-ns':
  *             target.start_ns(*elem)             # <<<<<<<<<<<<<<
  *             continue
  *         elif event == 'comment':
  */
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_start_ns_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 950, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_start_ns_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 949, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_elem); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 950, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_elem); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 949, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 950, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 949, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-      /* "src/lxml/serializer.pxi":951
+      /* "src/lxml/serializer.pxi":950
  *         elif event == 'start-ns':
  *             target.start_ns(*elem)
  *             continue             # <<<<<<<<<<<<<<
@@ -151666,7 +151702,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
  */
       goto __pyx_L3_continue;
 
-      /* "src/lxml/serializer.pxi":949
+      /* "src/lxml/serializer.pxi":948
  *             target.end(elem.tag)
  *             text = elem.tail
  *         elif event == 'start-ns':             # <<<<<<<<<<<<<<
@@ -151675,26 +151711,26 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
  */
     }
 
-    /* "src/lxml/serializer.pxi":952
+    /* "src/lxml/serializer.pxi":951
  *             target.start_ns(*elem)
  *             continue
  *         elif event == 'comment':             # <<<<<<<<<<<<<<
  *             target.comment(elem.text)
  *             text = elem.tail
  */
-    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_comment, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 952, __pyx_L1_error)
+    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_comment, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 951, __pyx_L1_error)
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":953
+      /* "src/lxml/serializer.pxi":952
  *             continue
  *         elif event == 'comment':
  *             target.comment(elem.text)             # <<<<<<<<<<<<<<
  *             text = elem.tail
  *         elif event == 'pi':
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_comment); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 953, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_comment); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 952, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 953, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 952, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_7 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -151709,24 +151745,24 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       __pyx_t_12 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 953, __pyx_L1_error)
+      if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 952, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-      /* "src/lxml/serializer.pxi":954
+      /* "src/lxml/serializer.pxi":953
  *         elif event == 'comment':
  *             target.comment(elem.text)
  *             text = elem.tail             # <<<<<<<<<<<<<<
  *         elif event == 'pi':
  *             target.pi(elem.target, elem.text)
  */
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tail); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 954, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tail); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 953, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_12);
       __pyx_t_12 = 0;
 
-      /* "src/lxml/serializer.pxi":952
+      /* "src/lxml/serializer.pxi":951
  *             target.start_ns(*elem)
  *             continue
  *         elif event == 'comment':             # <<<<<<<<<<<<<<
@@ -151736,28 +151772,28 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       goto __pyx_L7;
     }
 
-    /* "src/lxml/serializer.pxi":955
+    /* "src/lxml/serializer.pxi":954
  *             target.comment(elem.text)
  *             text = elem.tail
  *         elif event == 'pi':             # <<<<<<<<<<<<<<
  *             target.pi(elem.target, elem.text)
  *             text = elem.tail
  */
-    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_pi, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 955, __pyx_L1_error)
+    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_pi, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 954, __pyx_L1_error)
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":956
+      /* "src/lxml/serializer.pxi":955
  *             text = elem.tail
  *         elif event == 'pi':
  *             target.pi(elem.target, elem.text)             # <<<<<<<<<<<<<<
  *             text = elem.tail
  *         if text:
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_pi); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 956, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_pi); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 955, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_target); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 956, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_target); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 955, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_text); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 956, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_text); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 955, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_1 = NULL;
       __pyx_t_11 = 0;
@@ -151774,7 +151810,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_6)) {
         PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_3, __pyx_t_7};
-        __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 956, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 955, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -151784,7 +151820,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
         PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_3, __pyx_t_7};
-        __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 956, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 955, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -151792,7 +151828,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       } else
       #endif
       {
-        __pyx_t_10 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 956, __pyx_L1_error)
+        __pyx_t_10 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 955, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         if (__pyx_t_1) {
           __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1); __pyx_t_1 = NULL;
@@ -151803,26 +151839,26 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
         PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_11, __pyx_t_7);
         __pyx_t_3 = 0;
         __pyx_t_7 = 0;
-        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 956, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 955, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       }
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-      /* "src/lxml/serializer.pxi":957
+      /* "src/lxml/serializer.pxi":956
  *         elif event == 'pi':
  *             target.pi(elem.target, elem.text)
  *             text = elem.tail             # <<<<<<<<<<<<<<
  *         if text:
  *             target.data(text)
  */
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tail); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 957, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_tail); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 956, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_12);
       __pyx_t_12 = 0;
 
-      /* "src/lxml/serializer.pxi":955
+      /* "src/lxml/serializer.pxi":954
  *             target.comment(elem.text)
  *             text = elem.tail
  *         elif event == 'pi':             # <<<<<<<<<<<<<<
@@ -151832,24 +151868,24 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
     }
     __pyx_L7:;
 
-    /* "src/lxml/serializer.pxi":958
+    /* "src/lxml/serializer.pxi":957
  *             target.pi(elem.target, elem.text)
  *             text = elem.tail
  *         if text:             # <<<<<<<<<<<<<<
  *             target.data(text)
  *     return target.close()
  */
-    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_text); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 958, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_text); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 957, __pyx_L1_error)
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":959
+      /* "src/lxml/serializer.pxi":958
  *             text = elem.tail
  *         if text:
  *             target.data(text)             # <<<<<<<<<<<<<<
  *     return target.close()
  * 
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 959, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 958, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_10 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -151863,12 +151899,12 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
       }
       __pyx_t_12 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_10, __pyx_v_text) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_text);
       __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-      if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 959, __pyx_L1_error)
+      if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 958, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-      /* "src/lxml/serializer.pxi":958
+      /* "src/lxml/serializer.pxi":957
  *             target.pi(elem.target, elem.text)
  *             text = elem.tail
  *         if text:             # <<<<<<<<<<<<<<
@@ -151877,7 +151913,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
  */
     }
 
-    /* "src/lxml/serializer.pxi":941
+    /* "src/lxml/serializer.pxi":940
  * 
  * cdef _tree_to_target(element, target):
  *     for event, elem in iterwalk(element, events=('start', 'end', 'start-ns', 'comment', 'pi')):             # <<<<<<<<<<<<<<
@@ -151888,7 +151924,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":960
+  /* "src/lxml/serializer.pxi":959
  *         if text:
  *             target.data(text)
  *     return target.close()             # <<<<<<<<<<<<<<
@@ -151896,7 +151932,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_close); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 960, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_close); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 959, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   __pyx_t_6 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
@@ -151910,14 +151946,14 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
   }
   __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
   __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 960, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 959, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":940
+  /* "src/lxml/serializer.pxi":939
  * 
  * 
  * cdef _tree_to_target(element, target):             # <<<<<<<<<<<<<<
@@ -151945,7 +151981,7 @@ static PyObject *__pyx_f_4lxml_5etree__tree_to_target(PyObject *__pyx_v_element,
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1002
+/* "src/lxml/serializer.pxi":1001
  *     cdef bint _root_done
  * 
  *     def __init__(self, write, *,             # <<<<<<<<<<<<<<
@@ -151974,7 +152010,7 @@ static int __pyx_pw_4lxml_5etree_16C14NWriterTarget_1__init__(PyObject *__pyx_v_
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_write,&__pyx_n_s_with_comments,&__pyx_n_s_strip_text,&__pyx_n_s_rewrite_prefixes,&__pyx_n_s_qname_aware_tags,&__pyx_n_s_qname_aware_attrs,&__pyx_n_s_exclude_attrs,&__pyx_n_s_exclude_tags,0};
     PyObject* values[8] = {0,0,0,0,0,0,0,0};
 
-    /* "src/lxml/serializer.pxi":1003
+    /* "src/lxml/serializer.pxi":1002
  * 
  *     def __init__(self, write, *,
  *                  with_comments=False, strip_text=False, rewrite_prefixes=False,             # <<<<<<<<<<<<<<
@@ -151985,7 +152021,7 @@ static int __pyx_pw_4lxml_5etree_16C14NWriterTarget_1__init__(PyObject *__pyx_v_
     values[2] = ((PyObject *)Py_False);
     values[3] = ((PyObject *)Py_False);
 
-    /* "src/lxml/serializer.pxi":1004
+    /* "src/lxml/serializer.pxi":1003
  *     def __init__(self, write, *,
  *                  with_comments=False, strip_text=False, rewrite_prefixes=False,
  *                  qname_aware_tags=None, qname_aware_attrs=None,             # <<<<<<<<<<<<<<
@@ -151995,7 +152031,7 @@ static int __pyx_pw_4lxml_5etree_16C14NWriterTarget_1__init__(PyObject *__pyx_v_
     values[4] = ((PyObject *)Py_None);
     values[5] = ((PyObject *)Py_None);
 
-    /* "src/lxml/serializer.pxi":1005
+    /* "src/lxml/serializer.pxi":1004
  *                  with_comments=False, strip_text=False, rewrite_prefixes=False,
  *                  qname_aware_tags=None, qname_aware_attrs=None,
  *                  exclude_attrs=None, exclude_tags=None):             # <<<<<<<<<<<<<<
@@ -152027,7 +152063,7 @@ static int __pyx_pw_4lxml_5etree_16C14NWriterTarget_1__init__(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(9, 1002, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(9, 1001, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -152045,7 +152081,7 @@ static int __pyx_pw_4lxml_5etree_16C14NWriterTarget_1__init__(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1002, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1001, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.C14NWriterTarget.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -152053,7 +152089,7 @@ static int __pyx_pw_4lxml_5etree_16C14NWriterTarget_1__init__(PyObject *__pyx_v_
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(((struct __pyx_obj_4lxml_5etree_C14NWriterTarget *)__pyx_v_self), __pyx_v_write, __pyx_v_with_comments, __pyx_v_strip_text, __pyx_v_rewrite_prefixes, __pyx_v_qname_aware_tags, __pyx_v_qname_aware_attrs, __pyx_v_exclude_attrs, __pyx_v_exclude_tags);
 
-  /* "src/lxml/serializer.pxi":1002
+  /* "src/lxml/serializer.pxi":1001
  *     cdef bint _root_done
  * 
  *     def __init__(self, write, *,             # <<<<<<<<<<<<<<
@@ -152079,7 +152115,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/serializer.pxi":1006
+  /* "src/lxml/serializer.pxi":1005
  *                  qname_aware_tags=None, qname_aware_attrs=None,
  *                  exclude_attrs=None, exclude_tags=None):
  *         self._write = write             # <<<<<<<<<<<<<<
@@ -152092,14 +152128,14 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __Pyx_DECREF(__pyx_v_self->_write);
   __pyx_v_self->_write = __pyx_v_write;
 
-  /* "src/lxml/serializer.pxi":1007
+  /* "src/lxml/serializer.pxi":1006
  *                  exclude_attrs=None, exclude_tags=None):
  *         self._write = write
  *         self._data = []             # <<<<<<<<<<<<<<
  *         self._with_comments = with_comments
  *         self._strip_text = strip_text
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1007, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1006, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_data);
@@ -152107,36 +152143,36 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1008
+  /* "src/lxml/serializer.pxi":1007
  *         self._write = write
  *         self._data = []
  *         self._with_comments = with_comments             # <<<<<<<<<<<<<<
  *         self._strip_text = strip_text
  *         self._exclude_attrs = set(exclude_attrs) if exclude_attrs else None
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_with_comments); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1008, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_with_comments); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1007, __pyx_L1_error)
   __pyx_v_self->_with_comments = __pyx_t_2;
 
-  /* "src/lxml/serializer.pxi":1009
+  /* "src/lxml/serializer.pxi":1008
  *         self._data = []
  *         self._with_comments = with_comments
  *         self._strip_text = strip_text             # <<<<<<<<<<<<<<
  *         self._exclude_attrs = set(exclude_attrs) if exclude_attrs else None
  *         self._exclude_tags = set(exclude_tags) if exclude_tags else None
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strip_text); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1009, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strip_text); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1008, __pyx_L1_error)
   __pyx_v_self->_strip_text = __pyx_t_2;
 
-  /* "src/lxml/serializer.pxi":1010
+  /* "src/lxml/serializer.pxi":1009
  *         self._with_comments = with_comments
  *         self._strip_text = strip_text
  *         self._exclude_attrs = set(exclude_attrs) if exclude_attrs else None             # <<<<<<<<<<<<<<
  *         self._exclude_tags = set(exclude_tags) if exclude_tags else None
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exclude_attrs); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1010, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exclude_attrs); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1009, __pyx_L1_error)
   if (__pyx_t_2) {
-    __pyx_t_3 = PySet_New(__pyx_v_exclude_attrs); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1010, __pyx_L1_error)
+    __pyx_t_3 = PySet_New(__pyx_v_exclude_attrs); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1009, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -152150,16 +152186,16 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_exclude_attrs = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1011
+  /* "src/lxml/serializer.pxi":1010
  *         self._strip_text = strip_text
  *         self._exclude_attrs = set(exclude_attrs) if exclude_attrs else None
  *         self._exclude_tags = set(exclude_tags) if exclude_tags else None             # <<<<<<<<<<<<<<
  * 
  *         self._rewrite_prefixes = rewrite_prefixes
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exclude_tags); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1011, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exclude_tags); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1010, __pyx_L1_error)
   if (__pyx_t_2) {
-    __pyx_t_3 = PySet_New(__pyx_v_exclude_tags); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1011, __pyx_L1_error)
+    __pyx_t_3 = PySet_New(__pyx_v_exclude_tags); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1010, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -152173,34 +152209,34 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_exclude_tags = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1013
+  /* "src/lxml/serializer.pxi":1012
  *         self._exclude_tags = set(exclude_tags) if exclude_tags else None
  * 
  *         self._rewrite_prefixes = rewrite_prefixes             # <<<<<<<<<<<<<<
  *         if qname_aware_tags:
  *             self._qname_aware_tags = set(qname_aware_tags)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_rewrite_prefixes); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1013, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_rewrite_prefixes); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1012, __pyx_L1_error)
   __pyx_v_self->_rewrite_prefixes = __pyx_t_2;
 
-  /* "src/lxml/serializer.pxi":1014
+  /* "src/lxml/serializer.pxi":1013
  * 
  *         self._rewrite_prefixes = rewrite_prefixes
  *         if qname_aware_tags:             # <<<<<<<<<<<<<<
  *             self._qname_aware_tags = set(qname_aware_tags)
  *         else:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_qname_aware_tags); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1014, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_qname_aware_tags); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1013, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1015
+    /* "src/lxml/serializer.pxi":1014
  *         self._rewrite_prefixes = rewrite_prefixes
  *         if qname_aware_tags:
  *             self._qname_aware_tags = set(qname_aware_tags)             # <<<<<<<<<<<<<<
  *         else:
  *             self._qname_aware_tags = None
  */
-    __pyx_t_1 = PySet_New(__pyx_v_qname_aware_tags); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1015, __pyx_L1_error)
+    __pyx_t_1 = PySet_New(__pyx_v_qname_aware_tags); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1014, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->_qname_aware_tags);
@@ -152208,7 +152244,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
     __pyx_v_self->_qname_aware_tags = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1014
+    /* "src/lxml/serializer.pxi":1013
  * 
  *         self._rewrite_prefixes = rewrite_prefixes
  *         if qname_aware_tags:             # <<<<<<<<<<<<<<
@@ -152218,7 +152254,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":1017
+  /* "src/lxml/serializer.pxi":1016
  *             self._qname_aware_tags = set(qname_aware_tags)
  *         else:
  *             self._qname_aware_tags = None             # <<<<<<<<<<<<<<
@@ -152234,26 +152270,26 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   }
   __pyx_L3:;
 
-  /* "src/lxml/serializer.pxi":1018
+  /* "src/lxml/serializer.pxi":1017
  *         else:
  *             self._qname_aware_tags = None
  *         if qname_aware_attrs:             # <<<<<<<<<<<<<<
  *             self._find_qname_aware_attrs = set(qname_aware_attrs).intersection
  *         else:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_qname_aware_attrs); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1018, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_qname_aware_attrs); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1017, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1019
+    /* "src/lxml/serializer.pxi":1018
  *             self._qname_aware_tags = None
  *         if qname_aware_attrs:
  *             self._find_qname_aware_attrs = set(qname_aware_attrs).intersection             # <<<<<<<<<<<<<<
  *         else:
  *             self._find_qname_aware_attrs = None
  */
-    __pyx_t_1 = PySet_New(__pyx_v_qname_aware_attrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1019, __pyx_L1_error)
+    __pyx_t_1 = PySet_New(__pyx_v_qname_aware_attrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1018, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_intersection); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1019, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_intersection); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1018, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GIVEREF(__pyx_t_3);
@@ -152262,7 +152298,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
     __pyx_v_self->_find_qname_aware_attrs = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "src/lxml/serializer.pxi":1018
+    /* "src/lxml/serializer.pxi":1017
  *         else:
  *             self._qname_aware_tags = None
  *         if qname_aware_attrs:             # <<<<<<<<<<<<<<
@@ -152272,7 +152308,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
     goto __pyx_L4;
   }
 
-  /* "src/lxml/serializer.pxi":1021
+  /* "src/lxml/serializer.pxi":1020
  *             self._find_qname_aware_attrs = set(qname_aware_attrs).intersection
  *         else:
  *             self._find_qname_aware_attrs = None             # <<<<<<<<<<<<<<
@@ -152288,19 +152324,19 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   }
   __pyx_L4:;
 
-  /* "src/lxml/serializer.pxi":1024
+  /* "src/lxml/serializer.pxi":1023
  * 
  *         # Stack with globally and newly declared namespaces as (uri, prefix) pairs.
  *         self._declared_ns_stack = [[             # <<<<<<<<<<<<<<
  *             ("http://www.w3.org/XML/1998/namespace", "xml"),
  *         ]]
  */
-  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1024, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_tuple__65);
   __Pyx_GIVEREF(__pyx_tuple__65);
   PyList_SET_ITEM(__pyx_t_3, 0, __pyx_tuple__65);
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1024, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_3);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
@@ -152311,14 +152347,14 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_declared_ns_stack = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1028
+  /* "src/lxml/serializer.pxi":1027
  *         ]]
  *         # Stack with user declared namespace prefixes as (uri, prefix) pairs.
  *         self._ns_stack = []             # <<<<<<<<<<<<<<
  *         if not rewrite_prefixes:
  *             self._ns_stack.append(_DEFAULT_NAMESPACE_PREFIXES.items())
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1028, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1027, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_ns_stack);
@@ -152326,18 +152362,18 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_ns_stack = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1029
+  /* "src/lxml/serializer.pxi":1028
  *         # Stack with user declared namespace prefixes as (uri, prefix) pairs.
  *         self._ns_stack = []
  *         if not rewrite_prefixes:             # <<<<<<<<<<<<<<
  *             self._ns_stack.append(_DEFAULT_NAMESPACE_PREFIXES.items())
  *         self._ns_stack.append([])
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_rewrite_prefixes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1029, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_rewrite_prefixes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1028, __pyx_L1_error)
   __pyx_t_4 = ((!__pyx_t_2) != 0);
   if (__pyx_t_4) {
 
-    /* "src/lxml/serializer.pxi":1030
+    /* "src/lxml/serializer.pxi":1029
  *         self._ns_stack = []
  *         if not rewrite_prefixes:
  *             self._ns_stack.append(_DEFAULT_NAMESPACE_PREFIXES.items())             # <<<<<<<<<<<<<<
@@ -152346,18 +152382,18 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
  */
     if (unlikely(__pyx_v_self->_ns_stack == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-      __PYX_ERR(9, 1030, __pyx_L1_error)
+      __PYX_ERR(9, 1029, __pyx_L1_error)
     }
     if (unlikely(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
-      __PYX_ERR(9, 1030, __pyx_L1_error)
+      __PYX_ERR(9, 1029, __pyx_L1_error)
     }
-    __pyx_t_1 = __Pyx_PyDict_Items(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1030, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyDict_Items(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1029, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->_ns_stack, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1030, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->_ns_stack, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1029, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1029
+    /* "src/lxml/serializer.pxi":1028
  *         # Stack with user declared namespace prefixes as (uri, prefix) pairs.
  *         self._ns_stack = []
  *         if not rewrite_prefixes:             # <<<<<<<<<<<<<<
@@ -152366,7 +152402,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
  */
   }
 
-  /* "src/lxml/serializer.pxi":1031
+  /* "src/lxml/serializer.pxi":1030
  *         if not rewrite_prefixes:
  *             self._ns_stack.append(_DEFAULT_NAMESPACE_PREFIXES.items())
  *         self._ns_stack.append([])             # <<<<<<<<<<<<<<
@@ -152375,21 +152411,21 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
  */
   if (unlikely(__pyx_v_self->_ns_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(9, 1031, __pyx_L1_error)
+    __PYX_ERR(9, 1030, __pyx_L1_error)
   }
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1031, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1030, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->_ns_stack, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1031, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->_ns_stack, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1030, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1032
+  /* "src/lxml/serializer.pxi":1031
  *             self._ns_stack.append(_DEFAULT_NAMESPACE_PREFIXES.items())
  *         self._ns_stack.append([])
  *         self._prefix_map = {}             # <<<<<<<<<<<<<<
  *         self._preserve_space = [False]
  *         self._pending_start = None
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1032, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1031, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_prefix_map);
@@ -152397,14 +152433,14 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_prefix_map = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1033
+  /* "src/lxml/serializer.pxi":1032
  *         self._ns_stack.append([])
  *         self._prefix_map = {}
  *         self._preserve_space = [False]             # <<<<<<<<<<<<<<
  *         self._pending_start = None
  *         self._ignored_depth = 0
  */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1033, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(Py_False);
   __Pyx_GIVEREF(Py_False);
@@ -152415,7 +152451,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __pyx_v_self->_preserve_space = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1034
+  /* "src/lxml/serializer.pxi":1033
  *         self._prefix_map = {}
  *         self._preserve_space = [False]
  *         self._pending_start = None             # <<<<<<<<<<<<<<
@@ -152428,7 +152464,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
   __Pyx_DECREF(__pyx_v_self->_pending_start);
   __pyx_v_self->_pending_start = ((PyObject*)Py_None);
 
-  /* "src/lxml/serializer.pxi":1035
+  /* "src/lxml/serializer.pxi":1034
  *         self._preserve_space = [False]
  *         self._pending_start = None
  *         self._ignored_depth = 0             # <<<<<<<<<<<<<<
@@ -152437,7 +152473,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
  */
   __pyx_v_self->_ignored_depth = 0;
 
-  /* "src/lxml/serializer.pxi":1036
+  /* "src/lxml/serializer.pxi":1035
  *         self._pending_start = None
  *         self._ignored_depth = 0
  *         self._root_seen = False             # <<<<<<<<<<<<<<
@@ -152446,7 +152482,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
  */
   __pyx_v_self->_root_seen = 0;
 
-  /* "src/lxml/serializer.pxi":1037
+  /* "src/lxml/serializer.pxi":1036
  *         self._ignored_depth = 0
  *         self._root_seen = False
  *         self._root_done = False             # <<<<<<<<<<<<<<
@@ -152455,7 +152491,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
  */
   __pyx_v_self->_root_done = 0;
 
-  /* "src/lxml/serializer.pxi":1002
+  /* "src/lxml/serializer.pxi":1001
  *     cdef bint _root_done
  * 
  *     def __init__(self, write, *,             # <<<<<<<<<<<<<<
@@ -152477,7 +152513,7 @@ static int __pyx_pf_4lxml_5etree_16C14NWriterTarget___init__(struct __pyx_obj_4l
 }
 static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1039
+/* "src/lxml/serializer.pxi":1038
  *         self._root_done = False
  * 
  *     def _iter_namespaces(self, ns_stack):             # <<<<<<<<<<<<<<
@@ -152511,7 +152547,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_2_iter_namespaces(CYTH
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1__iter_namespaces *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1039, __pyx_L1_error)
+    __PYX_ERR(9, 1038, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -152522,7 +152558,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_2_iter_namespaces(CYTH
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ns_stack);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_ns_stack);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1, __pyx_codeobj__66, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter_namespaces, __pyx_n_s_C14NWriterTarget__iter_namespace, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1039, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1, __pyx_codeobj__66, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter_namespaces, __pyx_n_s_C14NWriterTarget__iter_namespace, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1038, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -152560,24 +152596,24 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1039, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1038, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1040
+  /* "src/lxml/serializer.pxi":1039
  * 
  *     def _iter_namespaces(self, ns_stack):
  *         for namespaces in reversed(ns_stack):             # <<<<<<<<<<<<<<
  *             if namespaces:  # almost no element declares new namespaces
  *                 yield from namespaces
  */
-  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_cur_scope->__pyx_v_ns_stack); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1040, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_cur_scope->__pyx_v_ns_stack); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1039, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
   } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1040, __pyx_L1_error)
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1039, __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(9, 1040, __pyx_L1_error)
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1039, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
@@ -152585,17 +152621,17 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(9, 1040, __pyx_L1_error)
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(9, 1039, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1040, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1039, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(9, 1040, __pyx_L1_error)
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(9, 1039, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1040, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1039, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -152605,7 +152641,7 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(9, 1040, __pyx_L1_error)
+          else __PYX_ERR(9, 1039, __pyx_L1_error)
         }
         break;
       }
@@ -152616,17 +152652,17 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
     __Pyx_GIVEREF(__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1041
+    /* "src/lxml/serializer.pxi":1040
  *     def _iter_namespaces(self, ns_stack):
  *         for namespaces in reversed(ns_stack):
  *             if namespaces:  # almost no element declares new namespaces             # <<<<<<<<<<<<<<
  *                 yield from namespaces
  * 
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_namespaces); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1041, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_namespaces); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1040, __pyx_L1_error)
     if (__pyx_t_5) {
 
-      /* "src/lxml/serializer.pxi":1042
+      /* "src/lxml/serializer.pxi":1041
  *         for namespaces in reversed(ns_stack):
  *             if namespaces:  # almost no element declares new namespaces
  *                 yield from namespaces             # <<<<<<<<<<<<<<
@@ -152652,16 +152688,16 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
         __Pyx_XGOTREF(__pyx_t_2);
         __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
         __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
-        if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1042, __pyx_L1_error)
+        if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1041, __pyx_L1_error)
       } else {
         PyObject* exc_type = __Pyx_PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-          else __PYX_ERR(9, 1042, __pyx_L1_error)
+          else __PYX_ERR(9, 1041, __pyx_L1_error)
         }
       }
 
-      /* "src/lxml/serializer.pxi":1041
+      /* "src/lxml/serializer.pxi":1040
  *     def _iter_namespaces(self, ns_stack):
  *         for namespaces in reversed(ns_stack):
  *             if namespaces:  # almost no element declares new namespaces             # <<<<<<<<<<<<<<
@@ -152670,7 +152706,7 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
  */
     }
 
-    /* "src/lxml/serializer.pxi":1040
+    /* "src/lxml/serializer.pxi":1039
  * 
  *     def _iter_namespaces(self, ns_stack):
  *         for namespaces in reversed(ns_stack):             # <<<<<<<<<<<<<<
@@ -152681,7 +152717,7 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1039
+  /* "src/lxml/serializer.pxi":1038
  *         self._root_done = False
  * 
  *     def _iter_namespaces(self, ns_stack):             # <<<<<<<<<<<<<<
@@ -152707,7 +152743,7 @@ static PyObject *__pyx_gb_4lxml_5etree_16C14NWriterTarget_4generator1(__pyx_Coro
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1044
+/* "src/lxml/serializer.pxi":1043
  *                 yield from namespaces
  * 
  *     cdef _resolve_prefix_name(self, prefixed_name):             # <<<<<<<<<<<<<<
@@ -152738,16 +152774,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_resolve_prefix_name", 0);
 
-  /* "src/lxml/serializer.pxi":1045
+  /* "src/lxml/serializer.pxi":1044
  * 
  *     cdef _resolve_prefix_name(self, prefixed_name):
  *         prefix, name = prefixed_name.split(':', 1)             # <<<<<<<<<<<<<<
  *         for uri, p in self._iter_namespaces(self._ns_stack):
  *             if p == prefix:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefixed_name, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1045, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_prefixed_name, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1044, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__67, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1045, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__67, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1044, __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))) {
@@ -152756,7 +152792,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(9, 1045, __pyx_L1_error)
+      __PYX_ERR(9, 1044, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -152769,15 +152805,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
     __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(9, 1045, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1044, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1045, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1044, __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(9, 1045, __pyx_L1_error)
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1044, __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;
@@ -152785,7 +152821,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
     __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(9, 1045, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(9, 1044, __pyx_L1_error)
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -152793,7 +152829,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(9, 1045, __pyx_L1_error)
+    __PYX_ERR(9, 1044, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_prefix = __pyx_t_1;
@@ -152801,14 +152837,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   __pyx_v_name = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1046
+  /* "src/lxml/serializer.pxi":1045
  *     cdef _resolve_prefix_name(self, prefixed_name):
  *         prefix, name = prefixed_name.split(':', 1)
  *         for uri, p in self._iter_namespaces(self._ns_stack):             # <<<<<<<<<<<<<<
  *             if p == prefix:
  *                 return f'{{{uri}}}{name}'
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter_namespaces); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1046, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter_namespaces); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1045, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -152822,16 +152858,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   }
   __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_self->_ns_stack) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->_ns_stack);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1046, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1045, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
     __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
   } else {
-    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1046, __pyx_L1_error)
+    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1045, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1046, __pyx_L1_error)
+    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1045, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
@@ -152839,17 +152875,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #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(9, 1046, __pyx_L1_error)
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(9, 1045, __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(9, 1046, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1045, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
         #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(9, 1046, __pyx_L1_error)
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(9, 1045, __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(9, 1046, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1045, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -152859,7 +152895,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(9, 1046, __pyx_L1_error)
+          else __PYX_ERR(9, 1045, __pyx_L1_error)
         }
         break;
       }
@@ -152871,7 +152907,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 1046, __pyx_L1_error)
+        __PYX_ERR(9, 1045, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -152884,15 +152920,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       __Pyx_INCREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1046, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1045, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1046, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1045, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #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(9, 1046, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1045, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_5 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -152900,7 +152936,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       __Pyx_GOTREF(__pyx_t_1);
       index = 1; __pyx_t_4 = __pyx_t_5(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_8), 2) < 0) __PYX_ERR(9, 1046, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_8), 2) < 0) __PYX_ERR(9, 1045, __pyx_L1_error)
       __pyx_t_5 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L8_unpacking_done;
@@ -152908,7 +152944,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_5 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(9, 1046, __pyx_L1_error)
+      __PYX_ERR(9, 1045, __pyx_L1_error)
       __pyx_L8_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_uri, __pyx_t_1);
@@ -152916,19 +152952,19 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
     __Pyx_XDECREF_SET(__pyx_v_p, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1047
+    /* "src/lxml/serializer.pxi":1046
  *         prefix, name = prefixed_name.split(':', 1)
  *         for uri, p in self._iter_namespaces(self._ns_stack):
  *             if p == prefix:             # <<<<<<<<<<<<<<
  *                 return f'{{{uri}}}{name}'
  *         raise ValueError(f'Prefix {prefix} of QName "{prefixed_name}" is not declared in scope')
  */
-    __pyx_t_2 = PyObject_RichCompare(__pyx_v_p, __pyx_v_prefix, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1047, __pyx_L1_error)
-    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 1047, __pyx_L1_error)
+    __pyx_t_2 = PyObject_RichCompare(__pyx_v_p, __pyx_v_prefix, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1046, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(9, 1046, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":1048
+      /* "src/lxml/serializer.pxi":1047
  *         for uri, p in self._iter_namespaces(self._ns_stack):
  *             if p == prefix:
  *                 return f'{{{uri}}}{name}'             # <<<<<<<<<<<<<<
@@ -152936,7 +152972,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1048, __pyx_L1_error)
+      __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1047, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_10 = 0;
       __pyx_t_11 = 127;
@@ -152944,7 +152980,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       __pyx_t_10 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__31);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__31);
-      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_uri, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1048, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_uri, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1047, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
       __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -152955,14 +152991,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       __pyx_t_10 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__32);
       PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__32);
-      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1048, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1047, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
       __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1048, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1047, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_4;
@@ -152970,7 +153006,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":1047
+      /* "src/lxml/serializer.pxi":1046
  *         prefix, name = prefixed_name.split(':', 1)
  *         for uri, p in self._iter_namespaces(self._ns_stack):
  *             if p == prefix:             # <<<<<<<<<<<<<<
@@ -152979,7 +153015,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
  */
     }
 
-    /* "src/lxml/serializer.pxi":1046
+    /* "src/lxml/serializer.pxi":1045
  *     cdef _resolve_prefix_name(self, prefixed_name):
  *         prefix, name = prefixed_name.split(':', 1)
  *         for uri, p in self._iter_namespaces(self._ns_stack):             # <<<<<<<<<<<<<<
@@ -152989,14 +153025,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1049
+  /* "src/lxml/serializer.pxi":1048
  *             if p == prefix:
  *                 return f'{{{uri}}}{name}'
  *         raise ValueError(f'Prefix {prefix} of QName "{prefixed_name}" is not declared in scope')             # <<<<<<<<<<<<<<
  * 
  *     cdef _qname(self, qname, uri=None):
  */
-  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1049, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1048, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_6 = 0;
   __pyx_t_11 = 127;
@@ -153004,7 +153040,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   __pyx_t_6 += 7;
   __Pyx_GIVEREF(__pyx_kp_u_Prefix);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Prefix);
-  __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1049, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1048, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
   __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -153015,7 +153051,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   __pyx_t_6 += 11;
   __Pyx_GIVEREF(__pyx_kp_u_of_QName);
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_of_QName);
-  __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefixed_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1049, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefixed_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1048, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
   __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -153026,17 +153062,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   __pyx_t_6 += 26;
   __Pyx_GIVEREF(__pyx_kp_u_is_not_declared_in_scope);
   PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_is_not_declared_in_scope);
-  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_6, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1049, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_6, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1048, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1049, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1048, __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(9, 1049, __pyx_L1_error)
+  __PYX_ERR(9, 1048, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1044
+  /* "src/lxml/serializer.pxi":1043
  *                 yield from namespaces
  * 
  *     cdef _resolve_prefix_name(self, prefixed_name):             # <<<<<<<<<<<<<<
@@ -153063,7 +153099,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name(st
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1051
+/* "src/lxml/serializer.pxi":1050
  *         raise ValueError(f'Prefix {prefix} of QName "{prefixed_name}" is not declared in scope')
  * 
  *     cdef _qname(self, qname, uri=None):             # <<<<<<<<<<<<<<
@@ -153104,7 +153140,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   }
   __Pyx_INCREF(__pyx_v_uri);
 
-  /* "src/lxml/serializer.pxi":1052
+  /* "src/lxml/serializer.pxi":1051
  * 
  *     cdef _qname(self, qname, uri=None):
  *         if uri is None:             # <<<<<<<<<<<<<<
@@ -153115,30 +153151,30 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1053
+    /* "src/lxml/serializer.pxi":1052
  *     cdef _qname(self, qname, uri=None):
  *         if uri is None:
  *             uri, tag = qname[1:].rsplit('}', 1) if qname[:1] == '{' else ('', qname)             # <<<<<<<<<<<<<<
  *         else:
  *             tag = qname
  */
-    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_qname, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1053, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_qname, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1052, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_kp_s__31, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1053, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_kp_s__31, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1052, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_2) {
-      __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_qname, 1, 0, NULL, NULL, &__pyx_slice__68, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1053, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_qname, 1, 0, NULL, NULL, &__pyx_slice__68, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1052, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1053, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1052, __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_5, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1053, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1052, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_3 = __pyx_t_4;
       __pyx_t_4 = 0;
     } else {
-      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1053, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1052, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_kp_s__12);
       __Pyx_GIVEREF(__pyx_kp_s__12);
@@ -153155,7 +153191,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 1053, __pyx_L1_error)
+        __PYX_ERR(9, 1052, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -153168,15 +153204,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __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(9, 1053, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1052, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1053, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1052, __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(9, 1053, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1052, __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;
@@ -153184,7 +153220,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_GOTREF(__pyx_t_4);
       index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(9, 1053, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(9, 1052, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L5_unpacking_done;
@@ -153192,7 +153228,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(9, 1053, __pyx_L1_error)
+      __PYX_ERR(9, 1052, __pyx_L1_error)
       __pyx_L5_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_uri, __pyx_t_4);
@@ -153200,7 +153236,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __pyx_v_tag = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "src/lxml/serializer.pxi":1052
+    /* "src/lxml/serializer.pxi":1051
  * 
  *     cdef _qname(self, qname, uri=None):
  *         if uri is None:             # <<<<<<<<<<<<<<
@@ -153210,7 +153246,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     goto __pyx_L3;
   }
 
-  /* "src/lxml/serializer.pxi":1055
+  /* "src/lxml/serializer.pxi":1054
  *             uri, tag = qname[1:].rsplit('}', 1) if qname[:1] == '{' else ('', qname)
  *         else:
  *             tag = qname             # <<<<<<<<<<<<<<
@@ -153223,26 +153259,26 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   }
   __pyx_L3:;
 
-  /* "src/lxml/serializer.pxi":1057
+  /* "src/lxml/serializer.pxi":1056
  *             tag = qname
  * 
  *         prefixes_seen = set()             # <<<<<<<<<<<<<<
  *         for u, prefix in self._iter_namespaces(self._declared_ns_stack):
  *             if u == uri and prefix not in prefixes_seen:
  */
-  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1057, __pyx_L1_error)
+  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1056, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_prefixes_seen = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1058
+  /* "src/lxml/serializer.pxi":1057
  * 
  *         prefixes_seen = set()
  *         for u, prefix in self._iter_namespaces(self._declared_ns_stack):             # <<<<<<<<<<<<<<
  *             if u == uri and prefix not in prefixes_seen:
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter_namespaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1058, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter_namespaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1057, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -153256,16 +153292,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   }
   __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_self->_declared_ns_stack) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->_declared_ns_stack);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1058, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1057, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
     __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0;
     __pyx_t_9 = NULL;
   } else {
-    __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1058, __pyx_L1_error)
+    __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1057, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1058, __pyx_L1_error)
+    __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1057, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   for (;;) {
@@ -153273,17 +153309,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1058, __pyx_L1_error)
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1057, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1058, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1057, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1058, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1057, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1058, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1057, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -153293,7 +153329,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(9, 1058, __pyx_L1_error)
+          else __PYX_ERR(9, 1057, __pyx_L1_error)
         }
         break;
       }
@@ -153305,7 +153341,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 1058, __pyx_L1_error)
+        __PYX_ERR(9, 1057, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -153318,15 +153354,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1058, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1057, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1058, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1057, __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_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1058, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1057, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -153334,7 +153370,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_GOTREF(__pyx_t_4);
       index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(9, 1058, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(9, 1057, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L9_unpacking_done;
@@ -153342,7 +153378,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(9, 1058, __pyx_L1_error)
+      __PYX_ERR(9, 1057, __pyx_L1_error)
       __pyx_L9_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_u, __pyx_t_4);
@@ -153350,28 +153386,28 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":1059
+    /* "src/lxml/serializer.pxi":1058
  *         prefixes_seen = set()
  *         for u, prefix in self._iter_namespaces(self._declared_ns_stack):
  *             if u == uri and prefix not in prefixes_seen:             # <<<<<<<<<<<<<<
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
  *             prefixes_seen.add(prefix)
  */
-    __pyx_t_3 = PyObject_RichCompare(__pyx_v_u, __pyx_v_uri, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1059, __pyx_L1_error)
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1059, __pyx_L1_error)
+    __pyx_t_3 = PyObject_RichCompare(__pyx_v_u, __pyx_v_uri, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1058, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1058, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
       goto __pyx_L11_bool_binop_done;
     }
-    __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_v_prefix, __pyx_v_prefixes_seen, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1059, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_v_prefix, __pyx_v_prefixes_seen, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1058, __pyx_L1_error)
     __pyx_t_11 = (__pyx_t_1 != 0);
     __pyx_t_2 = __pyx_t_11;
     __pyx_L11_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":1060
+      /* "src/lxml/serializer.pxi":1059
  *         for u, prefix in self._iter_namespaces(self._declared_ns_stack):
  *             if u == uri and prefix not in prefixes_seen:
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri             # <<<<<<<<<<<<<<
@@ -153379,13 +153415,13 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1060, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1059, __pyx_L1_error)
       if (__pyx_t_2) {
-        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1060, __pyx_L1_error)
+        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1059, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_12 = 0;
         __pyx_t_13 = 127;
-        __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1060, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1059, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13;
         __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -153396,14 +153432,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
         __pyx_t_12 += 1;
         __Pyx_GIVEREF(__pyx_kp_u__17);
         PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_kp_u__17);
-        __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1060, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1059, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13;
         __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
         __Pyx_GIVEREF(__pyx_t_4);
         PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
         __pyx_t_4 = 0;
-        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1060, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1059, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_3 = __pyx_t_4;
@@ -153412,7 +153448,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
         __Pyx_INCREF(__pyx_v_tag);
         __pyx_t_3 = __pyx_v_tag;
       }
-      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1060, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1059, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
@@ -153428,7 +153464,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":1059
+      /* "src/lxml/serializer.pxi":1058
  *         prefixes_seen = set()
  *         for u, prefix in self._iter_namespaces(self._declared_ns_stack):
  *             if u == uri and prefix not in prefixes_seen:             # <<<<<<<<<<<<<<
@@ -153437,16 +153473,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
     }
 
-    /* "src/lxml/serializer.pxi":1061
+    /* "src/lxml/serializer.pxi":1060
  *             if u == uri and prefix not in prefixes_seen:
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
  *             prefixes_seen.add(prefix)             # <<<<<<<<<<<<<<
  * 
  *         # Not declared yet => add new declaration.
  */
-    __pyx_t_14 = PySet_Add(__pyx_v_prefixes_seen, __pyx_v_prefix); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1061, __pyx_L1_error)
+    __pyx_t_14 = PySet_Add(__pyx_v_prefixes_seen, __pyx_v_prefix); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1060, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1058
+    /* "src/lxml/serializer.pxi":1057
  * 
  *         prefixes_seen = set()
  *         for u, prefix in self._iter_namespaces(self._declared_ns_stack):             # <<<<<<<<<<<<<<
@@ -153456,7 +153492,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1064
+  /* "src/lxml/serializer.pxi":1063
  * 
  *         # Not declared yet => add new declaration.
  *         if self._rewrite_prefixes:             # <<<<<<<<<<<<<<
@@ -153466,7 +153502,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   __pyx_t_2 = (__pyx_v_self->_rewrite_prefixes != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1065
+    /* "src/lxml/serializer.pxi":1064
  *         # Not declared yet => add new declaration.
  *         if self._rewrite_prefixes:
  *             if uri in self._prefix_map:             # <<<<<<<<<<<<<<
@@ -153475,13 +153511,13 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
     if (unlikely(__pyx_v_self->_prefix_map == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(9, 1065, __pyx_L1_error)
+      __PYX_ERR(9, 1064, __pyx_L1_error)
     }
-    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_uri, __pyx_v_self->_prefix_map, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1065, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_uri, __pyx_v_self->_prefix_map, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1064, __pyx_L1_error)
     __pyx_t_11 = (__pyx_t_2 != 0);
     if (__pyx_t_11) {
 
-      /* "src/lxml/serializer.pxi":1066
+      /* "src/lxml/serializer.pxi":1065
  *         if self._rewrite_prefixes:
  *             if uri in self._prefix_map:
  *                 prefix = self._prefix_map[uri]             # <<<<<<<<<<<<<<
@@ -153490,14 +153526,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
       if (unlikely(__pyx_v_self->_prefix_map == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(9, 1066, __pyx_L1_error)
+        __PYX_ERR(9, 1065, __pyx_L1_error)
       }
-      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->_prefix_map, __pyx_v_uri); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1066, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->_prefix_map, __pyx_v_uri); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1065, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "src/lxml/serializer.pxi":1065
+      /* "src/lxml/serializer.pxi":1064
  *         # Not declared yet => add new declaration.
  *         if self._rewrite_prefixes:
  *             if uri in self._prefix_map:             # <<<<<<<<<<<<<<
@@ -153507,7 +153543,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       goto __pyx_L14;
     }
 
-    /* "src/lxml/serializer.pxi":1068
+    /* "src/lxml/serializer.pxi":1067
  *                 prefix = self._prefix_map[uri]
  *             else:
  *                 prefix = self._prefix_map[uri] = f'n{len(self._prefix_map)}'             # <<<<<<<<<<<<<<
@@ -153519,27 +153555,27 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_INCREF(__pyx_t_5);
       if (unlikely(__pyx_t_5 == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-        __PYX_ERR(9, 1068, __pyx_L1_error)
+        __PYX_ERR(9, 1067, __pyx_L1_error)
       }
-      __pyx_t_8 = PyDict_Size(__pyx_t_5); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1068, __pyx_L1_error)
+      __pyx_t_8 = PyDict_Size(__pyx_t_5); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1067, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_8, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1068, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_8, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1067, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_n_u_n, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1068, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_n_u_n, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1067, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_4);
       if (unlikely(__pyx_v_self->_prefix_map == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(9, 1068, __pyx_L1_error)
+        __PYX_ERR(9, 1067, __pyx_L1_error)
       }
-      if (unlikely(PyDict_SetItem(__pyx_v_self->_prefix_map, __pyx_v_uri, __pyx_t_4) < 0)) __PYX_ERR(9, 1068, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_self->_prefix_map, __pyx_v_uri, __pyx_t_4) < 0)) __PYX_ERR(9, 1067, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
     __pyx_L14:;
 
-    /* "src/lxml/serializer.pxi":1069
+    /* "src/lxml/serializer.pxi":1068
  *             else:
  *                 prefix = self._prefix_map[uri] = f'n{len(self._prefix_map)}'
  *             self._declared_ns_stack[-1].append((uri, prefix))             # <<<<<<<<<<<<<<
@@ -153548,11 +153584,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
     if (unlikely(__pyx_v_self->_declared_ns_stack == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(9, 1069, __pyx_L1_error)
+      __PYX_ERR(9, 1068, __pyx_L1_error)
     }
-    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_self->_declared_ns_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1069, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_self->_declared_ns_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1068, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1069, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1068, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_uri);
     __Pyx_GIVEREF(__pyx_v_uri);
@@ -153560,11 +153596,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __Pyx_INCREF(__pyx_v_prefix);
     __Pyx_GIVEREF(__pyx_v_prefix);
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_prefix);
-    __pyx_t_14 = __Pyx_PyObject_Append(__pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1069, __pyx_L1_error)
+    __pyx_t_14 = __Pyx_PyObject_Append(__pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1068, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "src/lxml/serializer.pxi":1070
+    /* "src/lxml/serializer.pxi":1069
  *                 prefix = self._prefix_map[uri] = f'n{len(self._prefix_map)}'
  *             self._declared_ns_stack[-1].append((uri, prefix))
  *             return f'{prefix}:{tag}', tag, uri             # <<<<<<<<<<<<<<
@@ -153572,11 +153608,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  *         if not uri and '' not in prefixes_seen:
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1070, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_8 = 0;
     __pyx_t_13 = 127;
-    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1070, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13;
     __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -153587,17 +153623,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __pyx_t_8 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__17);
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_kp_u__17);
-    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1070, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13;
     __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_8, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1070, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_8, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1070, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
@@ -153612,7 +153648,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1064
+    /* "src/lxml/serializer.pxi":1063
  * 
  *         # Not declared yet => add new declaration.
  *         if self._rewrite_prefixes:             # <<<<<<<<<<<<<<
@@ -153621,27 +153657,27 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1072
+  /* "src/lxml/serializer.pxi":1071
  *             return f'{prefix}:{tag}', tag, uri
  * 
  *         if not uri and '' not in prefixes_seen:             # <<<<<<<<<<<<<<
  *             # No default namespace declared => no prefix needed.
  *             return tag, tag, uri
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_uri); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1072, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_uri); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1071, __pyx_L1_error)
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
   } else {
     __pyx_t_11 = __pyx_t_1;
     goto __pyx_L16_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_kp_s__12, __pyx_v_prefixes_seen, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1072, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_kp_s__12, __pyx_v_prefixes_seen, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1071, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   __pyx_t_11 = __pyx_t_2;
   __pyx_L16_bool_binop_done:;
   if (__pyx_t_11) {
 
-    /* "src/lxml/serializer.pxi":1074
+    /* "src/lxml/serializer.pxi":1073
  *         if not uri and '' not in prefixes_seen:
  *             # No default namespace declared => no prefix needed.
  *             return tag, tag, uri             # <<<<<<<<<<<<<<
@@ -153649,7 +153685,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  *         for u, prefix in self._iter_namespaces(self._ns_stack):
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1074, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1073, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
@@ -153664,7 +153700,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1072
+    /* "src/lxml/serializer.pxi":1071
  *             return f'{prefix}:{tag}', tag, uri
  * 
  *         if not uri and '' not in prefixes_seen:             # <<<<<<<<<<<<<<
@@ -153673,14 +153709,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1076
+  /* "src/lxml/serializer.pxi":1075
  *             return tag, tag, uri
  * 
  *         for u, prefix in self._iter_namespaces(self._ns_stack):             # <<<<<<<<<<<<<<
  *             if u == uri:
  *                 self._declared_ns_stack[-1].append((uri, prefix))
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter_namespaces); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1076, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iter_namespaces); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1075, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -153694,16 +153730,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   }
   __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_self->_ns_stack) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_self->_ns_stack);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1076, __pyx_L1_error)
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1075, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
     __pyx_t_4 = __pyx_t_5; __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
     __pyx_t_9 = NULL;
   } else {
-    __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1076, __pyx_L1_error)
+    __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1075, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1076, __pyx_L1_error)
+    __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1075, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   for (;;) {
@@ -153711,17 +153747,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       if (likely(PyList_CheckExact(__pyx_t_4))) {
         if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1076, __pyx_L1_error)
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1075, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1076, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1075, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
         if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1076, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1075, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1076, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1075, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
@@ -153731,7 +153767,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(9, 1076, __pyx_L1_error)
+          else __PYX_ERR(9, 1075, __pyx_L1_error)
         }
         break;
       }
@@ -153743,7 +153779,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 1076, __pyx_L1_error)
+        __PYX_ERR(9, 1075, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -153756,15 +153792,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __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(9, 1076, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1075, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1076, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1075, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       #endif
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1076, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1075, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -153772,7 +153808,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L20_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(9, 1076, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(9, 1075, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L21_unpacking_done;
@@ -153780,7 +153816,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(9, 1076, __pyx_L1_error)
+      __PYX_ERR(9, 1075, __pyx_L1_error)
       __pyx_L21_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_u, __pyx_t_3);
@@ -153788,19 +153824,19 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":1077
+    /* "src/lxml/serializer.pxi":1076
  * 
  *         for u, prefix in self._iter_namespaces(self._ns_stack):
  *             if u == uri:             # <<<<<<<<<<<<<<
  *                 self._declared_ns_stack[-1].append((uri, prefix))
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
  */
-    __pyx_t_5 = PyObject_RichCompare(__pyx_v_u, __pyx_v_uri, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1077, __pyx_L1_error)
-    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 1077, __pyx_L1_error)
+    __pyx_t_5 = PyObject_RichCompare(__pyx_v_u, __pyx_v_uri, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1076, __pyx_L1_error)
+    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 1076, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_11) {
 
-      /* "src/lxml/serializer.pxi":1078
+      /* "src/lxml/serializer.pxi":1077
  *         for u, prefix in self._iter_namespaces(self._ns_stack):
  *             if u == uri:
  *                 self._declared_ns_stack[-1].append((uri, prefix))             # <<<<<<<<<<<<<<
@@ -153809,11 +153845,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
       if (unlikely(__pyx_v_self->_declared_ns_stack == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(9, 1078, __pyx_L1_error)
+        __PYX_ERR(9, 1077, __pyx_L1_error)
       }
-      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_self->_declared_ns_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1078, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_self->_declared_ns_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1077, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1078, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1077, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_INCREF(__pyx_v_uri);
       __Pyx_GIVEREF(__pyx_v_uri);
@@ -153821,11 +153857,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_INCREF(__pyx_v_prefix);
       __Pyx_GIVEREF(__pyx_v_prefix);
       PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_prefix);
-      __pyx_t_14 = __Pyx_PyObject_Append(__pyx_t_5, __pyx_t_6); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1078, __pyx_L1_error)
+      __pyx_t_14 = __Pyx_PyObject_Append(__pyx_t_5, __pyx_t_6); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1077, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":1079
+      /* "src/lxml/serializer.pxi":1078
  *             if u == uri:
  *                 self._declared_ns_stack[-1].append((uri, prefix))
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri             # <<<<<<<<<<<<<<
@@ -153833,13 +153869,13 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  *         if not uri:
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 1079, __pyx_L1_error)
+      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 1078, __pyx_L1_error)
       if (__pyx_t_11) {
-        __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1079, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1078, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_12 = 0;
         __pyx_t_13 = 127;
-        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1079, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_prefix, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1078, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13;
         __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
@@ -153850,14 +153886,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
         __pyx_t_12 += 1;
         __Pyx_GIVEREF(__pyx_kp_u__17);
         PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_kp_u__17);
-        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1079, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1078, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13;
         __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_3);
         PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
         __pyx_t_3 = 0;
-        __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1079, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1078, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_6 = __pyx_t_3;
@@ -153866,7 +153902,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
         __Pyx_INCREF(__pyx_v_tag);
         __pyx_t_6 = __pyx_v_tag;
       }
-      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1079, __pyx_L1_error)
+      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1078, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
@@ -153882,7 +153918,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":1077
+      /* "src/lxml/serializer.pxi":1076
  * 
  *         for u, prefix in self._iter_namespaces(self._ns_stack):
  *             if u == uri:             # <<<<<<<<<<<<<<
@@ -153891,7 +153927,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
     }
 
-    /* "src/lxml/serializer.pxi":1076
+    /* "src/lxml/serializer.pxi":1075
  *             return tag, tag, uri
  * 
  *         for u, prefix in self._iter_namespaces(self._ns_stack):             # <<<<<<<<<<<<<<
@@ -153901,18 +153937,18 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1081
+  /* "src/lxml/serializer.pxi":1080
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
  * 
  *         if not uri:             # <<<<<<<<<<<<<<
  *             # As soon as a default namespace is defined,
  *             # anything that has no namespace (and thus, no prefix) goes there.
  */
-  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_uri); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 1081, __pyx_L1_error)
+  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_uri); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(9, 1080, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_11) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1084
+    /* "src/lxml/serializer.pxi":1083
  *             # As soon as a default namespace is defined,
  *             # anything that has no namespace (and thus, no prefix) goes there.
  *             return tag, tag, uri             # <<<<<<<<<<<<<<
@@ -153920,7 +153956,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  *         raise ValueError(f'Namespace "{uri}" of name "{tag}" is not declared in scope')
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1084, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1083, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
@@ -153935,7 +153971,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1081
+    /* "src/lxml/serializer.pxi":1080
  *                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
  * 
  *         if not uri:             # <<<<<<<<<<<<<<
@@ -153944,14 +153980,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1086
+  /* "src/lxml/serializer.pxi":1085
  *             return tag, tag, uri
  * 
  *         raise ValueError(f'Namespace "{uri}" of name "{tag}" is not declared in scope')             # <<<<<<<<<<<<<<
  * 
  *     def data(self, data):
  */
-  __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1086, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_8 = 0;
   __pyx_t_13 = 127;
@@ -153959,7 +153995,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   __pyx_t_8 += 11;
   __Pyx_GIVEREF(__pyx_kp_u_Namespace);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Namespace);
-  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_uri, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1086, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_uri, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13;
   __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
@@ -153970,7 +154006,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   __pyx_t_8 += 11;
   __Pyx_GIVEREF(__pyx_kp_u_of_name);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_of_name);
-  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1086, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13;
   __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
@@ -153981,17 +154017,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   __pyx_t_8 += 26;
   __Pyx_GIVEREF(__pyx_kp_u_is_not_declared_in_scope);
   PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u_is_not_declared_in_scope);
-  __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_8, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1086, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_8, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1085, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1086, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1085, __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(9, 1086, __pyx_L1_error)
+  __PYX_ERR(9, 1085, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1051
+  /* "src/lxml/serializer.pxi":1050
  *         raise ValueError(f'Prefix {prefix} of QName "{prefixed_name}" is not declared in scope')
  * 
  *     cdef _qname(self, qname, uri=None):             # <<<<<<<<<<<<<<
@@ -154019,7 +154055,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__qname(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1088
+/* "src/lxml/serializer.pxi":1087
  *         raise ValueError(f'Namespace "{uri}" of name "{tag}" is not declared in scope')
  * 
  *     def data(self, data):             # <<<<<<<<<<<<<<
@@ -154051,7 +154087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_5data(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("data", 0);
 
-  /* "src/lxml/serializer.pxi":1089
+  /* "src/lxml/serializer.pxi":1088
  * 
  *     def data(self, data):
  *         if not self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -154061,7 +154097,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_5data(struct __pyx_obj
   __pyx_t_1 = ((!(__pyx_v_self->_ignored_depth != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1090
+    /* "src/lxml/serializer.pxi":1089
  *     def data(self, data):
  *         if not self._ignored_depth:
  *             self._data.append(data)             # <<<<<<<<<<<<<<
@@ -154070,11 +154106,11 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_5data(struct __pyx_obj
  */
     if (unlikely(__pyx_v_self->_data == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-      __PYX_ERR(9, 1090, __pyx_L1_error)
+      __PYX_ERR(9, 1089, __pyx_L1_error)
     }
-    __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_self->_data, __pyx_v_data); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(9, 1090, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_self->_data, __pyx_v_data); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(9, 1089, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1089
+    /* "src/lxml/serializer.pxi":1088
  * 
  *     def data(self, data):
  *         if not self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -154083,7 +154119,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_5data(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1088
+  /* "src/lxml/serializer.pxi":1087
  *         raise ValueError(f'Namespace "{uri}" of name "{tag}" is not declared in scope')
  * 
  *     def data(self, data):             # <<<<<<<<<<<<<<
@@ -154103,7 +154139,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_5data(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1092
+/* "src/lxml/serializer.pxi":1091
  *             self._data.append(data)
  * 
  *     cdef _flush(self):             # <<<<<<<<<<<<<<
@@ -154133,7 +154169,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_flush", 0);
 
-  /* "src/lxml/serializer.pxi":1093
+  /* "src/lxml/serializer.pxi":1092
  * 
  *     cdef _flush(self):
  *         data = u''.join(self._data)             # <<<<<<<<<<<<<<
@@ -154142,13 +154178,13 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
   __pyx_t_1 = __pyx_v_self->_data;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = PyUnicode_Join(__pyx_kp_u__12, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1093, __pyx_L1_error)
+  __pyx_t_2 = PyUnicode_Join(__pyx_kp_u__12, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1092, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_data = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1094
+  /* "src/lxml/serializer.pxi":1093
  *     cdef _flush(self):
  *         data = u''.join(self._data)
  *         del self._data[:]             # <<<<<<<<<<<<<<
@@ -154157,11 +154193,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
   if (unlikely(__pyx_v_self->_data == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(9, 1094, __pyx_L1_error)
+    __PYX_ERR(9, 1093, __pyx_L1_error)
   }
-  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_data, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(9, 1094, __pyx_L1_error)
+  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_data, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(9, 1093, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1095
+  /* "src/lxml/serializer.pxi":1094
  *         data = u''.join(self._data)
  *         del self._data[:]
  *         if self._strip_text and not self._preserve_space[-1]:             # <<<<<<<<<<<<<<
@@ -154176,30 +154212,30 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
   }
   if (unlikely(__pyx_v_self->_preserve_space == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(9, 1095, __pyx_L1_error)
+    __PYX_ERR(9, 1094, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_self->_preserve_space, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1095, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_self->_preserve_space, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1094, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(9, 1095, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(9, 1094, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_5 = ((!__pyx_t_4) != 0);
   __pyx_t_3 = __pyx_t_5;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":1096
+    /* "src/lxml/serializer.pxi":1095
  *         del self._data[:]
  *         if self._strip_text and not self._preserve_space[-1]:
  *             data = data.strip()             # <<<<<<<<<<<<<<
  *         if self._pending_start is not None:
  *             (tag, attrs, new_namespaces), self._pending_start = self._pending_start, None
  */
-    __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyUnicode_Type_strip, __pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1096, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyUnicode_Type_strip, __pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1095, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1095
+    /* "src/lxml/serializer.pxi":1094
  *         data = u''.join(self._data)
  *         del self._data[:]
  *         if self._strip_text and not self._preserve_space[-1]:             # <<<<<<<<<<<<<<
@@ -154208,7 +154244,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1097
+  /* "src/lxml/serializer.pxi":1096
  *         if self._strip_text and not self._preserve_space[-1]:
  *             data = data.strip()
  *         if self._pending_start is not None:             # <<<<<<<<<<<<<<
@@ -154219,7 +154255,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "src/lxml/serializer.pxi":1098
+    /* "src/lxml/serializer.pxi":1097
  *             data = data.strip()
  *         if self._pending_start is not None:
  *             (tag, attrs, new_namespaces), self._pending_start = self._pending_start, None             # <<<<<<<<<<<<<<
@@ -154236,7 +154272,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 1098, __pyx_L1_error)
+        __PYX_ERR(9, 1097, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
@@ -154246,16 +154282,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
       __Pyx_INCREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_t_8);
       #else
-      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1098, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1097, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1098, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1097, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1098, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1097, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       #endif
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
-      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1098, __pyx_L1_error)
+      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1097, __pyx_L1_error)
     }
     __pyx_v_tag = __pyx_t_6;
     __pyx_t_6 = 0;
@@ -154269,14 +154305,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
     __pyx_v_self->_pending_start = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1099
+    /* "src/lxml/serializer.pxi":1098
  *         if self._pending_start is not None:
  *             (tag, attrs, new_namespaces), self._pending_start = self._pending_start, None
  *             qname_text = data if u':' in data and _looks_like_prefix_name(data) else None             # <<<<<<<<<<<<<<
  *             self._start(tag, attrs, new_namespaces, qname_text)
  *             if qname_text is not None:
  */
-    __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v_data, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1099, __pyx_L1_error)
+    __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v_data, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1098, __pyx_L1_error)
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
     } else {
@@ -154296,10 +154332,10 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
     }
     __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_data);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1099, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1098, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(9, 1099, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(9, 1098, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_5 = __pyx_t_4;
     __pyx_L7_bool_binop_done:;
@@ -154313,7 +154349,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
     __pyx_v_qname_text = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1100
+    /* "src/lxml/serializer.pxi":1099
  *             (tag, attrs, new_namespaces), self._pending_start = self._pending_start, None
  *             qname_text = data if u':' in data and _looks_like_prefix_name(data) else None
  *             self._start(tag, attrs, new_namespaces, qname_text)             # <<<<<<<<<<<<<<
@@ -154322,11 +154358,11 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
     __pyx_t_9.__pyx_n = 1;
     __pyx_t_9.qname_text = __pyx_v_qname_text;
-    __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_start(__pyx_v_self, __pyx_v_tag, __pyx_v_attrs, __pyx_v_new_namespaces, &__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1100, __pyx_L1_error)
+    __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_start(__pyx_v_self, __pyx_v_tag, __pyx_v_attrs, __pyx_v_new_namespaces, &__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1099, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1101
+    /* "src/lxml/serializer.pxi":1100
  *             qname_text = data if u':' in data and _looks_like_prefix_name(data) else None
  *             self._start(tag, attrs, new_namespaces, qname_text)
  *             if qname_text is not None:             # <<<<<<<<<<<<<<
@@ -154337,7 +154373,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
     __pyx_t_4 = (__pyx_t_5 != 0);
     if (__pyx_t_4) {
 
-      /* "src/lxml/serializer.pxi":1102
+      /* "src/lxml/serializer.pxi":1101
  *             self._start(tag, attrs, new_namespaces, qname_text)
  *             if qname_text is not None:
  *                 return             # <<<<<<<<<<<<<<
@@ -154348,7 +154384,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":1101
+      /* "src/lxml/serializer.pxi":1100
  *             qname_text = data if u':' in data and _looks_like_prefix_name(data) else None
  *             self._start(tag, attrs, new_namespaces, qname_text)
  *             if qname_text is not None:             # <<<<<<<<<<<<<<
@@ -154357,7 +154393,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
     }
 
-    /* "src/lxml/serializer.pxi":1097
+    /* "src/lxml/serializer.pxi":1096
  *         if self._strip_text and not self._preserve_space[-1]:
  *             data = data.strip()
  *         if self._pending_start is not None:             # <<<<<<<<<<<<<<
@@ -154366,14 +154402,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1103
+  /* "src/lxml/serializer.pxi":1102
  *             if qname_text is not None:
  *                 return
  *         if data and self._root_seen:             # <<<<<<<<<<<<<<
  *             self._write(_escape_cdata_c14n(data))
  * 
  */
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_data); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1103, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_data); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1102, __pyx_L1_error)
   if (__pyx_t_5) {
   } else {
     __pyx_t_4 = __pyx_t_5;
@@ -154384,14 +154420,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
   __pyx_L11_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "src/lxml/serializer.pxi":1104
+    /* "src/lxml/serializer.pxi":1103
  *                 return
  *         if data and self._root_seen:
  *             self._write(_escape_cdata_c14n(data))             # <<<<<<<<<<<<<<
  * 
  *     def start_ns(self, prefix, uri):
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1104, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1103, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_self->_write);
     __pyx_t_8 = __pyx_v_self->_write; __pyx_t_7 = NULL;
@@ -154407,12 +154443,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
     __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_2);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1104, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1103, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1103
+    /* "src/lxml/serializer.pxi":1102
  *             if qname_text is not None:
  *                 return
  *         if data and self._root_seen:             # <<<<<<<<<<<<<<
@@ -154421,7 +154457,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1092
+  /* "src/lxml/serializer.pxi":1091
  *             self._data.append(data)
  * 
  *     cdef _flush(self):             # <<<<<<<<<<<<<<
@@ -154451,7 +154487,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__flush(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1106
+/* "src/lxml/serializer.pxi":1105
  *             self._write(_escape_cdata_c14n(data))
  * 
  *     def start_ns(self, prefix, uri):             # <<<<<<<<<<<<<<
@@ -154494,11 +154530,11 @@ static PyObject *__pyx_pw_4lxml_5etree_16C14NWriterTarget_8start_ns(PyObject *__
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_uri)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("start_ns", 1, 2, 2, 1); __PYX_ERR(9, 1106, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("start_ns", 1, 2, 2, 1); __PYX_ERR(9, 1105, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "start_ns") < 0)) __PYX_ERR(9, 1106, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "start_ns") < 0)) __PYX_ERR(9, 1105, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -154511,7 +154547,7 @@ static PyObject *__pyx_pw_4lxml_5etree_16C14NWriterTarget_8start_ns(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("start_ns", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1106, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("start_ns", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1105, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.C14NWriterTarget.start_ns", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -154536,7 +154572,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("start_ns", 0);
 
-  /* "src/lxml/serializer.pxi":1107
+  /* "src/lxml/serializer.pxi":1106
  * 
  *     def start_ns(self, prefix, uri):
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -154546,7 +154582,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
   __pyx_t_1 = (__pyx_v_self->_ignored_depth != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1108
+    /* "src/lxml/serializer.pxi":1107
  *     def start_ns(self, prefix, uri):
  *         if self._ignored_depth:
  *             return             # <<<<<<<<<<<<<<
@@ -154557,7 +154593,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1107
+    /* "src/lxml/serializer.pxi":1106
  * 
  *     def start_ns(self, prefix, uri):
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -154566,7 +154602,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
  */
   }
 
-  /* "src/lxml/serializer.pxi":1110
+  /* "src/lxml/serializer.pxi":1109
  *             return
  *         # we may have to resolve qnames in text content
  *         if self._data:             # <<<<<<<<<<<<<<
@@ -154576,18 +154612,18 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
   __pyx_t_1 = (__pyx_v_self->_data != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_data) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1111
+    /* "src/lxml/serializer.pxi":1110
  *         # we may have to resolve qnames in text content
  *         if self._data:
  *             self._flush()             # <<<<<<<<<<<<<<
  *         self._ns_stack[-1].append((uri, prefix))
  * 
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1111, __pyx_L1_error)
+    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1110, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1110
+    /* "src/lxml/serializer.pxi":1109
  *             return
  *         # we may have to resolve qnames in text content
  *         if self._data:             # <<<<<<<<<<<<<<
@@ -154596,7 +154632,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
  */
   }
 
-  /* "src/lxml/serializer.pxi":1112
+  /* "src/lxml/serializer.pxi":1111
  *         if self._data:
  *             self._flush()
  *         self._ns_stack[-1].append((uri, prefix))             # <<<<<<<<<<<<<<
@@ -154605,11 +154641,11 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
  */
   if (unlikely(__pyx_v_self->_ns_stack == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(9, 1112, __pyx_L1_error)
+    __PYX_ERR(9, 1111, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_self->_ns_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1112, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_self->_ns_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1112, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_uri);
   __Pyx_GIVEREF(__pyx_v_uri);
@@ -154617,11 +154653,11 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
   __Pyx_INCREF(__pyx_v_prefix);
   __Pyx_GIVEREF(__pyx_v_prefix);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_prefix);
-  __pyx_t_4 = __Pyx_PyObject_Append(__pyx_t_2, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(9, 1112, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Append(__pyx_t_2, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(9, 1111, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1106
+  /* "src/lxml/serializer.pxi":1105
  *             self._write(_escape_cdata_c14n(data))
  * 
  *     def start_ns(self, prefix, uri):             # <<<<<<<<<<<<<<
@@ -154643,7 +154679,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_7start_ns(struct __pyx
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1114
+/* "src/lxml/serializer.pxi":1113
  *         self._ns_stack[-1].append((uri, prefix))
  * 
  *     def start(self, tag, attrs):             # <<<<<<<<<<<<<<
@@ -154686,11 +154722,11 @@ static PyObject *__pyx_pw_4lxml_5etree_16C14NWriterTarget_10start(PyObject *__py
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_attrs)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("start", 1, 2, 2, 1); __PYX_ERR(9, 1114, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("start", 1, 2, 2, 1); __PYX_ERR(9, 1113, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "start") < 0)) __PYX_ERR(9, 1114, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "start") < 0)) __PYX_ERR(9, 1113, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -154703,7 +154739,7 @@ static PyObject *__pyx_pw_4lxml_5etree_16C14NWriterTarget_10start(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("start", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1114, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("start", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1113, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.C14NWriterTarget.start", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -154730,7 +154766,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("start", 0);
 
-  /* "src/lxml/serializer.pxi":1115
+  /* "src/lxml/serializer.pxi":1114
  * 
  *     def start(self, tag, attrs):
  *         if self._exclude_tags is not None and (             # <<<<<<<<<<<<<<
@@ -154745,7 +154781,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "src/lxml/serializer.pxi":1116
+  /* "src/lxml/serializer.pxi":1115
  *     def start(self, tag, attrs):
  *         if self._exclude_tags is not None and (
  *                 self._ignored_depth or tag in self._exclude_tags):             # <<<<<<<<<<<<<<
@@ -154760,14 +154796,14 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
   }
   if (unlikely(__pyx_v_self->_exclude_tags == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(9, 1116, __pyx_L1_error)
+    __PYX_ERR(9, 1115, __pyx_L1_error)
   }
-  __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_self->_exclude_tags, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1116, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_self->_exclude_tags, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1115, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_3 != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L4_bool_binop_done:;
 
-  /* "src/lxml/serializer.pxi":1115
+  /* "src/lxml/serializer.pxi":1114
  * 
  *     def start(self, tag, attrs):
  *         if self._exclude_tags is not None and (             # <<<<<<<<<<<<<<
@@ -154776,7 +154812,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
  */
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1117
+    /* "src/lxml/serializer.pxi":1116
  *         if self._exclude_tags is not None and (
  *                 self._ignored_depth or tag in self._exclude_tags):
  *             self._ignored_depth += 1             # <<<<<<<<<<<<<<
@@ -154785,7 +154821,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
  */
     __pyx_v_self->_ignored_depth = (__pyx_v_self->_ignored_depth + 1);
 
-    /* "src/lxml/serializer.pxi":1118
+    /* "src/lxml/serializer.pxi":1117
  *                 self._ignored_depth or tag in self._exclude_tags):
  *             self._ignored_depth += 1
  *             return             # <<<<<<<<<<<<<<
@@ -154796,7 +154832,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1115
+    /* "src/lxml/serializer.pxi":1114
  * 
  *     def start(self, tag, attrs):
  *         if self._exclude_tags is not None and (             # <<<<<<<<<<<<<<
@@ -154805,7 +154841,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
  */
   }
 
-  /* "src/lxml/serializer.pxi":1119
+  /* "src/lxml/serializer.pxi":1118
  *             self._ignored_depth += 1
  *             return
  *         if self._data:             # <<<<<<<<<<<<<<
@@ -154815,18 +154851,18 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
   __pyx_t_1 = (__pyx_v_self->_data != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_data) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1120
+    /* "src/lxml/serializer.pxi":1119
  *             return
  *         if self._data:
  *             self._flush()             # <<<<<<<<<<<<<<
  * 
  *         new_namespaces = []
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1120, __pyx_L1_error)
+    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1119, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1119
+    /* "src/lxml/serializer.pxi":1118
  *             self._ignored_depth += 1
  *             return
  *         if self._data:             # <<<<<<<<<<<<<<
@@ -154835,19 +154871,19 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
  */
   }
 
-  /* "src/lxml/serializer.pxi":1122
+  /* "src/lxml/serializer.pxi":1121
  *             self._flush()
  * 
  *         new_namespaces = []             # <<<<<<<<<<<<<<
  *         self._declared_ns_stack.append(new_namespaces)
  * 
  */
-  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1122, __pyx_L1_error)
+  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1121, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_new_namespaces = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1123
+  /* "src/lxml/serializer.pxi":1122
  * 
  *         new_namespaces = []
  *         self._declared_ns_stack.append(new_namespaces)             # <<<<<<<<<<<<<<
@@ -154856,11 +154892,11 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
  */
   if (unlikely(__pyx_v_self->_declared_ns_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(9, 1123, __pyx_L1_error)
+    __PYX_ERR(9, 1122, __pyx_L1_error)
   }
-  __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->_declared_ns_stack, __pyx_v_new_namespaces); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1123, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->_declared_ns_stack, __pyx_v_new_namespaces); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1122, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1125
+  /* "src/lxml/serializer.pxi":1124
  *         self._declared_ns_stack.append(new_namespaces)
  * 
  *         if self._qname_aware_tags is not None and tag in self._qname_aware_tags:             # <<<<<<<<<<<<<<
@@ -154876,22 +154912,22 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
   }
   if (unlikely(__pyx_v_self->_qname_aware_tags == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(9, 1125, __pyx_L1_error)
+    __PYX_ERR(9, 1124, __pyx_L1_error)
   }
-  __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_self->_qname_aware_tags, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1125, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_self->_qname_aware_tags, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1124, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_3 != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L9_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1127
+    /* "src/lxml/serializer.pxi":1126
  *         if self._qname_aware_tags is not None and tag in self._qname_aware_tags:
  *             # Need to parse text first to see if it requires a prefix declaration.
  *             self._pending_start = (tag, attrs, new_namespaces)             # <<<<<<<<<<<<<<
  *             return
  *         self._start(tag, attrs, new_namespaces)
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1127, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1126, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
@@ -154908,7 +154944,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
     __pyx_v_self->_pending_start = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1128
+    /* "src/lxml/serializer.pxi":1127
  *             # Need to parse text first to see if it requires a prefix declaration.
  *             self._pending_start = (tag, attrs, new_namespaces)
  *             return             # <<<<<<<<<<<<<<
@@ -154919,7 +154955,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1125
+    /* "src/lxml/serializer.pxi":1124
  *         self._declared_ns_stack.append(new_namespaces)
  * 
  *         if self._qname_aware_tags is not None and tag in self._qname_aware_tags:             # <<<<<<<<<<<<<<
@@ -154928,18 +154964,18 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
  */
   }
 
-  /* "src/lxml/serializer.pxi":1129
+  /* "src/lxml/serializer.pxi":1128
  *             self._pending_start = (tag, attrs, new_namespaces)
  *             return
  *         self._start(tag, attrs, new_namespaces)             # <<<<<<<<<<<<<<
  * 
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_start(__pyx_v_self, __pyx_v_tag, __pyx_v_attrs, __pyx_v_new_namespaces, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1129, __pyx_L1_error)
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_start(__pyx_v_self, __pyx_v_tag, __pyx_v_attrs, __pyx_v_new_namespaces, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1128, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1114
+  /* "src/lxml/serializer.pxi":1113
  *         self._ns_stack[-1].append((uri, prefix))
  * 
  *     def start(self, tag, attrs):             # <<<<<<<<<<<<<<
@@ -154961,7 +154997,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_9start(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1157
+/* "src/lxml/serializer.pxi":1156
  *         # Assign prefixes in lexicographical order of used URIs.
  *         parsed_qnames = {n: self._qname(n) for n in sorted(
  *             qnames, key=lambda n: n.split('}', 1))}             # <<<<<<<<<<<<<<
@@ -154993,9 +155029,9 @@ static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("lambda", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1157, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1157, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -155014,7 +155050,7 @@ static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1131
+/* "src/lxml/serializer.pxi":1130
  *         self._start(tag, attrs, new_namespaces)
  * 
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):             # <<<<<<<<<<<<<<
@@ -155071,7 +155107,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   }
   __Pyx_INCREF(__pyx_v_attrs);
 
-  /* "src/lxml/serializer.pxi":1132
+  /* "src/lxml/serializer.pxi":1131
  * 
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):
  *         if self._exclude_attrs is not None and attrs:             # <<<<<<<<<<<<<<
@@ -155085,12 +155121,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     __pyx_t_1 = __pyx_t_3;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attrs); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1132, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attrs); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1131, __pyx_L1_error)
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1133
+    /* "src/lxml/serializer.pxi":1132
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):
  *         if self._exclude_attrs is not None and attrs:
  *             attrs = {k: v for k, v in attrs.items() if k not in self._exclude_attrs}             # <<<<<<<<<<<<<<
@@ -155098,9 +155134,9 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  *         qnames = {tag, *attrs}
  */
     { /* enter inner scope */
-      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1133, __pyx_L8_error)
+      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1132, __pyx_L8_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrs, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1133, __pyx_L8_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrs, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1132, __pyx_L8_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -155114,16 +155150,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       }
       __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1133, __pyx_L8_error)
+      if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1132, __pyx_L8_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
         __pyx_t_6 = __pyx_t_5; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0;
         __pyx_t_9 = NULL;
       } else {
-        __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1133, __pyx_L8_error)
+        __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1132, __pyx_L8_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_9 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1133, __pyx_L8_error)
+        __pyx_t_9 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1132, __pyx_L8_error)
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       for (;;) {
@@ -155131,17 +155167,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           if (likely(PyList_CheckExact(__pyx_t_6))) {
             if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_6)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1133, __pyx_L8_error)
+            __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1132, __pyx_L8_error)
             #else
-            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1133, __pyx_L8_error)
+            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1132, __pyx_L8_error)
             __Pyx_GOTREF(__pyx_t_5);
             #endif
           } else {
             if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1133, __pyx_L8_error)
+            __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1132, __pyx_L8_error)
             #else
-            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1133, __pyx_L8_error)
+            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1132, __pyx_L8_error)
             __Pyx_GOTREF(__pyx_t_5);
             #endif
           }
@@ -155151,7 +155187,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(9, 1133, __pyx_L8_error)
+              else __PYX_ERR(9, 1132, __pyx_L8_error)
             }
             break;
           }
@@ -155163,7 +155199,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(9, 1133, __pyx_L8_error)
+            __PYX_ERR(9, 1132, __pyx_L8_error)
           }
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -155176,15 +155212,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           __Pyx_INCREF(__pyx_t_7);
           __Pyx_INCREF(__pyx_t_10);
           #else
-          __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1133, __pyx_L8_error)
+          __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1132, __pyx_L8_error)
           __Pyx_GOTREF(__pyx_t_7);
-          __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1133, __pyx_L8_error)
+          __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1132, __pyx_L8_error)
           __Pyx_GOTREF(__pyx_t_10);
           #endif
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         } else {
           Py_ssize_t index = -1;
-          __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1133, __pyx_L8_error)
+          __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1132, __pyx_L8_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
@@ -155192,7 +155228,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           __Pyx_GOTREF(__pyx_t_7);
           index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L11_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_10);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(9, 1133, __pyx_L8_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(9, 1132, __pyx_L8_error)
           __pyx_t_12 = NULL;
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           goto __pyx_L12_unpacking_done;
@@ -155200,7 +155236,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __pyx_t_12 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(9, 1133, __pyx_L8_error)
+          __PYX_ERR(9, 1132, __pyx_L8_error)
           __pyx_L12_unpacking_done:;
         }
         __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_k, __pyx_t_7);
@@ -155209,12 +155245,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __pyx_t_10 = 0;
         if (unlikely(__pyx_v_self->_exclude_attrs == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-          __PYX_ERR(9, 1133, __pyx_L8_error)
+          __PYX_ERR(9, 1132, __pyx_L8_error)
         }
-        __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_8genexpr1__pyx_v_k, __pyx_v_self->_exclude_attrs, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1133, __pyx_L8_error)
+        __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_8genexpr1__pyx_v_k, __pyx_v_self->_exclude_attrs, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1132, __pyx_L8_error)
         __pyx_t_3 = (__pyx_t_1 != 0);
         if (__pyx_t_3) {
-          if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_8genexpr1__pyx_v_k, (PyObject*)__pyx_8genexpr1__pyx_v_v))) __PYX_ERR(9, 1133, __pyx_L8_error)
+          if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_8genexpr1__pyx_v_k, (PyObject*)__pyx_8genexpr1__pyx_v_v))) __PYX_ERR(9, 1132, __pyx_L8_error)
         }
       }
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -155230,7 +155266,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     __Pyx_DECREF_SET(__pyx_v_attrs, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1132
+    /* "src/lxml/serializer.pxi":1131
  * 
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):
  *         if self._exclude_attrs is not None and attrs:             # <<<<<<<<<<<<<<
@@ -155239,39 +155275,39 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1135
+  /* "src/lxml/serializer.pxi":1134
  *             attrs = {k: v for k, v in attrs.items() if k not in self._exclude_attrs}
  * 
  *         qnames = {tag, *attrs}             # <<<<<<<<<<<<<<
  *         resolved_names = {}
  * 
  */
-  __pyx_t_6 = PySet_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1135, __pyx_L1_error)
+  __pyx_t_6 = PySet_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  if (PySet_Add(__pyx_t_6, __pyx_v_tag) < 0) __PYX_ERR(9, 1135, __pyx_L1_error)
+  if (PySet_Add(__pyx_t_6, __pyx_v_tag) < 0) __PYX_ERR(9, 1134, __pyx_L1_error)
   __pyx_t_4 = __pyx_t_6;
   __pyx_t_6 = 0;
   if (unlikely(__pyx_v_attrs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after * must be an iterable, not NoneType");
-    __PYX_ERR(9, 1135, __pyx_L1_error)
+    __PYX_ERR(9, 1134, __pyx_L1_error)
   }
-  if (__Pyx_PySet_Update(__pyx_t_4, __pyx_v_attrs) < 0) __PYX_ERR(9, 1135, __pyx_L1_error)
+  if (__Pyx_PySet_Update(__pyx_t_4, __pyx_v_attrs) < 0) __PYX_ERR(9, 1134, __pyx_L1_error)
   __pyx_v_qnames = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1136
+  /* "src/lxml/serializer.pxi":1135
  * 
  *         qnames = {tag, *attrs}
  *         resolved_names = {}             # <<<<<<<<<<<<<<
  * 
  *         # Resolve prefixes in attribute and tag text.
  */
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1136, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_resolved_names = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1139
+  /* "src/lxml/serializer.pxi":1138
  * 
  *         # Resolve prefixes in attribute and tag text.
  *         if qname_text is not None:             # <<<<<<<<<<<<<<
@@ -155282,30 +155318,30 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1140
+    /* "src/lxml/serializer.pxi":1139
  *         # Resolve prefixes in attribute and tag text.
  *         if qname_text is not None:
  *             qname = resolved_names[qname_text] = self._resolve_prefix_name(qname_text)             # <<<<<<<<<<<<<<
  *             qnames.add(qname)
  *         if self._find_qname_aware_attrs is not None and attrs:
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_resolve_prefix_name(__pyx_v_self, __pyx_v_qname_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1140, __pyx_L1_error)
+    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_resolve_prefix_name(__pyx_v_self, __pyx_v_qname_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1139, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_4);
     __pyx_v_qname = __pyx_t_4;
-    if (unlikely(PyDict_SetItem(__pyx_v_resolved_names, __pyx_v_qname_text, __pyx_t_4) < 0)) __PYX_ERR(9, 1140, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_resolved_names, __pyx_v_qname_text, __pyx_t_4) < 0)) __PYX_ERR(9, 1139, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1141
+    /* "src/lxml/serializer.pxi":1140
  *         if qname_text is not None:
  *             qname = resolved_names[qname_text] = self._resolve_prefix_name(qname_text)
  *             qnames.add(qname)             # <<<<<<<<<<<<<<
  *         if self._find_qname_aware_attrs is not None and attrs:
  *             qattrs = self._find_qname_aware_attrs(attrs)
  */
-    __pyx_t_13 = PySet_Add(__pyx_v_qnames, __pyx_v_qname); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1141, __pyx_L1_error)
+    __pyx_t_13 = PySet_Add(__pyx_v_qnames, __pyx_v_qname); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1140, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1139
+    /* "src/lxml/serializer.pxi":1138
  * 
  *         # Resolve prefixes in attribute and tag text.
  *         if qname_text is not None:             # <<<<<<<<<<<<<<
@@ -155314,7 +155350,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1142
+  /* "src/lxml/serializer.pxi":1141
  *             qname = resolved_names[qname_text] = self._resolve_prefix_name(qname_text)
  *             qnames.add(qname)
  *         if self._find_qname_aware_attrs is not None and attrs:             # <<<<<<<<<<<<<<
@@ -155328,12 +155364,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L17_bool_binop_done;
   }
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attrs); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1142, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attrs); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1141, __pyx_L1_error)
   __pyx_t_1 = __pyx_t_2;
   __pyx_L17_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1143
+    /* "src/lxml/serializer.pxi":1142
  *             qnames.add(qname)
  *         if self._find_qname_aware_attrs is not None and attrs:
  *             qattrs = self._find_qname_aware_attrs(attrs)             # <<<<<<<<<<<<<<
@@ -155353,23 +155389,23 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     }
     __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_v_attrs) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_attrs);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1143, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_qattrs = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1144
+    /* "src/lxml/serializer.pxi":1143
  *         if self._find_qname_aware_attrs is not None and attrs:
  *             qattrs = self._find_qname_aware_attrs(attrs)
  *             if qattrs:             # <<<<<<<<<<<<<<
  *                 for attr_name in qattrs:
  *                     value = attrs[attr_name]
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_qattrs); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1144, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_qattrs); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1143, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":1145
+      /* "src/lxml/serializer.pxi":1144
  *             qattrs = self._find_qname_aware_attrs(attrs)
  *             if qattrs:
  *                 for attr_name in qattrs:             # <<<<<<<<<<<<<<
@@ -155380,26 +155416,26 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __pyx_t_4 = __pyx_v_qattrs; __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0;
         __pyx_t_9 = NULL;
       } else {
-        __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_qattrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1145, __pyx_L1_error)
+        __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_qattrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1144, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1145, __pyx_L1_error)
+        __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1144, __pyx_L1_error)
       }
       for (;;) {
         if (likely(!__pyx_t_9)) {
           if (likely(PyList_CheckExact(__pyx_t_4))) {
             if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1145, __pyx_L1_error)
+            __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1144, __pyx_L1_error)
             #else
-            __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1145, __pyx_L1_error)
+            __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1144, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_6);
             #endif
           } else {
             if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1145, __pyx_L1_error)
+            __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1144, __pyx_L1_error)
             #else
-            __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1145, __pyx_L1_error)
+            __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1144, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_6);
             #endif
           }
@@ -155409,7 +155445,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(9, 1145, __pyx_L1_error)
+              else __PYX_ERR(9, 1144, __pyx_L1_error)
             }
             break;
           }
@@ -155418,19 +155454,19 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_XDECREF_SET(__pyx_v_attr_name, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "src/lxml/serializer.pxi":1146
+        /* "src/lxml/serializer.pxi":1145
  *             if qattrs:
  *                 for attr_name in qattrs:
  *                     value = attrs[attr_name]             # <<<<<<<<<<<<<<
  *                     if _looks_like_prefix_name(value):
  *                         qname = resolved_names[value] = self._resolve_prefix_name(value)
  */
-        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_attrs, __pyx_v_attr_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1146, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_attrs, __pyx_v_attr_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1145, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "src/lxml/serializer.pxi":1147
+        /* "src/lxml/serializer.pxi":1146
  *                 for attr_name in qattrs:
  *                     value = attrs[attr_name]
  *                     if _looks_like_prefix_name(value):             # <<<<<<<<<<<<<<
@@ -155450,37 +155486,37 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         }
         __pyx_t_6 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_10, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_value);
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-        if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1147, __pyx_L1_error)
+        if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1146, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1147, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1146, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (__pyx_t_1) {
 
-          /* "src/lxml/serializer.pxi":1148
+          /* "src/lxml/serializer.pxi":1147
  *                     value = attrs[attr_name]
  *                     if _looks_like_prefix_name(value):
  *                         qname = resolved_names[value] = self._resolve_prefix_name(value)             # <<<<<<<<<<<<<<
  *                         qnames.add(qname)
  *             else:
  */
-          __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_resolve_prefix_name(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1148, __pyx_L1_error)
+          __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_resolve_prefix_name(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1147, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_INCREF(__pyx_t_6);
           __Pyx_XDECREF_SET(__pyx_v_qname, __pyx_t_6);
-          if (unlikely(PyDict_SetItem(__pyx_v_resolved_names, __pyx_v_value, __pyx_t_6) < 0)) __PYX_ERR(9, 1148, __pyx_L1_error)
+          if (unlikely(PyDict_SetItem(__pyx_v_resolved_names, __pyx_v_value, __pyx_t_6) < 0)) __PYX_ERR(9, 1147, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-          /* "src/lxml/serializer.pxi":1149
+          /* "src/lxml/serializer.pxi":1148
  *                     if _looks_like_prefix_name(value):
  *                         qname = resolved_names[value] = self._resolve_prefix_name(value)
  *                         qnames.add(qname)             # <<<<<<<<<<<<<<
  *             else:
  *                 qattrs = None
  */
-          __pyx_t_13 = PySet_Add(__pyx_v_qnames, __pyx_v_qname); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1149, __pyx_L1_error)
+          __pyx_t_13 = PySet_Add(__pyx_v_qnames, __pyx_v_qname); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1148, __pyx_L1_error)
 
-          /* "src/lxml/serializer.pxi":1147
+          /* "src/lxml/serializer.pxi":1146
  *                 for attr_name in qattrs:
  *                     value = attrs[attr_name]
  *                     if _looks_like_prefix_name(value):             # <<<<<<<<<<<<<<
@@ -155489,7 +155525,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
         }
 
-        /* "src/lxml/serializer.pxi":1145
+        /* "src/lxml/serializer.pxi":1144
  *             qattrs = self._find_qname_aware_attrs(attrs)
  *             if qattrs:
  *                 for attr_name in qattrs:             # <<<<<<<<<<<<<<
@@ -155499,7 +155535,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       }
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "src/lxml/serializer.pxi":1144
+      /* "src/lxml/serializer.pxi":1143
  *         if self._find_qname_aware_attrs is not None and attrs:
  *             qattrs = self._find_qname_aware_attrs(attrs)
  *             if qattrs:             # <<<<<<<<<<<<<<
@@ -155509,7 +155545,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       goto __pyx_L19;
     }
 
-    /* "src/lxml/serializer.pxi":1151
+    /* "src/lxml/serializer.pxi":1150
  *                         qnames.add(qname)
  *             else:
  *                 qattrs = None             # <<<<<<<<<<<<<<
@@ -155522,7 +155558,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     }
     __pyx_L19:;
 
-    /* "src/lxml/serializer.pxi":1142
+    /* "src/lxml/serializer.pxi":1141
  *             qname = resolved_names[qname_text] = self._resolve_prefix_name(qname_text)
  *             qnames.add(qname)
  *         if self._find_qname_aware_attrs is not None and attrs:             # <<<<<<<<<<<<<<
@@ -155532,7 +155568,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     goto __pyx_L16;
   }
 
-  /* "src/lxml/serializer.pxi":1153
+  /* "src/lxml/serializer.pxi":1152
  *                 qattrs = None
  *         else:
  *             qattrs = None             # <<<<<<<<<<<<<<
@@ -155545,7 +155581,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   }
   __pyx_L16:;
 
-  /* "src/lxml/serializer.pxi":1156
+  /* "src/lxml/serializer.pxi":1155
  * 
  *         # Assign prefixes in lexicographical order of used URIs.
  *         parsed_qnames = {n: self._qname(n) for n in sorted(             # <<<<<<<<<<<<<<
@@ -155553,36 +155589,36 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  * 
  */
   { /* enter inner scope */
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1156, __pyx_L25_error)
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1155, __pyx_L25_error)
     __Pyx_GOTREF(__pyx_t_4);
 
-    /* "src/lxml/serializer.pxi":1157
+    /* "src/lxml/serializer.pxi":1156
  *         # Assign prefixes in lexicographical order of used URIs.
  *         parsed_qnames = {n: self._qname(n) for n in sorted(
  *             qnames, key=lambda n: n.split('}', 1))}             # <<<<<<<<<<<<<<
  * 
  *         # Write namespace declarations in prefix order ...
  */
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1156, __pyx_L25_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1155, __pyx_L25_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_qnames);
     __Pyx_GIVEREF(__pyx_v_qnames);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_qnames);
-    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1157, __pyx_L25_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1156, __pyx_L25_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_6_start_8genexpr2_lambda, 0, __pyx_n_s_C14NWriterTarget__start_locals_l, NULL, __pyx_n_s_lxml_etree, __pyx_d, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1157, __pyx_L25_error)
+    __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_6_start_8genexpr2_lambda, 0, __pyx_n_s_C14NWriterTarget__start_locals_l, NULL, __pyx_n_s_lxml_etree, __pyx_d, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1156, __pyx_L25_error)
     __Pyx_GOTREF(__pyx_t_10);
-    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_t_10) < 0) __PYX_ERR(9, 1157, __pyx_L25_error)
+    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_t_10) < 0) __PYX_ERR(9, 1156, __pyx_L25_error)
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-    /* "src/lxml/serializer.pxi":1156
+    /* "src/lxml/serializer.pxi":1155
  * 
  *         # Assign prefixes in lexicographical order of used URIs.
  *         parsed_qnames = {n: self._qname(n) for n in sorted(             # <<<<<<<<<<<<<<
  *             qnames, key=lambda n: n.split('}', 1))}
  * 
  */
-    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1156, __pyx_L25_error)
+    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1155, __pyx_L25_error)
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -155590,9 +155626,9 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __pyx_t_5 = __pyx_t_10; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
     } else {
-      __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1156, __pyx_L25_error)
+      __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1155, __pyx_L25_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1156, __pyx_L25_error)
+      __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1155, __pyx_L25_error)
     }
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     for (;;) {
@@ -155600,17 +155636,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         if (likely(PyList_CheckExact(__pyx_t_5))) {
           if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_10 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1156, __pyx_L25_error)
+          __pyx_t_10 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1155, __pyx_L25_error)
           #else
-          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1156, __pyx_L25_error)
+          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1155, __pyx_L25_error)
           __Pyx_GOTREF(__pyx_t_10);
           #endif
         } else {
           if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1156, __pyx_L25_error)
+          __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1155, __pyx_L25_error)
           #else
-          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1156, __pyx_L25_error)
+          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1155, __pyx_L25_error)
           __Pyx_GOTREF(__pyx_t_10);
           #endif
         }
@@ -155620,7 +155656,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(9, 1156, __pyx_L25_error)
+            else __PYX_ERR(9, 1155, __pyx_L25_error)
           }
           break;
         }
@@ -155628,9 +155664,9 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       }
       __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_n, __pyx_t_10);
       __pyx_t_10 = 0;
-      __pyx_t_10 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_qname(__pyx_v_self, __pyx_8genexpr2__pyx_v_n, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1156, __pyx_L25_error)
+      __pyx_t_10 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_qname(__pyx_v_self, __pyx_8genexpr2__pyx_v_n, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1155, __pyx_L25_error)
       __Pyx_GOTREF(__pyx_t_10);
-      if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_8genexpr2__pyx_v_n, (PyObject*)__pyx_t_10))) __PYX_ERR(9, 1156, __pyx_L25_error)
+      if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_8genexpr2__pyx_v_n, (PyObject*)__pyx_t_10))) __PYX_ERR(9, 1155, __pyx_L25_error)
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -155644,27 +155680,27 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   __pyx_v_parsed_qnames = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1160
+  /* "src/lxml/serializer.pxi":1159
  * 
  *         # Write namespace declarations in prefix order ...
  *         if new_namespaces:             # <<<<<<<<<<<<<<
  *             attr_list = [
  *                 (u'xmlns:' + prefix if prefix else u'xmlns', uri)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_new_namespaces); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1160, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_new_namespaces); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1159, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1161
+    /* "src/lxml/serializer.pxi":1160
  *         # Write namespace declarations in prefix order ...
  *         if new_namespaces:
  *             attr_list = [             # <<<<<<<<<<<<<<
  *                 (u'xmlns:' + prefix if prefix else u'xmlns', uri)
  *                 for uri, prefix in new_namespaces
  */
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1161, __pyx_L1_error)
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1160, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
 
-    /* "src/lxml/serializer.pxi":1163
+    /* "src/lxml/serializer.pxi":1162
  *             attr_list = [
  *                 (u'xmlns:' + prefix if prefix else u'xmlns', uri)
  *                 for uri, prefix in new_namespaces             # <<<<<<<<<<<<<<
@@ -155675,26 +155711,26 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __pyx_t_5 = __pyx_v_new_namespaces; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
     } else {
-      __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_new_namespaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1163, __pyx_L1_error)
+      __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_new_namespaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1162, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1163, __pyx_L1_error)
+      __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1162, __pyx_L1_error)
     }
     for (;;) {
       if (likely(!__pyx_t_9)) {
         if (likely(PyList_CheckExact(__pyx_t_5))) {
           if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_10 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1163, __pyx_L1_error)
+          __pyx_t_10 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1162, __pyx_L1_error)
           #else
-          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1163, __pyx_L1_error)
+          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1162, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_10);
           #endif
         } else {
           if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1163, __pyx_L1_error)
+          __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1162, __pyx_L1_error)
           #else
-          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1163, __pyx_L1_error)
+          __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1162, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_10);
           #endif
         }
@@ -155704,7 +155740,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(9, 1163, __pyx_L1_error)
+            else __PYX_ERR(9, 1162, __pyx_L1_error)
           }
           break;
         }
@@ -155716,7 +155752,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1163, __pyx_L1_error)
+          __PYX_ERR(9, 1162, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -155729,15 +155765,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __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(9, 1163, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1162, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1163, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1162, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_11 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1163, __pyx_L1_error)
+        __pyx_t_11 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1162, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
@@ -155745,7 +155781,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_GOTREF(__pyx_t_6);
         index = 1; __pyx_t_7 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L32_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(9, 1163, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(9, 1162, __pyx_L1_error)
         __pyx_t_12 = NULL;
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         goto __pyx_L33_unpacking_done;
@@ -155753,7 +155789,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __pyx_t_12 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1163, __pyx_L1_error)
+        __PYX_ERR(9, 1162, __pyx_L1_error)
         __pyx_L33_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_uri, __pyx_t_6);
@@ -155761,16 +155797,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "src/lxml/serializer.pxi":1162
+      /* "src/lxml/serializer.pxi":1161
  *         if new_namespaces:
  *             attr_list = [
  *                 (u'xmlns:' + prefix if prefix else u'xmlns', uri)             # <<<<<<<<<<<<<<
  *                 for uri, prefix in new_namespaces
  *             ]
  */
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1162, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1161, __pyx_L1_error)
       if (__pyx_t_1) {
-        __pyx_t_7 = PyNumber_Add(__pyx_kp_u_xmlns, __pyx_v_prefix); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1162, __pyx_L1_error)
+        __pyx_t_7 = PyNumber_Add(__pyx_kp_u_xmlns, __pyx_v_prefix); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1161, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_10 = __pyx_t_7;
         __pyx_t_7 = 0;
@@ -155778,7 +155814,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_INCREF(__pyx_n_u_xmlns_2);
         __pyx_t_10 = __pyx_n_u_xmlns_2;
       }
-      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1162, __pyx_L1_error)
+      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1161, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_10);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10);
@@ -155786,10 +155822,10 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __Pyx_GIVEREF(__pyx_v_uri);
       PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_uri);
       __pyx_t_10 = 0;
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_7))) __PYX_ERR(9, 1161, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_7))) __PYX_ERR(9, 1160, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "src/lxml/serializer.pxi":1163
+      /* "src/lxml/serializer.pxi":1162
  *             attr_list = [
  *                 (u'xmlns:' + prefix if prefix else u'xmlns', uri)
  *                 for uri, prefix in new_namespaces             # <<<<<<<<<<<<<<
@@ -155801,16 +155837,16 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     __pyx_v_attr_list = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1165
+    /* "src/lxml/serializer.pxi":1164
  *                 for uri, prefix in new_namespaces
  *             ]
  *             attr_list.sort()             # <<<<<<<<<<<<<<
  *         else:
  *             # almost always empty
  */
-    __pyx_t_13 = PyList_Sort(__pyx_v_attr_list); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1165, __pyx_L1_error)
+    __pyx_t_13 = PyList_Sort(__pyx_v_attr_list); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1164, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1160
+    /* "src/lxml/serializer.pxi":1159
  * 
  *         # Write namespace declarations in prefix order ...
  *         if new_namespaces:             # <<<<<<<<<<<<<<
@@ -155820,7 +155856,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     goto __pyx_L29;
   }
 
-  /* "src/lxml/serializer.pxi":1168
+  /* "src/lxml/serializer.pxi":1167
  *         else:
  *             # almost always empty
  *             attr_list = []             # <<<<<<<<<<<<<<
@@ -155828,31 +155864,31 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  *         # ... followed by attributes in URI+name order
  */
   /*else*/ {
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1168, __pyx_L1_error)
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1167, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_attr_list = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
   }
   __pyx_L29:;
 
-  /* "src/lxml/serializer.pxi":1171
+  /* "src/lxml/serializer.pxi":1170
  * 
  *         # ... followed by attributes in URI+name order
  *         if attrs:             # <<<<<<<<<<<<<<
  *             for k, v in sorted(attrs.items()):
  *                 if qattrs is not None and k in qattrs and v in resolved_names:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attrs); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1171, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attrs); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1170, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1172
+    /* "src/lxml/serializer.pxi":1171
  *         # ... followed by attributes in URI+name order
  *         if attrs:
  *             for k, v in sorted(attrs.items()):             # <<<<<<<<<<<<<<
  *                 if qattrs is not None and k in qattrs and v in resolved_names:
  *                     v = parsed_qnames[resolved_names[v]][0]
  */
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrs, __pyx_n_s_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1172, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrs, __pyx_n_s_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1171, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_10 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
@@ -155866,27 +155902,27 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     }
     __pyx_t_5 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
     __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-    if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1172, __pyx_L1_error)
+    if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1171, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1172, __pyx_L1_error)
+    __pyx_t_7 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1171, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_4 = ((PyObject*)__pyx_t_7);
     __pyx_t_7 = 0;
-    __pyx_t_13 = PyList_Sort(__pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1172, __pyx_L1_error)
+    __pyx_t_13 = PyList_Sort(__pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1171, __pyx_L1_error)
     if (unlikely(__pyx_t_4 == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(9, 1172, __pyx_L1_error)
+      __PYX_ERR(9, 1171, __pyx_L1_error)
     }
     __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     for (;;) {
       if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break;
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1172, __pyx_L1_error)
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1171, __pyx_L1_error)
       #else
-      __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1172, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1171, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
@@ -155895,7 +155931,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1172, __pyx_L1_error)
+          __PYX_ERR(9, 1171, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -155908,15 +155944,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_10);
         #else
-        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1172, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1171, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1172, __pyx_L1_error)
+        __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1171, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         #endif
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1172, __pyx_L1_error)
+        __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1171, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_12 = Py_TYPE(__pyx_t_6)->tp_iternext;
@@ -155924,7 +155960,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_GOTREF(__pyx_t_5);
         index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_10)) goto __pyx_L37_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_10);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < 0) __PYX_ERR(9, 1172, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < 0) __PYX_ERR(9, 1171, __pyx_L1_error)
         __pyx_t_12 = NULL;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         goto __pyx_L38_unpacking_done;
@@ -155932,7 +155968,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_12 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1172, __pyx_L1_error)
+        __PYX_ERR(9, 1171, __pyx_L1_error)
         __pyx_L38_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_5);
@@ -155940,7 +155976,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_10);
       __pyx_t_10 = 0;
 
-      /* "src/lxml/serializer.pxi":1173
+      /* "src/lxml/serializer.pxi":1172
  *         if attrs:
  *             for k, v in sorted(attrs.items()):
  *                 if qattrs is not None and k in qattrs and v in resolved_names:             # <<<<<<<<<<<<<<
@@ -155954,38 +155990,38 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __pyx_t_1 = __pyx_t_3;
         goto __pyx_L40_bool_binop_done;
       }
-      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_k, __pyx_v_qattrs, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1173, __pyx_L1_error)
+      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_k, __pyx_v_qattrs, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1172, __pyx_L1_error)
       __pyx_t_2 = (__pyx_t_3 != 0);
       if (__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L40_bool_binop_done;
       }
-      __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_v, __pyx_v_resolved_names, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1173, __pyx_L1_error)
+      __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_v, __pyx_v_resolved_names, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1172, __pyx_L1_error)
       __pyx_t_3 = (__pyx_t_2 != 0);
       __pyx_t_1 = __pyx_t_3;
       __pyx_L40_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "src/lxml/serializer.pxi":1174
+        /* "src/lxml/serializer.pxi":1173
  *             for k, v in sorted(attrs.items()):
  *                 if qattrs is not None and k in qattrs and v in resolved_names:
  *                     v = parsed_qnames[resolved_names[v]][0]             # <<<<<<<<<<<<<<
  *                 attr_qname, attr_name, uri = parsed_qnames[k]
  *                 # No prefix for attributes in default ('') namespace.
  */
-        __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_resolved_names, __pyx_v_v); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1174, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_resolved_names, __pyx_v_v); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1173, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_10 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1174, __pyx_L1_error)
+        __pyx_t_10 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1173, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_10, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1174, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_10, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1173, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_DECREF_SET(__pyx_v_v, __pyx_t_4);
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1173
+        /* "src/lxml/serializer.pxi":1172
  *         if attrs:
  *             for k, v in sorted(attrs.items()):
  *                 if qattrs is not None and k in qattrs and v in resolved_names:             # <<<<<<<<<<<<<<
@@ -155994,14 +156030,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
       }
 
-      /* "src/lxml/serializer.pxi":1175
+      /* "src/lxml/serializer.pxi":1174
  *                 if qattrs is not None and k in qattrs and v in resolved_names:
  *                     v = parsed_qnames[resolved_names[v]][0]
  *                 attr_qname, attr_name, uri = parsed_qnames[k]             # <<<<<<<<<<<<<<
  *                 # No prefix for attributes in default ('') namespace.
  *                 attr_list.append((attr_qname if uri else attr_name, v))
  */
-      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_v_k); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1175, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_v_k); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1174, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
         PyObject* sequence = __pyx_t_4;
@@ -156009,7 +156045,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1175, __pyx_L1_error)
+          __PYX_ERR(9, 1174, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -156025,17 +156061,17 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_6);
         #else
-        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1175, __pyx_L1_error)
+        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1174, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1175, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1174, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1175, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1174, __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_11 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1175, __pyx_L1_error)
+        __pyx_t_11 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1174, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
@@ -156045,7 +156081,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_GOTREF(__pyx_t_5);
         index = 2; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L43_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_6);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 3) < 0) __PYX_ERR(9, 1175, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 3) < 0) __PYX_ERR(9, 1174, __pyx_L1_error)
         __pyx_t_12 = NULL;
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         goto __pyx_L44_unpacking_done;
@@ -156053,7 +156089,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __pyx_t_12 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1175, __pyx_L1_error)
+        __PYX_ERR(9, 1174, __pyx_L1_error)
         __pyx_L44_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_attr_qname, __pyx_t_10);
@@ -156063,14 +156099,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __Pyx_XDECREF_SET(__pyx_v_uri, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":1177
+      /* "src/lxml/serializer.pxi":1176
  *                 attr_qname, attr_name, uri = parsed_qnames[k]
  *                 # No prefix for attributes in default ('') namespace.
  *                 attr_list.append((attr_qname if uri else attr_name, v))             # <<<<<<<<<<<<<<
  * 
  *         # Honour xml:space attributes.
  */
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_uri); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1177, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_uri); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1176, __pyx_L1_error)
       if (__pyx_t_1) {
         __Pyx_INCREF(__pyx_v_attr_qname);
         __pyx_t_4 = __pyx_v_attr_qname;
@@ -156078,7 +156114,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_INCREF(__pyx_v_attr_name);
         __pyx_t_4 = __pyx_v_attr_name;
       }
-      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1177, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1176, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -156086,10 +156122,10 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __Pyx_GIVEREF(__pyx_v_v);
       PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_v);
       __pyx_t_4 = 0;
-      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_attr_list, __pyx_t_6); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1177, __pyx_L1_error)
+      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_attr_list, __pyx_t_6); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1176, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":1172
+      /* "src/lxml/serializer.pxi":1171
  *         # ... followed by attributes in URI+name order
  *         if attrs:
  *             for k, v in sorted(attrs.items()):             # <<<<<<<<<<<<<<
@@ -156099,7 +156135,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "src/lxml/serializer.pxi":1171
+    /* "src/lxml/serializer.pxi":1170
  * 
  *         # ... followed by attributes in URI+name order
  *         if attrs:             # <<<<<<<<<<<<<<
@@ -156108,14 +156144,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1180
+  /* "src/lxml/serializer.pxi":1179
  * 
  *         # Honour xml:space attributes.
  *         space_behaviour = attrs.get('{http://www.w3.org/XML/1998/namespace}space')             # <<<<<<<<<<<<<<
  *         self._preserve_space.append(
  *             space_behaviour == 'preserve' if space_behaviour
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrs, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1180, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrs, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -156129,13 +156165,13 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   }
   __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_kp_s_http_www_w3_org_XML_1998_namesp) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_kp_s_http_www_w3_org_XML_1998_namesp);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1180, __pyx_L1_error)
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_space_behaviour = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1181
+  /* "src/lxml/serializer.pxi":1180
  *         # Honour xml:space attributes.
  *         space_behaviour = attrs.get('{http://www.w3.org/XML/1998/namespace}space')
  *         self._preserve_space.append(             # <<<<<<<<<<<<<<
@@ -156144,24 +156180,24 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   if (unlikely(__pyx_v_self->_preserve_space == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(9, 1181, __pyx_L1_error)
+    __PYX_ERR(9, 1180, __pyx_L1_error)
   }
 
-  /* "src/lxml/serializer.pxi":1182
+  /* "src/lxml/serializer.pxi":1181
  *         space_behaviour = attrs.get('{http://www.w3.org/XML/1998/namespace}space')
  *         self._preserve_space.append(
  *             space_behaviour == 'preserve' if space_behaviour             # <<<<<<<<<<<<<<
  *             else self._preserve_space[-1])
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_space_behaviour); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1182, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_space_behaviour); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1181, __pyx_L1_error)
   if (__pyx_t_1) {
-    __pyx_t_6 = PyObject_RichCompare(__pyx_v_space_behaviour, __pyx_n_s_preserve, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1182, __pyx_L1_error)
+    __pyx_t_6 = PyObject_RichCompare(__pyx_v_space_behaviour, __pyx_n_s_preserve, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1181, __pyx_L1_error)
     __pyx_t_7 = __pyx_t_6;
     __pyx_t_6 = 0;
   } else {
 
-    /* "src/lxml/serializer.pxi":1183
+    /* "src/lxml/serializer.pxi":1182
  *         self._preserve_space.append(
  *             space_behaviour == 'preserve' if space_behaviour
  *             else self._preserve_space[-1])             # <<<<<<<<<<<<<<
@@ -156170,25 +156206,25 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
     if (unlikely(__pyx_v_self->_preserve_space == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(9, 1183, __pyx_L1_error)
+      __PYX_ERR(9, 1182, __pyx_L1_error)
     }
-    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_self->_preserve_space, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1183, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_self->_preserve_space, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1182, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = __pyx_t_6;
     __pyx_t_6 = 0;
   }
 
-  /* "src/lxml/serializer.pxi":1181
+  /* "src/lxml/serializer.pxi":1180
  *         # Honour xml:space attributes.
  *         space_behaviour = attrs.get('{http://www.w3.org/XML/1998/namespace}space')
  *         self._preserve_space.append(             # <<<<<<<<<<<<<<
  *             space_behaviour == 'preserve' if space_behaviour
  *             else self._preserve_space[-1])
  */
-  __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_self->_preserve_space, __pyx_t_7); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1181, __pyx_L1_error)
+  __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_self->_preserve_space, __pyx_t_7); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1180, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1186
+  /* "src/lxml/serializer.pxi":1185
  * 
  *         # Write the tag.
  *         write = self._write             # <<<<<<<<<<<<<<
@@ -156200,19 +156236,19 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   __pyx_v_write = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1187
+  /* "src/lxml/serializer.pxi":1186
  *         # Write the tag.
  *         write = self._write
  *         write(u'<' + parsed_qnames[tag][0])             # <<<<<<<<<<<<<<
  *         if attr_list:
  *             write(u''.join([f' {k}="{_escape_attrib_c14n(v)}"' for k, v in attr_list]))
  */
-  __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_v_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1187, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_v_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1187, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyNumber_Add(__pyx_kp_u__70, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1187, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Add(__pyx_kp_u__70, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_INCREF(__pyx_v_write);
@@ -156229,12 +156265,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   __pyx_t_7 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1187, __pyx_L1_error)
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1188
+  /* "src/lxml/serializer.pxi":1187
  *         write = self._write
  *         write(u'<' + parsed_qnames[tag][0])
  *         if attr_list:             # <<<<<<<<<<<<<<
@@ -156244,22 +156280,22 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   __pyx_t_1 = (PyList_GET_SIZE(__pyx_v_attr_list) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1189
+    /* "src/lxml/serializer.pxi":1188
  *         write(u'<' + parsed_qnames[tag][0])
  *         if attr_list:
  *             write(u''.join([f' {k}="{_escape_attrib_c14n(v)}"' for k, v in attr_list]))             # <<<<<<<<<<<<<<
  *         write(u'>')
  * 
  */
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1189, __pyx_L1_error)
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = __pyx_v_attr_list; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0;
     for (;;) {
       if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_6)) break;
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 1188, __pyx_L1_error)
       #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -156268,7 +156304,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1189, __pyx_L1_error)
+          __PYX_ERR(9, 1188, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -156281,15 +156317,15 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_INCREF(__pyx_t_10);
         __Pyx_INCREF(__pyx_t_11);
         #else
-        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1189, __pyx_L1_error)
+        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1188, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1189, __pyx_L1_error)
+        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1188, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         #endif
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_14 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_14)) __PYX_ERR(9, 1189, __pyx_L1_error)
+        __pyx_t_14 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_14)) __PYX_ERR(9, 1188, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_14);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_12 = Py_TYPE(__pyx_t_14)->tp_iternext;
@@ -156297,7 +156333,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_GOTREF(__pyx_t_10);
         index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_14); if (unlikely(!__pyx_t_11)) goto __pyx_L48_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_11);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_14), 2) < 0) __PYX_ERR(9, 1189, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_14), 2) < 0) __PYX_ERR(9, 1188, __pyx_L1_error)
         __pyx_t_12 = NULL;
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
         goto __pyx_L49_unpacking_done;
@@ -156305,14 +156341,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
         __pyx_t_12 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1189, __pyx_L1_error)
+        __PYX_ERR(9, 1188, __pyx_L1_error)
         __pyx_L49_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_10);
       __pyx_t_10 = 0;
       __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_11);
       __pyx_t_11 = 0;
-      __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_15 = 0;
       __pyx_t_16 = 127;
@@ -156320,7 +156356,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __pyx_t_15 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__11);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u__11);
-      __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_v_k, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_v_k, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_16;
       __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
@@ -156331,9 +156367,9 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __pyx_t_15 += 2;
       __Pyx_GIVEREF(__pyx_kp_u__71);
       PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__71);
-      __pyx_t_11 = __pyx_f_4lxml_5etree__escape_attrib_c14n(__pyx_v_v); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_11 = __pyx_f_4lxml_5etree__escape_attrib_c14n(__pyx_v_v); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_16;
@@ -156345,14 +156381,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
       __pyx_t_15 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__23);
       PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__23);
-      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1189, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_10))) __PYX_ERR(9, 1189, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_10))) __PYX_ERR(9, 1188, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyUnicode_Join(__pyx_kp_u__12, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1189, __pyx_L1_error)
+    __pyx_t_6 = PyUnicode_Join(__pyx_kp_u__12, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_INCREF(__pyx_v_write);
@@ -156369,12 +156405,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6);
     __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1189, __pyx_L1_error)
+    if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "src/lxml/serializer.pxi":1188
+    /* "src/lxml/serializer.pxi":1187
  *         write = self._write
  *         write(u'<' + parsed_qnames[tag][0])
  *         if attr_list:             # <<<<<<<<<<<<<<
@@ -156383,7 +156419,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1190
+  /* "src/lxml/serializer.pxi":1189
  *         if attr_list:
  *             write(u''.join([f' {k}="{_escape_attrib_c14n(v)}"' for k, v in attr_list]))
  *         write(u'>')             # <<<<<<<<<<<<<<
@@ -156403,12 +156439,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   }
   __pyx_t_7 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_kp_u__26) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u__26);
   __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1190, __pyx_L1_error)
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1193
+  /* "src/lxml/serializer.pxi":1192
  * 
  *         # Write the resolved qname text content.
  *         if qname_text is not None:             # <<<<<<<<<<<<<<
@@ -156419,22 +156455,22 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":1194
+    /* "src/lxml/serializer.pxi":1193
  *         # Write the resolved qname text content.
  *         if qname_text is not None:
  *             write(_escape_cdata_c14n(parsed_qnames[resolved_names[qname_text]][0]))             # <<<<<<<<<<<<<<
  * 
  *         self._root_seen = True
  */
-    __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_resolved_names, __pyx_v_qname_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1194, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_resolved_names, __pyx_v_qname_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1194, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_parsed_qnames, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1194, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1194, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_INCREF(__pyx_v_write);
@@ -156451,12 +156487,12 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
     __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6);
     __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1194, __pyx_L1_error)
+    if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "src/lxml/serializer.pxi":1193
+    /* "src/lxml/serializer.pxi":1192
  * 
  *         # Write the resolved qname text content.
  *         if qname_text is not None:             # <<<<<<<<<<<<<<
@@ -156465,7 +156501,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1196
+  /* "src/lxml/serializer.pxi":1195
  *             write(_escape_cdata_c14n(parsed_qnames[resolved_names[qname_text]][0]))
  * 
  *         self._root_seen = True             # <<<<<<<<<<<<<<
@@ -156474,7 +156510,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   __pyx_v_self->_root_seen = 1;
 
-  /* "src/lxml/serializer.pxi":1197
+  /* "src/lxml/serializer.pxi":1196
  * 
  *         self._root_seen = True
  *         self._ns_stack.append([])             # <<<<<<<<<<<<<<
@@ -156483,14 +156519,14 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
  */
   if (unlikely(__pyx_v_self->_ns_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(9, 1197, __pyx_L1_error)
+    __PYX_ERR(9, 1196, __pyx_L1_error)
   }
-  __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1197, __pyx_L1_error)
+  __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_self->_ns_stack, __pyx_t_7); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1197, __pyx_L1_error)
+  __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_self->_ns_stack, __pyx_t_7); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1196, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1131
+  /* "src/lxml/serializer.pxi":1130
  *         self._start(tag, attrs, new_namespaces)
  * 
  *     cdef _start(self, tag, attrs, new_namespaces, qname_text=None):             # <<<<<<<<<<<<<<
@@ -156536,7 +156572,7 @@ static PyObject *__pyx_f_4lxml_5etree_16C14NWriterTarget__start(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1199
+/* "src/lxml/serializer.pxi":1198
  *         self._ns_stack.append([])
  * 
  *     def end(self, tag):             # <<<<<<<<<<<<<<
@@ -156573,7 +156609,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("end", 0);
 
-  /* "src/lxml/serializer.pxi":1200
+  /* "src/lxml/serializer.pxi":1199
  * 
  *     def end(self, tag):
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -156583,7 +156619,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   __pyx_t_1 = (__pyx_v_self->_ignored_depth != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1201
+    /* "src/lxml/serializer.pxi":1200
  *     def end(self, tag):
  *         if self._ignored_depth:
  *             self._ignored_depth -= 1             # <<<<<<<<<<<<<<
@@ -156592,7 +156628,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
  */
     __pyx_v_self->_ignored_depth = (__pyx_v_self->_ignored_depth - 1);
 
-    /* "src/lxml/serializer.pxi":1202
+    /* "src/lxml/serializer.pxi":1201
  *         if self._ignored_depth:
  *             self._ignored_depth -= 1
  *             return             # <<<<<<<<<<<<<<
@@ -156603,7 +156639,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1200
+    /* "src/lxml/serializer.pxi":1199
  * 
  *     def end(self, tag):
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -156612,7 +156648,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1203
+  /* "src/lxml/serializer.pxi":1202
  *             self._ignored_depth -= 1
  *             return
  *         if self._data:             # <<<<<<<<<<<<<<
@@ -156622,18 +156658,18 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   __pyx_t_1 = (__pyx_v_self->_data != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_data) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1204
+    /* "src/lxml/serializer.pxi":1203
  *             return
  *         if self._data:
  *             self._flush()             # <<<<<<<<<<<<<<
  *         self._write(f'</{self._qname(tag)[0]}>')
  *         self._preserve_space.pop()
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1204, __pyx_L1_error)
+    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1203, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1203
+    /* "src/lxml/serializer.pxi":1202
  *             self._ignored_depth -= 1
  *             return
  *         if self._data:             # <<<<<<<<<<<<<<
@@ -156642,14 +156678,14 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
  */
   }
 
-  /* "src/lxml/serializer.pxi":1205
+  /* "src/lxml/serializer.pxi":1204
  *         if self._data:
  *             self._flush()
  *         self._write(f'</{self._qname(tag)[0]}>')             # <<<<<<<<<<<<<<
  *         self._preserve_space.pop()
  *         self._root_done = len(self._preserve_space) == 1
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1205, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = 0;
   __pyx_t_5 = 127;
@@ -156657,12 +156693,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   __pyx_t_4 += 2;
   __Pyx_GIVEREF(__pyx_kp_u__72);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u__72);
-  __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_qname(__pyx_v_self, __pyx_v_tag, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1205, __pyx_L1_error)
+  __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_qname(__pyx_v_self, __pyx_v_tag, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1205, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1205, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
@@ -156674,7 +156710,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   __pyx_t_4 += 1;
   __Pyx_GIVEREF(__pyx_kp_u__26);
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__26);
-  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1205, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_INCREF(__pyx_v_self->_write);
@@ -156691,12 +156727,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1205, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1206
+  /* "src/lxml/serializer.pxi":1205
  *             self._flush()
  *         self._write(f'</{self._qname(tag)[0]}>')
  *         self._preserve_space.pop()             # <<<<<<<<<<<<<<
@@ -156705,13 +156741,13 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
  */
   if (unlikely(__pyx_v_self->_preserve_space == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
-    __PYX_ERR(9, 1206, __pyx_L1_error)
+    __PYX_ERR(9, 1205, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_self->_preserve_space); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1206, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_self->_preserve_space); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1207
+  /* "src/lxml/serializer.pxi":1206
  *         self._write(f'</{self._qname(tag)[0]}>')
  *         self._preserve_space.pop()
  *         self._root_done = len(self._preserve_space) == 1             # <<<<<<<<<<<<<<
@@ -156722,13 +156758,13 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   __Pyx_INCREF(__pyx_t_2);
   if (unlikely(__pyx_t_2 == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(9, 1207, __pyx_L1_error)
+    __PYX_ERR(9, 1206, __pyx_L1_error)
   }
-  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1207, __pyx_L1_error)
+  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1206, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_self->_root_done = (__pyx_t_4 == 1);
 
-  /* "src/lxml/serializer.pxi":1208
+  /* "src/lxml/serializer.pxi":1207
  *         self._preserve_space.pop()
  *         self._root_done = len(self._preserve_space) == 1
  *         self._declared_ns_stack.pop()             # <<<<<<<<<<<<<<
@@ -156737,13 +156773,13 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
  */
   if (unlikely(__pyx_v_self->_declared_ns_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
-    __PYX_ERR(9, 1208, __pyx_L1_error)
+    __PYX_ERR(9, 1207, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_self->_declared_ns_stack); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1208, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_self->_declared_ns_stack); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1207, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1209
+  /* "src/lxml/serializer.pxi":1208
  *         self._root_done = len(self._preserve_space) == 1
  *         self._declared_ns_stack.pop()
  *         self._ns_stack.pop()             # <<<<<<<<<<<<<<
@@ -156752,13 +156788,13 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
  */
   if (unlikely(__pyx_v_self->_ns_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
-    __PYX_ERR(9, 1209, __pyx_L1_error)
+    __PYX_ERR(9, 1208, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_self->_ns_stack); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1209, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_self->_ns_stack); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1199
+  /* "src/lxml/serializer.pxi":1198
  *         self._ns_stack.append([])
  * 
  *     def end(self, tag):             # <<<<<<<<<<<<<<
@@ -156782,7 +156818,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_11end(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1211
+/* "src/lxml/serializer.pxi":1210
  *         self._ns_stack.pop()
  * 
  *     def comment(self, text):             # <<<<<<<<<<<<<<
@@ -156820,7 +156856,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("comment", 0);
 
-  /* "src/lxml/serializer.pxi":1212
+  /* "src/lxml/serializer.pxi":1211
  * 
  *     def comment(self, text):
  *         if not self._with_comments:             # <<<<<<<<<<<<<<
@@ -156830,7 +156866,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_1 = ((!(__pyx_v_self->_with_comments != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1213
+    /* "src/lxml/serializer.pxi":1212
  *     def comment(self, text):
  *         if not self._with_comments:
  *             return             # <<<<<<<<<<<<<<
@@ -156841,7 +156877,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1212
+    /* "src/lxml/serializer.pxi":1211
  * 
  *     def comment(self, text):
  *         if not self._with_comments:             # <<<<<<<<<<<<<<
@@ -156850,7 +156886,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
  */
   }
 
-  /* "src/lxml/serializer.pxi":1214
+  /* "src/lxml/serializer.pxi":1213
  *         if not self._with_comments:
  *             return
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -156860,7 +156896,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_1 = (__pyx_v_self->_ignored_depth != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1215
+    /* "src/lxml/serializer.pxi":1214
  *             return
  *         if self._ignored_depth:
  *             return             # <<<<<<<<<<<<<<
@@ -156871,7 +156907,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1214
+    /* "src/lxml/serializer.pxi":1213
  *         if not self._with_comments:
  *             return
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -156880,7 +156916,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
  */
   }
 
-  /* "src/lxml/serializer.pxi":1216
+  /* "src/lxml/serializer.pxi":1215
  *         if self._ignored_depth:
  *             return
  *         if self._root_done:             # <<<<<<<<<<<<<<
@@ -156890,7 +156926,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_1 = (__pyx_v_self->_root_done != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1217
+    /* "src/lxml/serializer.pxi":1216
  *             return
  *         if self._root_done:
  *             self._write(u'\n')             # <<<<<<<<<<<<<<
@@ -156910,12 +156946,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_u__19) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u__19);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1217, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1216, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1216
+    /* "src/lxml/serializer.pxi":1215
  *         if self._ignored_depth:
  *             return
  *         if self._root_done:             # <<<<<<<<<<<<<<
@@ -156925,7 +156961,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
     goto __pyx_L5;
   }
 
-  /* "src/lxml/serializer.pxi":1218
+  /* "src/lxml/serializer.pxi":1217
  *         if self._root_done:
  *             self._write(u'\n')
  *         elif self._root_seen and self._data:             # <<<<<<<<<<<<<<
@@ -156943,18 +156979,18 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1219
+    /* "src/lxml/serializer.pxi":1218
  *             self._write(u'\n')
  *         elif self._root_seen and self._data:
  *             self._flush()             # <<<<<<<<<<<<<<
  *         self._write(f'<!--{_escape_cdata_c14n(text)}-->')
  *         if not self._root_seen:
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1219, __pyx_L1_error)
+    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1218
+    /* "src/lxml/serializer.pxi":1217
  *         if self._root_done:
  *             self._write(u'\n')
  *         elif self._root_seen and self._data:             # <<<<<<<<<<<<<<
@@ -156964,14 +157000,14 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   }
   __pyx_L5:;
 
-  /* "src/lxml/serializer.pxi":1220
+  /* "src/lxml/serializer.pxi":1219
  *         elif self._root_seen and self._data:
  *             self._flush()
  *         self._write(f'<!--{_escape_cdata_c14n(text)}-->')             # <<<<<<<<<<<<<<
  *         if not self._root_seen:
  *             self._write(u'\n')
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1220, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_6 = 0;
   __pyx_t_7 = 127;
@@ -156979,9 +157015,9 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_6 += 4;
   __Pyx_GIVEREF(__pyx_kp_u__73);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u__73);
-  __pyx_t_4 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_v_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1220, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_v_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1220, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_7;
@@ -156993,7 +157029,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_6 += 3;
   __Pyx_GIVEREF(__pyx_kp_u__74);
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__74);
-  __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1220, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_INCREF(__pyx_v_self->_write);
@@ -157010,12 +157046,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1220, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1221
+  /* "src/lxml/serializer.pxi":1220
  *             self._flush()
  *         self._write(f'<!--{_escape_cdata_c14n(text)}-->')
  *         if not self._root_seen:             # <<<<<<<<<<<<<<
@@ -157025,7 +157061,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   __pyx_t_1 = ((!(__pyx_v_self->_root_seen != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1222
+    /* "src/lxml/serializer.pxi":1221
  *         self._write(f'<!--{_escape_cdata_c14n(text)}-->')
  *         if not self._root_seen:
  *             self._write(u'\n')             # <<<<<<<<<<<<<<
@@ -157045,12 +157081,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
     }
     __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_kp_u__19) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u__19);
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1222, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1221, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1221
+    /* "src/lxml/serializer.pxi":1220
  *             self._flush()
  *         self._write(f'<!--{_escape_cdata_c14n(text)}-->')
  *         if not self._root_seen:             # <<<<<<<<<<<<<<
@@ -157059,7 +157095,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
  */
   }
 
-  /* "src/lxml/serializer.pxi":1211
+  /* "src/lxml/serializer.pxi":1210
  *         self._ns_stack.pop()
  * 
  *     def comment(self, text):             # <<<<<<<<<<<<<<
@@ -157083,7 +157119,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_13comment(struct __pyx
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1224
+/* "src/lxml/serializer.pxi":1223
  *             self._write(u'\n')
  * 
  *     def pi(self, target, data):             # <<<<<<<<<<<<<<
@@ -157126,11 +157162,11 @@ static PyObject *__pyx_pw_4lxml_5etree_16C14NWriterTarget_16pi(PyObject *__pyx_v
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("pi", 1, 2, 2, 1); __PYX_ERR(9, 1224, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("pi", 1, 2, 2, 1); __PYX_ERR(9, 1223, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pi") < 0)) __PYX_ERR(9, 1224, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pi") < 0)) __PYX_ERR(9, 1223, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -157143,7 +157179,7 @@ static PyObject *__pyx_pw_4lxml_5etree_16C14NWriterTarget_16pi(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pi", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1224, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("pi", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1223, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.C14NWriterTarget.pi", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -157173,7 +157209,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pi", 0);
 
-  /* "src/lxml/serializer.pxi":1225
+  /* "src/lxml/serializer.pxi":1224
  * 
  *     def pi(self, target, data):
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -157183,7 +157219,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   __pyx_t_1 = (__pyx_v_self->_ignored_depth != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1226
+    /* "src/lxml/serializer.pxi":1225
  *     def pi(self, target, data):
  *         if self._ignored_depth:
  *             return             # <<<<<<<<<<<<<<
@@ -157194,7 +157230,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1225
+    /* "src/lxml/serializer.pxi":1224
  * 
  *     def pi(self, target, data):
  *         if self._ignored_depth:             # <<<<<<<<<<<<<<
@@ -157203,7 +157239,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
  */
   }
 
-  /* "src/lxml/serializer.pxi":1227
+  /* "src/lxml/serializer.pxi":1226
  *         if self._ignored_depth:
  *             return
  *         if self._root_done:             # <<<<<<<<<<<<<<
@@ -157213,7 +157249,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   __pyx_t_1 = (__pyx_v_self->_root_done != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1228
+    /* "src/lxml/serializer.pxi":1227
  *             return
  *         if self._root_done:
  *             self._write(u'\n')             # <<<<<<<<<<<<<<
@@ -157233,12 +157269,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_u__19) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u__19);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1228, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1227, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1227
+    /* "src/lxml/serializer.pxi":1226
  *         if self._ignored_depth:
  *             return
  *         if self._root_done:             # <<<<<<<<<<<<<<
@@ -157248,7 +157284,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     goto __pyx_L4;
   }
 
-  /* "src/lxml/serializer.pxi":1229
+  /* "src/lxml/serializer.pxi":1228
  *         if self._root_done:
  *             self._write(u'\n')
  *         elif self._root_seen and self._data:             # <<<<<<<<<<<<<<
@@ -157266,18 +157302,18 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1230
+    /* "src/lxml/serializer.pxi":1229
  *             self._write(u'\n')
  *         elif self._root_seen and self._data:
  *             self._flush()             # <<<<<<<<<<<<<<
  *         self._write(
  *             f'<?{target} {_escape_cdata_c14n(data)}?>' if data else f'<?{target}?>')
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1230, __pyx_L1_error)
+    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree_C14NWriterTarget *)__pyx_v_self->__pyx_vtab)->_flush(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1229, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1229
+    /* "src/lxml/serializer.pxi":1228
  *         if self._root_done:
  *             self._write(u'\n')
  *         elif self._root_seen and self._data:             # <<<<<<<<<<<<<<
@@ -157287,16 +157323,16 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   }
   __pyx_L4:;
 
-  /* "src/lxml/serializer.pxi":1232
+  /* "src/lxml/serializer.pxi":1231
  *             self._flush()
  *         self._write(
  *             f'<?{target} {_escape_cdata_c14n(data)}?>' if data else f'<?{target}?>')             # <<<<<<<<<<<<<<
  *         if not self._root_seen:
  *             self._write(u'\n')
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_data); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1232, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_data); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1231, __pyx_L1_error)
   if (__pyx_t_1) {
-    __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = 0;
     __pyx_t_7 = 127;
@@ -157304,7 +157340,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     __pyx_t_6 += 2;
     __Pyx_GIVEREF(__pyx_kp_u__75);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u__75);
-    __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_target, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_target, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_7;
     __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
@@ -157315,9 +157351,9 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     __pyx_t_6 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__11);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__11);
-    __pyx_t_8 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_v_data); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_8 = __pyx_f_4lxml_5etree__escape_cdata_c14n(__pyx_v_data); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_7;
@@ -157329,13 +157365,13 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     __pyx_t_6 += 2;
     __Pyx_GIVEREF(__pyx_kp_u__48);
     PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u__48);
-    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_3 = __pyx_t_9;
     __pyx_t_9 = 0;
   } else {
-    __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_6 = 0;
     __pyx_t_7 = 127;
@@ -157343,7 +157379,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     __pyx_t_6 += 2;
     __Pyx_GIVEREF(__pyx_kp_u__75);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u__75);
-    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_target, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_target, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_7;
     __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -157354,7 +157390,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     __pyx_t_6 += 2;
     __Pyx_GIVEREF(__pyx_kp_u__48);
     PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u__48);
-    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1232, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1231, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __pyx_t_3 = __pyx_t_4;
@@ -157374,12 +157410,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_9, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
   __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1231, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1230, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1233
+  /* "src/lxml/serializer.pxi":1232
  *         self._write(
  *             f'<?{target} {_escape_cdata_c14n(data)}?>' if data else f'<?{target}?>')
  *         if not self._root_seen:             # <<<<<<<<<<<<<<
@@ -157389,7 +157425,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   __pyx_t_1 = ((!(__pyx_v_self->_root_seen != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1234
+    /* "src/lxml/serializer.pxi":1233
  *             f'<?{target} {_escape_cdata_c14n(data)}?>' if data else f'<?{target}?>')
  *         if not self._root_seen:
  *             self._write(u'\n')             # <<<<<<<<<<<<<<
@@ -157409,12 +157445,12 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
     }
     __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_kp_u__19) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u__19);
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1234, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1233, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1233
+    /* "src/lxml/serializer.pxi":1232
  *         self._write(
  *             f'<?{target} {_escape_cdata_c14n(data)}?>' if data else f'<?{target}?>')
  *         if not self._root_seen:             # <<<<<<<<<<<<<<
@@ -157423,7 +157459,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
  */
   }
 
-  /* "src/lxml/serializer.pxi":1224
+  /* "src/lxml/serializer.pxi":1223
  *             self._write(u'\n')
  * 
  *     def pi(self, target, data):             # <<<<<<<<<<<<<<
@@ -157448,7 +157484,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_15pi(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1236
+/* "src/lxml/serializer.pxi":1235
  *             self._write(u'\n')
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -157475,7 +157511,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_17close(CYTHON_UNUSED
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "src/lxml/serializer.pxi":1237
+  /* "src/lxml/serializer.pxi":1236
  * 
  *     def close(self):
  *         return None             # <<<<<<<<<<<<<<
@@ -157486,7 +157522,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_17close(CYTHON_UNUSED
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1236
+  /* "src/lxml/serializer.pxi":1235
  *             self._write(u'\n')
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -157501,7 +157537,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16C14NWriterTarget_17close(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1240
+/* "src/lxml/serializer.pxi":1239
  * 
  * 
  * cdef _raise_serialization_error(text):             # <<<<<<<<<<<<<<
@@ -157519,16 +157555,16 @@ static PyObject *__pyx_f_4lxml_5etree__raise_serialization_error(PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_raise_serialization_error", 0);
 
-  /* "src/lxml/serializer.pxi":1241
+  /* "src/lxml/serializer.pxi":1240
  * 
  * cdef _raise_serialization_error(text):
  *     raise TypeError("cannot serialize %r (type %s)" % (text, type(text).__name__))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_text)), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1241, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_text)), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1241, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_text);
   __Pyx_GIVEREF(__pyx_v_text);
@@ -157536,17 +157572,17 @@ static PyObject *__pyx_f_4lxml_5etree__raise_serialization_error(PyObject *__pyx
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_cannot_serialize_r_type_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1241, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_cannot_serialize_r_type_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1241, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_Raise(__pyx_t_2, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __PYX_ERR(9, 1241, __pyx_L1_error)
+  __PYX_ERR(9, 1240, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1240
+  /* "src/lxml/serializer.pxi":1239
  * 
  * 
  * cdef _raise_serialization_error(text):             # <<<<<<<<<<<<<<
@@ -157565,7 +157601,7 @@ static PyObject *__pyx_f_4lxml_5etree__raise_serialization_error(PyObject *__pyx
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1244
+/* "src/lxml/serializer.pxi":1243
  * 
  * 
  * cdef unicode _escape_cdata_c14n(stext):             # <<<<<<<<<<<<<<
@@ -157592,7 +157628,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_escape_cdata_c14n", 0);
 
-  /* "src/lxml/serializer.pxi":1247
+  /* "src/lxml/serializer.pxi":1246
  *     # escape character data
  *     cdef unicode text
  *     try:             # <<<<<<<<<<<<<<
@@ -157608,42 +157644,42 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "src/lxml/serializer.pxi":1251
+      /* "src/lxml/serializer.pxi":1250
  *         # shorter than 500 character, or so.  assume that's, by far,
  *         # the most common case in most applications.
  *         text = unicode(stext)             # <<<<<<<<<<<<<<
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')
  */
-      __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_stext); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1251, __pyx_L3_error)
+      __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_stext); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1250, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_v_text = ((PyObject*)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "src/lxml/serializer.pxi":1252
+      /* "src/lxml/serializer.pxi":1251
  *         # the most common case in most applications.
  *         text = unicode(stext)
  *         if u'&' in text:             # <<<<<<<<<<<<<<
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:
  */
-      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__29, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1252, __pyx_L3_error)
+      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__29, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1251, __pyx_L3_error)
       __pyx_t_6 = (__pyx_t_5 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":1253
+        /* "src/lxml/serializer.pxi":1252
  *         text = unicode(stext)
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')             # <<<<<<<<<<<<<<
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')
  */
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__29, __pyx_kp_u_amp, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1253, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__29, __pyx_kp_u_amp, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1252, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1252
+        /* "src/lxml/serializer.pxi":1251
  *         # the most common case in most applications.
  *         text = unicode(stext)
  *         if u'&' in text:             # <<<<<<<<<<<<<<
@@ -157652,7 +157688,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       }
 
-      /* "src/lxml/serializer.pxi":1254
+      /* "src/lxml/serializer.pxi":1253
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:             # <<<<<<<<<<<<<<
@@ -157661,13 +157697,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1254, __pyx_L3_error)
+        __PYX_ERR(9, 1253, __pyx_L3_error)
       }
-      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__70, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1254, __pyx_L3_error)
+      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__70, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1253, __pyx_L3_error)
       __pyx_t_5 = (__pyx_t_6 != 0);
       if (__pyx_t_5) {
 
-        /* "src/lxml/serializer.pxi":1255
+        /* "src/lxml/serializer.pxi":1254
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')             # <<<<<<<<<<<<<<
@@ -157676,14 +157712,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1255, __pyx_L3_error)
+          __PYX_ERR(9, 1254, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__70, __pyx_kp_u_lt, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1255, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__70, __pyx_kp_u_lt, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1254, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1254
+        /* "src/lxml/serializer.pxi":1253
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:             # <<<<<<<<<<<<<<
@@ -157692,7 +157728,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       }
 
-      /* "src/lxml/serializer.pxi":1256
+      /* "src/lxml/serializer.pxi":1255
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')
  *         if u'>' in text:             # <<<<<<<<<<<<<<
@@ -157701,13 +157737,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1256, __pyx_L3_error)
+        __PYX_ERR(9, 1255, __pyx_L3_error)
       }
-      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__26, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1256, __pyx_L3_error)
+      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__26, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1255, __pyx_L3_error)
       __pyx_t_6 = (__pyx_t_5 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":1257
+        /* "src/lxml/serializer.pxi":1256
  *             text = text.replace(u'<', u'&lt;')
  *         if u'>' in text:
  *             text = text.replace(u'>', u'&gt;')             # <<<<<<<<<<<<<<
@@ -157716,14 +157752,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1257, __pyx_L3_error)
+          __PYX_ERR(9, 1256, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__26, __pyx_kp_u_gt, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1257, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__26, __pyx_kp_u_gt, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1256, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1256
+        /* "src/lxml/serializer.pxi":1255
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')
  *         if u'>' in text:             # <<<<<<<<<<<<<<
@@ -157732,7 +157768,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       }
 
-      /* "src/lxml/serializer.pxi":1258
+      /* "src/lxml/serializer.pxi":1257
  *         if u'>' in text:
  *             text = text.replace(u'>', u'&gt;')
  *         if u'\r' in text:             # <<<<<<<<<<<<<<
@@ -157741,13 +157777,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1258, __pyx_L3_error)
+        __PYX_ERR(9, 1257, __pyx_L3_error)
       }
-      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__76, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1258, __pyx_L3_error)
+      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__76, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1257, __pyx_L3_error)
       __pyx_t_5 = (__pyx_t_6 != 0);
       if (__pyx_t_5) {
 
-        /* "src/lxml/serializer.pxi":1259
+        /* "src/lxml/serializer.pxi":1258
  *             text = text.replace(u'>', u'&gt;')
  *         if u'\r' in text:
  *             text = text.replace(u'\r', u'&#xD;')             # <<<<<<<<<<<<<<
@@ -157756,14 +157792,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1259, __pyx_L3_error)
+          __PYX_ERR(9, 1258, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__76, __pyx_kp_u_xD, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1259, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__76, __pyx_kp_u_xD, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1258, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1258
+        /* "src/lxml/serializer.pxi":1257
  *         if u'>' in text:
  *             text = text.replace(u'>', u'&gt;')
  *         if u'\r' in text:             # <<<<<<<<<<<<<<
@@ -157772,7 +157808,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
  */
       }
 
-      /* "src/lxml/serializer.pxi":1260
+      /* "src/lxml/serializer.pxi":1259
  *         if u'\r' in text:
  *             text = text.replace(u'\r', u'&#xD;')
  *         return text             # <<<<<<<<<<<<<<
@@ -157784,7 +157820,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
       __pyx_r = __pyx_v_text;
       goto __pyx_L7_try_return;
 
-      /* "src/lxml/serializer.pxi":1247
+      /* "src/lxml/serializer.pxi":1246
  *     # escape character data
  *     cdef unicode text
  *     try:             # <<<<<<<<<<<<<<
@@ -157795,7 +157831,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
     __pyx_L3_error:;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1261
+    /* "src/lxml/serializer.pxi":1260
  *             text = text.replace(u'\r', u'&#xD;')
  *         return text
  *     except (TypeError, AttributeError):             # <<<<<<<<<<<<<<
@@ -157805,19 +157841,19 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
     __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
     if (__pyx_t_7) {
       __Pyx_AddTraceback("lxml.etree._escape_cdata_c14n", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(9, 1261, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(9, 1260, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "src/lxml/serializer.pxi":1262
+      /* "src/lxml/serializer.pxi":1261
  *         return text
  *     except (TypeError, AttributeError):
  *         _raise_serialization_error(stext)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-      __pyx_t_10 = __pyx_f_4lxml_5etree__raise_serialization_error(__pyx_v_stext); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1262, __pyx_L5_except_error)
+      __pyx_t_10 = __pyx_f_4lxml_5etree__raise_serialization_error(__pyx_v_stext); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1261, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -157828,7 +157864,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "src/lxml/serializer.pxi":1247
+    /* "src/lxml/serializer.pxi":1246
  *     # escape character data
  *     cdef unicode text
  *     try:             # <<<<<<<<<<<<<<
@@ -157853,7 +157889,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
   }
 
-  /* "src/lxml/serializer.pxi":1244
+  /* "src/lxml/serializer.pxi":1243
  * 
  * 
  * cdef unicode _escape_cdata_c14n(stext):             # <<<<<<<<<<<<<<
@@ -157878,7 +157914,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_cdata_c14n(PyObject *__pyx_v_stext
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1265
+/* "src/lxml/serializer.pxi":1264
  * 
  * 
  * cdef unicode _escape_attrib_c14n(stext):             # <<<<<<<<<<<<<<
@@ -157905,7 +157941,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_escape_attrib_c14n", 0);
 
-  /* "src/lxml/serializer.pxi":1268
+  /* "src/lxml/serializer.pxi":1267
  *     # escape attribute value
  *     cdef unicode text
  *     try:             # <<<<<<<<<<<<<<
@@ -157921,42 +157957,42 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "src/lxml/serializer.pxi":1269
+      /* "src/lxml/serializer.pxi":1268
  *     cdef unicode text
  *     try:
  *         text = unicode(stext)             # <<<<<<<<<<<<<<
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')
  */
-      __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_stext); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1269, __pyx_L3_error)
+      __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_stext); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1268, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_v_text = ((PyObject*)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "src/lxml/serializer.pxi":1270
+      /* "src/lxml/serializer.pxi":1269
  *     try:
  *         text = unicode(stext)
  *         if u'&' in text:             # <<<<<<<<<<<<<<
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:
  */
-      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__29, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1270, __pyx_L3_error)
+      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__29, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1269, __pyx_L3_error)
       __pyx_t_6 = (__pyx_t_5 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":1271
+        /* "src/lxml/serializer.pxi":1270
  *         text = unicode(stext)
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')             # <<<<<<<<<<<<<<
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')
  */
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__29, __pyx_kp_u_amp, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1271, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__29, __pyx_kp_u_amp, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1270, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1270
+        /* "src/lxml/serializer.pxi":1269
  *     try:
  *         text = unicode(stext)
  *         if u'&' in text:             # <<<<<<<<<<<<<<
@@ -157965,7 +158001,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       }
 
-      /* "src/lxml/serializer.pxi":1272
+      /* "src/lxml/serializer.pxi":1271
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:             # <<<<<<<<<<<<<<
@@ -157974,13 +158010,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1272, __pyx_L3_error)
+        __PYX_ERR(9, 1271, __pyx_L3_error)
       }
-      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__70, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1272, __pyx_L3_error)
+      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__70, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1271, __pyx_L3_error)
       __pyx_t_5 = (__pyx_t_6 != 0);
       if (__pyx_t_5) {
 
-        /* "src/lxml/serializer.pxi":1273
+        /* "src/lxml/serializer.pxi":1272
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')             # <<<<<<<<<<<<<<
@@ -157989,14 +158025,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1273, __pyx_L3_error)
+          __PYX_ERR(9, 1272, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__70, __pyx_kp_u_lt, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1273, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__70, __pyx_kp_u_lt, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1272, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1272
+        /* "src/lxml/serializer.pxi":1271
  *         if u'&' in text:
  *             text = text.replace(u'&', u'&amp;')
  *         if u'<' in text:             # <<<<<<<<<<<<<<
@@ -158005,7 +158041,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       }
 
-      /* "src/lxml/serializer.pxi":1274
+      /* "src/lxml/serializer.pxi":1273
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')
  *         if u'"' in text:             # <<<<<<<<<<<<<<
@@ -158014,13 +158050,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1274, __pyx_L3_error)
+        __PYX_ERR(9, 1273, __pyx_L3_error)
       }
-      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__23, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1274, __pyx_L3_error)
+      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__23, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1273, __pyx_L3_error)
       __pyx_t_6 = (__pyx_t_5 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":1275
+        /* "src/lxml/serializer.pxi":1274
  *             text = text.replace(u'<', u'&lt;')
  *         if u'"' in text:
  *             text = text.replace(u'"', u'&quot;')             # <<<<<<<<<<<<<<
@@ -158029,14 +158065,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1275, __pyx_L3_error)
+          __PYX_ERR(9, 1274, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__23, __pyx_kp_u_quot, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1275, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__23, __pyx_kp_u_quot, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1274, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1274
+        /* "src/lxml/serializer.pxi":1273
  *         if u'<' in text:
  *             text = text.replace(u'<', u'&lt;')
  *         if u'"' in text:             # <<<<<<<<<<<<<<
@@ -158045,7 +158081,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       }
 
-      /* "src/lxml/serializer.pxi":1276
+      /* "src/lxml/serializer.pxi":1275
  *         if u'"' in text:
  *             text = text.replace(u'"', u'&quot;')
  *         if u'\t' in text:             # <<<<<<<<<<<<<<
@@ -158054,13 +158090,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1276, __pyx_L3_error)
+        __PYX_ERR(9, 1275, __pyx_L3_error)
       }
-      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__77, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1276, __pyx_L3_error)
+      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__77, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1275, __pyx_L3_error)
       __pyx_t_5 = (__pyx_t_6 != 0);
       if (__pyx_t_5) {
 
-        /* "src/lxml/serializer.pxi":1277
+        /* "src/lxml/serializer.pxi":1276
  *             text = text.replace(u'"', u'&quot;')
  *         if u'\t' in text:
  *             text = text.replace(u'\t', u'&#x9;')             # <<<<<<<<<<<<<<
@@ -158069,14 +158105,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1277, __pyx_L3_error)
+          __PYX_ERR(9, 1276, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__77, __pyx_kp_u_x9, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1277, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__77, __pyx_kp_u_x9, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1276, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1276
+        /* "src/lxml/serializer.pxi":1275
  *         if u'"' in text:
  *             text = text.replace(u'"', u'&quot;')
  *         if u'\t' in text:             # <<<<<<<<<<<<<<
@@ -158085,7 +158121,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       }
 
-      /* "src/lxml/serializer.pxi":1278
+      /* "src/lxml/serializer.pxi":1277
  *         if u'\t' in text:
  *             text = text.replace(u'\t', u'&#x9;')
  *         if u'\n' in text:             # <<<<<<<<<<<<<<
@@ -158094,13 +158130,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1278, __pyx_L3_error)
+        __PYX_ERR(9, 1277, __pyx_L3_error)
       }
-      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__19, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1278, __pyx_L3_error)
+      __pyx_t_5 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__19, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 1277, __pyx_L3_error)
       __pyx_t_6 = (__pyx_t_5 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/serializer.pxi":1279
+        /* "src/lxml/serializer.pxi":1278
  *             text = text.replace(u'\t', u'&#x9;')
  *         if u'\n' in text:
  *             text = text.replace(u'\n', u'&#xA;')             # <<<<<<<<<<<<<<
@@ -158109,14 +158145,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1279, __pyx_L3_error)
+          __PYX_ERR(9, 1278, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__19, __pyx_kp_u_xA, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1279, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__19, __pyx_kp_u_xA, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1278, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1278
+        /* "src/lxml/serializer.pxi":1277
  *         if u'\t' in text:
  *             text = text.replace(u'\t', u'&#x9;')
  *         if u'\n' in text:             # <<<<<<<<<<<<<<
@@ -158125,7 +158161,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       }
 
-      /* "src/lxml/serializer.pxi":1280
+      /* "src/lxml/serializer.pxi":1279
  *         if u'\n' in text:
  *             text = text.replace(u'\n', u'&#xA;')
  *         if u'\r' in text:             # <<<<<<<<<<<<<<
@@ -158134,13 +158170,13 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-        __PYX_ERR(9, 1280, __pyx_L3_error)
+        __PYX_ERR(9, 1279, __pyx_L3_error)
       }
-      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__76, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1280, __pyx_L3_error)
+      __pyx_t_6 = (__Pyx_PyUnicode_ContainsTF(__pyx_kp_u__76, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1279, __pyx_L3_error)
       __pyx_t_5 = (__pyx_t_6 != 0);
       if (__pyx_t_5) {
 
-        /* "src/lxml/serializer.pxi":1281
+        /* "src/lxml/serializer.pxi":1280
  *             text = text.replace(u'\n', u'&#xA;')
  *         if u'\r' in text:
  *             text = text.replace(u'\r', u'&#xD;')             # <<<<<<<<<<<<<<
@@ -158149,14 +158185,14 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
         if (unlikely(__pyx_v_text == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
-          __PYX_ERR(9, 1281, __pyx_L3_error)
+          __PYX_ERR(9, 1280, __pyx_L3_error)
         }
-        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__76, __pyx_kp_u_xD, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1281, __pyx_L3_error)
+        __pyx_t_4 = PyUnicode_Replace(__pyx_v_text, __pyx_kp_u__76, __pyx_kp_u_xD, -1L); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1280, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_text, ((PyObject*)__pyx_t_4));
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1280
+        /* "src/lxml/serializer.pxi":1279
  *         if u'\n' in text:
  *             text = text.replace(u'\n', u'&#xA;')
  *         if u'\r' in text:             # <<<<<<<<<<<<<<
@@ -158165,7 +158201,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
  */
       }
 
-      /* "src/lxml/serializer.pxi":1282
+      /* "src/lxml/serializer.pxi":1281
  *         if u'\r' in text:
  *             text = text.replace(u'\r', u'&#xD;')
  *         return text             # <<<<<<<<<<<<<<
@@ -158177,7 +158213,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
       __pyx_r = __pyx_v_text;
       goto __pyx_L7_try_return;
 
-      /* "src/lxml/serializer.pxi":1268
+      /* "src/lxml/serializer.pxi":1267
  *     # escape attribute value
  *     cdef unicode text
  *     try:             # <<<<<<<<<<<<<<
@@ -158188,7 +158224,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
     __pyx_L3_error:;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1283
+    /* "src/lxml/serializer.pxi":1282
  *             text = text.replace(u'\r', u'&#xD;')
  *         return text
  *     except (TypeError, AttributeError):             # <<<<<<<<<<<<<<
@@ -158198,19 +158234,19 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
     __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
     if (__pyx_t_7) {
       __Pyx_AddTraceback("lxml.etree._escape_attrib_c14n", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(9, 1283, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(9, 1282, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "src/lxml/serializer.pxi":1284
+      /* "src/lxml/serializer.pxi":1283
  *         return text
  *     except (TypeError, AttributeError):
  *         _raise_serialization_error(stext)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-      __pyx_t_10 = __pyx_f_4lxml_5etree__raise_serialization_error(__pyx_v_stext); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1284, __pyx_L5_except_error)
+      __pyx_t_10 = __pyx_f_4lxml_5etree__raise_serialization_error(__pyx_v_stext); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 1283, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -158221,7 +158257,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "src/lxml/serializer.pxi":1268
+    /* "src/lxml/serializer.pxi":1267
  *     # escape attribute value
  *     cdef unicode text
  *     try:             # <<<<<<<<<<<<<<
@@ -158246,7 +158282,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
   }
 
-  /* "src/lxml/serializer.pxi":1265
+  /* "src/lxml/serializer.pxi":1264
  * 
  * 
  * cdef unicode _escape_attrib_c14n(stext):             # <<<<<<<<<<<<<<
@@ -158271,7 +158307,7 @@ static PyObject *__pyx_f_4lxml_5etree__escape_attrib_c14n(PyObject *__pyx_v_stex
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1334
+/* "src/lxml/serializer.pxi":1333
  *     cdef int method
  * 
  *     def __init__(self, output_file not None, encoding=None, compression=None,             # <<<<<<<<<<<<<<
@@ -158299,7 +158335,7 @@ static int __pyx_pw_4lxml_5etree_7xmlfile_1__init__(PyObject *__pyx_v_self, PyOb
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
 
-    /* "src/lxml/serializer.pxi":1335
+    /* "src/lxml/serializer.pxi":1334
  * 
  *     def __init__(self, output_file not None, encoding=None, compression=None,
  *                  close=False, buffered=True):             # <<<<<<<<<<<<<<
@@ -158356,7 +158392,7 @@ static int __pyx_pw_4lxml_5etree_7xmlfile_1__init__(PyObject *__pyx_v_self, PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(9, 1334, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(9, 1333, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -158381,18 +158417,18 @@ static int __pyx_pw_4lxml_5etree_7xmlfile_1__init__(PyObject *__pyx_v_self, PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1334, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1333, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.xmlfile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(((PyObject *)__pyx_v_output_file) == Py_None)) {
-    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "output_file"); __PYX_ERR(9, 1334, __pyx_L1_error)
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "output_file"); __PYX_ERR(9, 1333, __pyx_L1_error)
   }
   __pyx_r = __pyx_pf_4lxml_5etree_7xmlfile___init__(((struct __pyx_obj_4lxml_5etree_xmlfile *)__pyx_v_self), __pyx_v_output_file, __pyx_v_encoding, __pyx_v_compression, __pyx_v_close, __pyx_v_buffered);
 
-  /* "src/lxml/serializer.pxi":1334
+  /* "src/lxml/serializer.pxi":1333
  *     cdef int method
  * 
  *     def __init__(self, output_file not None, encoding=None, compression=None,             # <<<<<<<<<<<<<<
@@ -158421,7 +158457,7 @@ static int __pyx_pf_4lxml_5etree_7xmlfile___init__(struct __pyx_obj_4lxml_5etree
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/serializer.pxi":1336
+  /* "src/lxml/serializer.pxi":1335
  *     def __init__(self, output_file not None, encoding=None, compression=None,
  *                  close=False, buffered=True):
  *         self.output_file = output_file             # <<<<<<<<<<<<<<
@@ -158434,14 +158470,14 @@ static int __pyx_pf_4lxml_5etree_7xmlfile___init__(struct __pyx_obj_4lxml_5etree
   __Pyx_DECREF(__pyx_v_self->output_file);
   __pyx_v_self->output_file = __pyx_v_output_file;
 
-  /* "src/lxml/serializer.pxi":1337
+  /* "src/lxml/serializer.pxi":1336
  *                  close=False, buffered=True):
  *         self.output_file = output_file
  *         self.encoding = _utf8orNone(encoding)             # <<<<<<<<<<<<<<
  *         self.compresslevel = compression or 0
  *         self.close = close
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8orNone(__pyx_v_encoding); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1337, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8orNone(__pyx_v_encoding); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1336, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->encoding);
@@ -158449,17 +158485,17 @@ static int __pyx_pf_4lxml_5etree_7xmlfile___init__(struct __pyx_obj_4lxml_5etree
   __pyx_v_self->encoding = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1338
+  /* "src/lxml/serializer.pxi":1337
  *         self.output_file = output_file
  *         self.encoding = _utf8orNone(encoding)
  *         self.compresslevel = compression or 0             # <<<<<<<<<<<<<<
  *         self.close = close
  *         self.buffered = buffered
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_compression); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1338, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_compression); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1337, __pyx_L1_error)
   if (!__pyx_t_3) {
   } else {
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1338, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1337, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_4;
     goto __pyx_L3_bool_binop_done;
   }
@@ -158467,27 +158503,27 @@ static int __pyx_pf_4lxml_5etree_7xmlfile___init__(struct __pyx_obj_4lxml_5etree
   __pyx_L3_bool_binop_done:;
   __pyx_v_self->compresslevel = __pyx_t_2;
 
-  /* "src/lxml/serializer.pxi":1339
+  /* "src/lxml/serializer.pxi":1338
  *         self.encoding = _utf8orNone(encoding)
  *         self.compresslevel = compression or 0
  *         self.close = close             # <<<<<<<<<<<<<<
  *         self.buffered = buffered
  *         self.method = OUTPUT_METHOD_XML
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_close); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1339, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_close); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1338, __pyx_L1_error)
   __pyx_v_self->close = __pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":1340
+  /* "src/lxml/serializer.pxi":1339
  *         self.compresslevel = compression or 0
  *         self.close = close
  *         self.buffered = buffered             # <<<<<<<<<<<<<<
  *         self.method = OUTPUT_METHOD_XML
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_buffered); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1340, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_buffered); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1339, __pyx_L1_error)
   __pyx_v_self->buffered = __pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":1341
+  /* "src/lxml/serializer.pxi":1340
  *         self.close = close
  *         self.buffered = buffered
  *         self.method = OUTPUT_METHOD_XML             # <<<<<<<<<<<<<<
@@ -158496,7 +158532,7 @@ static int __pyx_pf_4lxml_5etree_7xmlfile___init__(struct __pyx_obj_4lxml_5etree
  */
   __pyx_v_self->method = __pyx_e_4lxml_5etree_OUTPUT_METHOD_XML;
 
-  /* "src/lxml/serializer.pxi":1334
+  /* "src/lxml/serializer.pxi":1333
  *     cdef int method
  * 
  *     def __init__(self, output_file not None, encoding=None, compression=None,             # <<<<<<<<<<<<<<
@@ -158516,7 +158552,7 @@ static int __pyx_pf_4lxml_5etree_7xmlfile___init__(struct __pyx_obj_4lxml_5etree
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1343
+/* "src/lxml/serializer.pxi":1342
  *         self.method = OUTPUT_METHOD_XML
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -158552,7 +158588,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "src/lxml/serializer.pxi":1344
+  /* "src/lxml/serializer.pxi":1343
  * 
  *     def __enter__(self):
  *         assert self.output_file is not None             # <<<<<<<<<<<<<<
@@ -158564,43 +158600,43 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
     __pyx_t_1 = (__pyx_v_self->output_file != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1344, __pyx_L1_error)
+      __PYX_ERR(9, 1343, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1346
+  /* "src/lxml/serializer.pxi":1345
  *         assert self.output_file is not None
  *         self.writer = _IncrementalFileWriter(
  *             self.output_file, self.encoding, self.compresslevel,             # <<<<<<<<<<<<<<
  *             self.close, self.buffered, self.method)
  *         return self.writer
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->compresslevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1346, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->compresslevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "src/lxml/serializer.pxi":1347
+  /* "src/lxml/serializer.pxi":1346
  *         self.writer = _IncrementalFileWriter(
  *             self.output_file, self.encoding, self.compresslevel,
  *             self.close, self.buffered, self.method)             # <<<<<<<<<<<<<<
  *         return self.writer
  * 
  */
-  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->close); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1347, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->close); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_self->buffered); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1347, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_self->buffered); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->method); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1347, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->method); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "src/lxml/serializer.pxi":1345
+  /* "src/lxml/serializer.pxi":1344
  *     def __enter__(self):
  *         assert self.output_file is not None
  *         self.writer = _IncrementalFileWriter(             # <<<<<<<<<<<<<<
  *             self.output_file, self.encoding, self.compresslevel,
  *             self.close, self.buffered, self.method)
  */
-  __pyx_t_6 = PyTuple_New(6); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1345, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(6); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_self->output_file);
   __Pyx_GIVEREF(__pyx_v_self->output_file);
@@ -158620,7 +158656,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
   __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1345, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_GIVEREF(__pyx_t_5);
@@ -158629,7 +158665,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
   __pyx_v_self->writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1348
+  /* "src/lxml/serializer.pxi":1347
  *             self.output_file, self.encoding, self.compresslevel,
  *             self.close, self.buffered, self.method)
  *         return self.writer             # <<<<<<<<<<<<<<
@@ -158641,7 +158677,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
   __pyx_r = ((PyObject *)__pyx_v_self->writer);
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1343
+  /* "src/lxml/serializer.pxi":1342
  *         self.method = OUTPUT_METHOD_XML
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -158664,7 +158700,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1350
+/* "src/lxml/serializer.pxi":1349
  *         return self.writer
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -158710,17 +158746,17 @@ static PyObject *__pyx_pw_4lxml_5etree_7xmlfile_5__exit__(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(9, 1350, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(9, 1349, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_tb)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(9, 1350, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(9, 1349, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(9, 1350, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(9, 1349, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -158735,7 +158771,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7xmlfile_5__exit__(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1350, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1349, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.xmlfile.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -158762,7 +158798,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "src/lxml/serializer.pxi":1351
+  /* "src/lxml/serializer.pxi":1350
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         if self.writer is not None:             # <<<<<<<<<<<<<<
@@ -158773,7 +158809,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1352
+    /* "src/lxml/serializer.pxi":1351
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         if self.writer is not None:
  *             old_writer, self.writer = self.writer, None             # <<<<<<<<<<<<<<
@@ -158792,7 +158828,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
     __pyx_v_self->writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1353
+    /* "src/lxml/serializer.pxi":1352
  *         if self.writer is not None:
  *             old_writer, self.writer = self.writer, None
  *             raise_on_error = exc_type is None             # <<<<<<<<<<<<<<
@@ -158800,24 +158836,24 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
  *             if self.close:
  */
     __pyx_t_2 = (__pyx_v_exc_type == Py_None);
-    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1353, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1352, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_raise_on_error = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1354
+    /* "src/lxml/serializer.pxi":1353
  *             old_writer, self.writer = self.writer, None
  *             raise_on_error = exc_type is None
  *             old_writer._close(raise_on_error)             # <<<<<<<<<<<<<<
  *             if self.close:
  *                 self.output_file = None
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_raise_on_error); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1354, __pyx_L1_error)
-    __pyx_t_4 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(__pyx_v_old_writer, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1354, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_raise_on_error); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1353, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(__pyx_v_old_writer, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1353, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1355
+    /* "src/lxml/serializer.pxi":1354
  *             raise_on_error = exc_type is None
  *             old_writer._close(raise_on_error)
  *             if self.close:             # <<<<<<<<<<<<<<
@@ -158827,7 +158863,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
     __pyx_t_2 = (__pyx_v_self->close != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":1356
+      /* "src/lxml/serializer.pxi":1355
  *             old_writer._close(raise_on_error)
  *             if self.close:
  *                 self.output_file = None             # <<<<<<<<<<<<<<
@@ -158840,7 +158876,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
       __Pyx_DECREF(__pyx_v_self->output_file);
       __pyx_v_self->output_file = Py_None;
 
-      /* "src/lxml/serializer.pxi":1355
+      /* "src/lxml/serializer.pxi":1354
  *             raise_on_error = exc_type is None
  *             old_writer._close(raise_on_error)
  *             if self.close:             # <<<<<<<<<<<<<<
@@ -158849,7 +158885,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
  */
     }
 
-    /* "src/lxml/serializer.pxi":1351
+    /* "src/lxml/serializer.pxi":1350
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         if self.writer is not None:             # <<<<<<<<<<<<<<
@@ -158858,7 +158894,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
  */
   }
 
-  /* "src/lxml/serializer.pxi":1350
+  /* "src/lxml/serializer.pxi":1349
  *         return self.writer
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -158883,7 +158919,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_4__exit__(struct __pyx_obj_4lxml
 }
 static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1358
+/* "src/lxml/serializer.pxi":1357
  *                 self.output_file = None
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -158917,7 +158953,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_6__aenter__(struct __pyx_obj_4lx
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2___aenter__ *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1358, __pyx_L1_error)
+    __PYX_ERR(9, 1357, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -158925,7 +158961,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_6__aenter__(struct __pyx_obj_4lx
   __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_7xmlfile_8generator2, __pyx_codeobj__78, (PyObject *) __pyx_cur_scope, __pyx_n_s_aenter, __pyx_n_s_xmlfile___aenter, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1358, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_7xmlfile_8generator2, __pyx_codeobj__78, (PyObject *) __pyx_cur_scope, __pyx_n_s_aenter, __pyx_n_s_xmlfile___aenter, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1357, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -158964,9 +159000,9 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1358, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1357, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1359
+  /* "src/lxml/serializer.pxi":1358
  * 
  *     async def __aenter__(self):
  *         assert self.output_file is not None             # <<<<<<<<<<<<<<
@@ -158978,12 +159014,12 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
     __pyx_t_1 = (__pyx_cur_scope->__pyx_v_self->output_file != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1359, __pyx_L1_error)
+      __PYX_ERR(9, 1358, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1360
+  /* "src/lxml/serializer.pxi":1359
  *     async def __aenter__(self):
  *         assert self.output_file is not None
  *         if isinstance(self.output_file, basestring):             # <<<<<<<<<<<<<<
@@ -158997,20 +159033,20 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "src/lxml/serializer.pxi":1361
+    /* "src/lxml/serializer.pxi":1360
  *         assert self.output_file is not None
  *         if isinstance(self.output_file, basestring):
  *             raise TypeError("Cannot asynchronously write to a plain file")             # <<<<<<<<<<<<<<
  *         if not hasattr(self.output_file, 'write'):
  *             raise TypeError("Output file needs an async .write() method")
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1361, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1360, __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(9, 1361, __pyx_L1_error)
+    __PYX_ERR(9, 1360, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1360
+    /* "src/lxml/serializer.pxi":1359
  *     async def __aenter__(self):
  *         assert self.output_file is not None
  *         if isinstance(self.output_file, basestring):             # <<<<<<<<<<<<<<
@@ -159019,7 +159055,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
  */
   }
 
-  /* "src/lxml/serializer.pxi":1362
+  /* "src/lxml/serializer.pxi":1361
  *         if isinstance(self.output_file, basestring):
  *             raise TypeError("Cannot asynchronously write to a plain file")
  *         if not hasattr(self.output_file, 'write'):             # <<<<<<<<<<<<<<
@@ -159028,25 +159064,25 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
  */
   __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->output_file;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_HasAttr(__pyx_t_2, __pyx_n_s_write); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1362, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_HasAttr(__pyx_t_2, __pyx_n_s_write); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1361, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1363
+    /* "src/lxml/serializer.pxi":1362
  *             raise TypeError("Cannot asynchronously write to a plain file")
  *         if not hasattr(self.output_file, 'write'):
  *             raise TypeError("Output file needs an async .write() method")             # <<<<<<<<<<<<<<
  *         self.async_writer = _AsyncIncrementalFileWriter(
  *             self.output_file, self.encoding, self.compresslevel,
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1363, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1362, __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(9, 1363, __pyx_L1_error)
+    __PYX_ERR(9, 1362, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1362
+    /* "src/lxml/serializer.pxi":1361
  *         if isinstance(self.output_file, basestring):
  *             raise TypeError("Cannot asynchronously write to a plain file")
  *         if not hasattr(self.output_file, 'write'):             # <<<<<<<<<<<<<<
@@ -159055,38 +159091,38 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
  */
   }
 
-  /* "src/lxml/serializer.pxi":1365
+  /* "src/lxml/serializer.pxi":1364
  *             raise TypeError("Output file needs an async .write() method")
  *         self.async_writer = _AsyncIncrementalFileWriter(
  *             self.output_file, self.encoding, self.compresslevel,             # <<<<<<<<<<<<<<
  *             self.close, self.buffered, self.method)
  *         return self.async_writer
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_self->compresslevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1365, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_self->compresslevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1364, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "src/lxml/serializer.pxi":1366
+  /* "src/lxml/serializer.pxi":1365
  *         self.async_writer = _AsyncIncrementalFileWriter(
  *             self.output_file, self.encoding, self.compresslevel,
  *             self.close, self.buffered, self.method)             # <<<<<<<<<<<<<<
  *         return self.async_writer
  * 
  */
-  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_cur_scope->__pyx_v_self->close); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1366, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_cur_scope->__pyx_v_self->close); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1365, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_cur_scope->__pyx_v_self->buffered); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1366, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_cur_scope->__pyx_v_self->buffered); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1365, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_self->method); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1366, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_self->method); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1365, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "src/lxml/serializer.pxi":1364
+  /* "src/lxml/serializer.pxi":1363
  *         if not hasattr(self.output_file, 'write'):
  *             raise TypeError("Output file needs an async .write() method")
  *         self.async_writer = _AsyncIncrementalFileWriter(             # <<<<<<<<<<<<<<
  *             self.output_file, self.encoding, self.compresslevel,
  *             self.close, self.buffered, self.method)
  */
-  __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1364, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->output_file);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->output_file);
@@ -159106,7 +159142,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
   __pyx_t_4 = 0;
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1364, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_GIVEREF(__pyx_t_6);
@@ -159115,7 +159151,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
   __pyx_cur_scope->__pyx_v_self->async_writer = ((struct __pyx_obj_4lxml_5etree__AsyncIncrementalFileWriter *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "src/lxml/serializer.pxi":1367
+  /* "src/lxml/serializer.pxi":1366
  *             self.output_file, self.encoding, self.compresslevel,
  *             self.close, self.buffered, self.method)
  *         return self.async_writer             # <<<<<<<<<<<<<<
@@ -159127,7 +159163,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
   goto __pyx_L0;
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1358
+  /* "src/lxml/serializer.pxi":1357
  *                 self.output_file = None
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -159155,7 +159191,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
 }
 static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1369
+/* "src/lxml/serializer.pxi":1368
  *         return self.async_writer
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -159201,17 +159237,17 @@ static PyObject *__pyx_pw_4lxml_5etree_7xmlfile_10__aexit__(PyObject *__pyx_v_se
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__aexit__", 1, 3, 3, 1); __PYX_ERR(9, 1369, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__aexit__", 1, 3, 3, 1); __PYX_ERR(9, 1368, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_tb)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__aexit__", 1, 3, 3, 2); __PYX_ERR(9, 1369, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__aexit__", 1, 3, 3, 2); __PYX_ERR(9, 1368, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__aexit__") < 0)) __PYX_ERR(9, 1369, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__aexit__") < 0)) __PYX_ERR(9, 1368, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -159226,7 +159262,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7xmlfile_10__aexit__(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__aexit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1369, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__aexit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1368, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.xmlfile.__aexit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -159251,7 +159287,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_9__aexit__(struct __pyx_obj_4lxm
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3___aexit__ *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1369, __pyx_L1_error)
+    __PYX_ERR(9, 1368, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -159268,7 +159304,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_9__aexit__(struct __pyx_obj_4lxm
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_exc_tb);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_exc_tb);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_7xmlfile_11generator3, __pyx_codeobj__81, (PyObject *) __pyx_cur_scope, __pyx_n_s_aexit, __pyx_n_s_xmlfile___aexit, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1369, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_7xmlfile_11generator3, __pyx_codeobj__81, (PyObject *) __pyx_cur_scope, __pyx_n_s_aexit, __pyx_n_s_xmlfile___aexit, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1368, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -159306,9 +159342,9 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1369, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1368, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1370
+  /* "src/lxml/serializer.pxi":1369
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):
  *         if self.async_writer is not None:             # <<<<<<<<<<<<<<
@@ -159319,7 +159355,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1371
+    /* "src/lxml/serializer.pxi":1370
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):
  *         if self.async_writer is not None:
  *             old_writer, self.async_writer = self.async_writer, None             # <<<<<<<<<<<<<<
@@ -159339,7 +159375,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
     __pyx_cur_scope->__pyx_v_self->async_writer = ((struct __pyx_obj_4lxml_5etree__AsyncIncrementalFileWriter *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1372
+    /* "src/lxml/serializer.pxi":1371
  *         if self.async_writer is not None:
  *             old_writer, self.async_writer = self.async_writer, None
  *             raise_on_error = exc_type is None             # <<<<<<<<<<<<<<
@@ -159347,20 +159383,20 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
  *             if self.close:
  */
     __pyx_t_2 = (__pyx_cur_scope->__pyx_v_exc_type == Py_None);
-    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1372, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1371, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_cur_scope->__pyx_v_raise_on_error = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1373
+    /* "src/lxml/serializer.pxi":1372
  *             old_writer, self.async_writer = self.async_writer, None
  *             raise_on_error = exc_type is None
  *             await old_writer._close(raise_on_error)             # <<<<<<<<<<<<<<
  *             if self.close:
  *                 self.output_file = None
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_old_writer), __pyx_n_s_close_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1373, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_old_writer), __pyx_n_s_close_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1372, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -159374,7 +159410,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
     }
     __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_cur_scope->__pyx_v_raise_on_error) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_raise_on_error);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1373, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1372, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_4);
@@ -159388,16 +159424,16 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1373, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1372, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1373, __pyx_L1_error)
+        else __PYX_ERR(9, 1372, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1374
+    /* "src/lxml/serializer.pxi":1373
  *             raise_on_error = exc_type is None
  *             await old_writer._close(raise_on_error)
  *             if self.close:             # <<<<<<<<<<<<<<
@@ -159407,7 +159443,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
     __pyx_t_2 = (__pyx_cur_scope->__pyx_v_self->close != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":1375
+      /* "src/lxml/serializer.pxi":1374
  *             await old_writer._close(raise_on_error)
  *             if self.close:
  *                 self.output_file = None             # <<<<<<<<<<<<<<
@@ -159420,7 +159456,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
       __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->output_file);
       __pyx_cur_scope->__pyx_v_self->output_file = Py_None;
 
-      /* "src/lxml/serializer.pxi":1374
+      /* "src/lxml/serializer.pxi":1373
  *             raise_on_error = exc_type is None
  *             await old_writer._close(raise_on_error)
  *             if self.close:             # <<<<<<<<<<<<<<
@@ -159429,7 +159465,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
  */
     }
 
-    /* "src/lxml/serializer.pxi":1370
+    /* "src/lxml/serializer.pxi":1369
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):
  *         if self.async_writer is not None:             # <<<<<<<<<<<<<<
@@ -159439,7 +159475,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1369
+  /* "src/lxml/serializer.pxi":1368
  *         return self.async_writer
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -159466,7 +159502,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_11generator3(__pyx_CoroutineObje
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1384
+/* "src/lxml/serializer.pxi":1383
  *     xmlfile.
  *     """
  *     def __init__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
@@ -159483,12 +159519,8 @@ static int __pyx_pw_4lxml_5etree_8htmlfile_1__init__(PyObject *__pyx_v_self, PyO
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 1))) return -1;
-  if (unlikely(__pyx_kwds)) {
-    __pyx_v_kwargs = PyDict_Copy(__pyx_kwds); if (unlikely(!__pyx_v_kwargs)) return -1;
-    __Pyx_GOTREF(__pyx_v_kwargs);
-  } else {
-    __pyx_v_kwargs = NULL;
-  }
+  __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return -1;
+  __Pyx_GOTREF(__pyx_v_kwargs);
   __Pyx_INCREF(__pyx_args);
   __pyx_v_args = __pyx_args;
   __pyx_r = __pyx_pf_4lxml_5etree_8htmlfile___init__(((struct __pyx_obj_4lxml_5etree_htmlfile *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs);
@@ -159505,19 +159537,20 @@ static int __pyx_pf_4lxml_5etree_8htmlfile___init__(struct __pyx_obj_4lxml_5etre
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/serializer.pxi":1385
+  /* "src/lxml/serializer.pxi":1384
  *     """
  *     def __init__(self, *args, **kwargs):
  *         super().__init__(*args, **kwargs)             # <<<<<<<<<<<<<<
  *         self.method = OUTPUT_METHOD_HTML
  * 
  */
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1385, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_5etree_htmlfile));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_5etree_htmlfile));
@@ -159525,18 +159558,21 @@ static int __pyx_pf_4lxml_5etree_8htmlfile___init__(struct __pyx_obj_4lxml_5etre
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1385, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1385, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_v_args, __pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1385, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_v_args, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1384, __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;
 
-  /* "src/lxml/serializer.pxi":1386
+  /* "src/lxml/serializer.pxi":1385
  *     def __init__(self, *args, **kwargs):
  *         super().__init__(*args, **kwargs)
  *         self.method = OUTPUT_METHOD_HTML             # <<<<<<<<<<<<<<
@@ -159545,7 +159581,7 @@ static int __pyx_pf_4lxml_5etree_8htmlfile___init__(struct __pyx_obj_4lxml_5etre
  */
   __pyx_v_self->__pyx_base.method = __pyx_e_4lxml_5etree_OUTPUT_METHOD_HTML;
 
-  /* "src/lxml/serializer.pxi":1384
+  /* "src/lxml/serializer.pxi":1383
  *     xmlfile.
  *     """
  *     def __init__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
@@ -159559,6 +159595,7 @@ static int __pyx_pf_4lxml_5etree_8htmlfile___init__(struct __pyx_obj_4lxml_5etre
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("lxml.etree.htmlfile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -159566,7 +159603,7 @@ static int __pyx_pf_4lxml_5etree_8htmlfile___init__(struct __pyx_obj_4lxml_5etre
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1409
+/* "src/lxml/serializer.pxi":1408
  *     cdef bint _buffered
  * 
  *     def __cinit__(self, outfile, bytes encoding, int compresslevel, bint close,             # <<<<<<<<<<<<<<
@@ -159620,35 +159657,35 @@ static int __pyx_pw_4lxml_5etree_22_IncrementalFileWriter_1__cinit__(PyObject *_
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_encoding)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 1); __PYX_ERR(9, 1409, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 1); __PYX_ERR(9, 1408, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compresslevel)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 2); __PYX_ERR(9, 1409, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 2); __PYX_ERR(9, 1408, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_close)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 3); __PYX_ERR(9, 1409, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 3); __PYX_ERR(9, 1408, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buffered)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 4); __PYX_ERR(9, 1409, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 4); __PYX_ERR(9, 1408, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 5); __PYX_ERR(9, 1409, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 5); __PYX_ERR(9, 1408, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1409, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1408, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -159662,20 +159699,20 @@ static int __pyx_pw_4lxml_5etree_22_IncrementalFileWriter_1__cinit__(PyObject *_
     }
     __pyx_v_outfile = values[0];
     __pyx_v_encoding = ((PyObject*)values[1]);
-    __pyx_v_compresslevel = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_compresslevel == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1409, __pyx_L3_error)
-    __pyx_v_close = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_close == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1409, __pyx_L3_error)
-    __pyx_v_buffered = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_buffered == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1410, __pyx_L3_error)
-    __pyx_v_method = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1410, __pyx_L3_error)
+    __pyx_v_compresslevel = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_compresslevel == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1408, __pyx_L3_error)
+    __pyx_v_close = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_close == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1408, __pyx_L3_error)
+    __pyx_v_buffered = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_buffered == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1409, __pyx_L3_error)
+    __pyx_v_method = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1409, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1409, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1408, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_encoding), (&PyBytes_Type), 1, "encoding", 1))) __PYX_ERR(9, 1409, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_encoding), (&PyBytes_Type), 1, "encoding", 1))) __PYX_ERR(9, 1408, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)__pyx_v_self), __pyx_v_outfile, __pyx_v_encoding, __pyx_v_compresslevel, __pyx_v_close, __pyx_v_buffered, __pyx_v_method);
 
   /* function exit code */
@@ -159700,7 +159737,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   __Pyx_RefNannySetupContext("__cinit__", 0);
   __Pyx_INCREF(__pyx_v_encoding);
 
-  /* "src/lxml/serializer.pxi":1411
+  /* "src/lxml/serializer.pxi":1410
  *     def __cinit__(self, outfile, bytes encoding, int compresslevel, bint close,
  *                   bint buffered, int method):
  *         self._status = WRITER_STARTING             # <<<<<<<<<<<<<<
@@ -159709,14 +159746,14 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
  */
   __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_STARTING;
 
-  /* "src/lxml/serializer.pxi":1412
+  /* "src/lxml/serializer.pxi":1411
  *                   bint buffered, int method):
  *         self._status = WRITER_STARTING
  *         self._element_stack = []             # <<<<<<<<<<<<<<
  *         if encoding is None:
  *             encoding = b'ASCII'
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1412, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_element_stack);
@@ -159724,7 +159761,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   __pyx_v_self->_element_stack = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1413
+  /* "src/lxml/serializer.pxi":1412
  *         self._status = WRITER_STARTING
  *         self._element_stack = []
  *         if encoding is None:             # <<<<<<<<<<<<<<
@@ -159735,7 +159772,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":1414
+    /* "src/lxml/serializer.pxi":1413
  *         self._element_stack = []
  *         if encoding is None:
  *             encoding = b'ASCII'             # <<<<<<<<<<<<<<
@@ -159745,7 +159782,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
     __Pyx_INCREF(__pyx_n_b_ASCII);
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_n_b_ASCII);
 
-    /* "src/lxml/serializer.pxi":1413
+    /* "src/lxml/serializer.pxi":1412
  *         self._status = WRITER_STARTING
  *         self._element_stack = []
  *         if encoding is None:             # <<<<<<<<<<<<<<
@@ -159754,7 +159791,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
  */
   }
 
-  /* "src/lxml/serializer.pxi":1415
+  /* "src/lxml/serializer.pxi":1414
  *         if encoding is None:
  *             encoding = b'ASCII'
  *         self._encoding = encoding             # <<<<<<<<<<<<<<
@@ -159767,7 +159804,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   __Pyx_DECREF(__pyx_v_self->_encoding);
   __pyx_v_self->_encoding = __pyx_v_encoding;
 
-  /* "src/lxml/serializer.pxi":1416
+  /* "src/lxml/serializer.pxi":1415
  *             encoding = b'ASCII'
  *         self._encoding = encoding
  *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL             # <<<<<<<<<<<<<<
@@ -159782,7 +159819,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   }
   __pyx_v_self->_c_encoding = __pyx_t_4;
 
-  /* "src/lxml/serializer.pxi":1417
+  /* "src/lxml/serializer.pxi":1416
  *         self._encoding = encoding
  *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL
  *         self._buffered = buffered             # <<<<<<<<<<<<<<
@@ -159791,14 +159828,14 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
  */
   __pyx_v_self->_buffered = __pyx_v_buffered;
 
-  /* "src/lxml/serializer.pxi":1418
+  /* "src/lxml/serializer.pxi":1417
  *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL
  *         self._buffered = buffered
  *         self._target = _create_output_buffer(             # <<<<<<<<<<<<<<
  *             outfile, self._c_encoding, compresslevel, &self._c_out, close)
  *         self._method = method
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_outfile, __pyx_v_self->_c_encoding, __pyx_v_compresslevel, (&__pyx_v_self->_c_out), __pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1418, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_outfile, __pyx_v_self->_c_encoding, __pyx_v_compresslevel, (&__pyx_v_self->_c_out), __pyx_v_close)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1417, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_target);
@@ -159806,7 +159843,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   __pyx_v_self->_target = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1420
+  /* "src/lxml/serializer.pxi":1419
  *         self._target = _create_output_buffer(
  *             outfile, self._c_encoding, compresslevel, &self._c_out, close)
  *         self._method = method             # <<<<<<<<<<<<<<
@@ -159815,7 +159852,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
  */
   __pyx_v_self->_method = __pyx_v_method;
 
-  /* "src/lxml/serializer.pxi":1409
+  /* "src/lxml/serializer.pxi":1408
  *     cdef bint _buffered
  * 
  *     def __cinit__(self, outfile, bytes encoding, int compresslevel, bint close,             # <<<<<<<<<<<<<<
@@ -159836,7 +159873,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1422
+/* "src/lxml/serializer.pxi":1421
  *         self._method = method
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -159860,7 +159897,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "src/lxml/serializer.pxi":1423
+  /* "src/lxml/serializer.pxi":1422
  * 
  *     def __dealloc__(self):
  *         if self._c_out is not NULL:             # <<<<<<<<<<<<<<
@@ -159870,7 +159907,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
   __pyx_t_1 = ((__pyx_v_self->_c_out != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1424
+    /* "src/lxml/serializer.pxi":1423
  *     def __dealloc__(self):
  *         if self._c_out is not NULL:
  *             tree.xmlOutputBufferClose(self._c_out)             # <<<<<<<<<<<<<<
@@ -159879,7 +159916,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
  */
     (void)(xmlOutputBufferClose(__pyx_v_self->_c_out));
 
-    /* "src/lxml/serializer.pxi":1423
+    /* "src/lxml/serializer.pxi":1422
  * 
  *     def __dealloc__(self):
  *         if self._c_out is not NULL:             # <<<<<<<<<<<<<<
@@ -159888,7 +159925,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
  */
   }
 
-  /* "src/lxml/serializer.pxi":1422
+  /* "src/lxml/serializer.pxi":1421
  *         self._method = method
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -159900,7 +159937,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
   __Pyx_RefNannyFinishContext();
 }
 
-/* "src/lxml/serializer.pxi":1426
+/* "src/lxml/serializer.pxi":1425
  *             tree.xmlOutputBufferClose(self._c_out)
  * 
  *     def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
@@ -159962,7 +159999,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declarati
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_declaration") < 0)) __PYX_ERR(9, 1426, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_declaration") < 0)) __PYX_ERR(9, 1425, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -159982,7 +160019,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declarati
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_declaration", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1426, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_declaration", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1425, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.write_declaration", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -160014,7 +160051,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __Pyx_INCREF(__pyx_v_version);
   __Pyx_INCREF(__pyx_v_doctype);
 
-  /* "src/lxml/serializer.pxi":1431
+  /* "src/lxml/serializer.pxi":1430
  *         Write an XML declaration and (optionally) a doctype into the file.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -160025,12 +160062,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1431, __pyx_L1_error)
+      __PYX_ERR(9, 1430, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1434
+  /* "src/lxml/serializer.pxi":1433
  *         cdef const_xmlChar* c_version
  *         cdef int c_standalone
  *         if self._method != OUTPUT_METHOD_XML:             # <<<<<<<<<<<<<<
@@ -160040,14 +160077,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_1 = ((__pyx_v_self->_method != __pyx_e_4lxml_5etree_OUTPUT_METHOD_XML) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1435
+    /* "src/lxml/serializer.pxi":1434
  *         cdef int c_standalone
  *         if self._method != OUTPUT_METHOD_XML:
  *             raise LxmlSyntaxError("only XML documents have declarations")             # <<<<<<<<<<<<<<
  *         if self._status >= WRITER_DECL_WRITTEN:
  *             raise LxmlSyntaxError("XML declaration already written")
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1435, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1434, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -160061,14 +160098,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_only_XML_documents_have_declarat) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_only_XML_documents_have_declarat);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1435, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1434, __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(9, 1435, __pyx_L1_error)
+    __PYX_ERR(9, 1434, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1434
+    /* "src/lxml/serializer.pxi":1433
  *         cdef const_xmlChar* c_version
  *         cdef int c_standalone
  *         if self._method != OUTPUT_METHOD_XML:             # <<<<<<<<<<<<<<
@@ -160077,7 +160114,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
   }
 
-  /* "src/lxml/serializer.pxi":1436
+  /* "src/lxml/serializer.pxi":1435
  *         if self._method != OUTPUT_METHOD_XML:
  *             raise LxmlSyntaxError("only XML documents have declarations")
  *         if self._status >= WRITER_DECL_WRITTEN:             # <<<<<<<<<<<<<<
@@ -160087,14 +160124,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_1 = ((__pyx_v_self->_status >= __pyx_e_4lxml_5etree_WRITER_DECL_WRITTEN) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1437
+    /* "src/lxml/serializer.pxi":1436
  *             raise LxmlSyntaxError("only XML documents have declarations")
  *         if self._status >= WRITER_DECL_WRITTEN:
  *             raise LxmlSyntaxError("XML declaration already written")             # <<<<<<<<<<<<<<
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1437, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1436, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -160108,14 +160145,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_XML_declaration_already_written) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_XML_declaration_already_written);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1437, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1436, __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(9, 1437, __pyx_L1_error)
+    __PYX_ERR(9, 1436, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1436
+    /* "src/lxml/serializer.pxi":1435
  *         if self._method != OUTPUT_METHOD_XML:
  *             raise LxmlSyntaxError("only XML documents have declarations")
  *         if self._status >= WRITER_DECL_WRITTEN:             # <<<<<<<<<<<<<<
@@ -160124,19 +160161,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
   }
 
-  /* "src/lxml/serializer.pxi":1438
+  /* "src/lxml/serializer.pxi":1437
  *         if self._status >= WRITER_DECL_WRITTEN:
  *             raise LxmlSyntaxError("XML declaration already written")
  *         version = _utf8orNone(version)             # <<<<<<<<<<<<<<
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8orNone(__pyx_v_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1438, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8orNone(__pyx_v_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1437, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_version, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1439
+  /* "src/lxml/serializer.pxi":1438
  *             raise LxmlSyntaxError("XML declaration already written")
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL             # <<<<<<<<<<<<<<
@@ -160151,19 +160188,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   __pyx_v_c_version = __pyx_t_5;
 
-  /* "src/lxml/serializer.pxi":1440
+  /* "src/lxml/serializer.pxi":1439
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)             # <<<<<<<<<<<<<<
  *         if standalone is None:
  *             c_standalone = -1
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8orNone(__pyx_v_doctype); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1440, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8orNone(__pyx_v_doctype); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1441
+  /* "src/lxml/serializer.pxi":1440
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)
  *         if standalone is None:             # <<<<<<<<<<<<<<
@@ -160174,7 +160211,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_6 = (__pyx_t_1 != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/serializer.pxi":1442
+    /* "src/lxml/serializer.pxi":1441
  *         doctype = _utf8orNone(doctype)
  *         if standalone is None:
  *             c_standalone = -1             # <<<<<<<<<<<<<<
@@ -160183,7 +160220,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
     __pyx_v_c_standalone = -1;
 
-    /* "src/lxml/serializer.pxi":1441
+    /* "src/lxml/serializer.pxi":1440
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)
  *         if standalone is None:             # <<<<<<<<<<<<<<
@@ -160193,7 +160230,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
     goto __pyx_L5;
   }
 
-  /* "src/lxml/serializer.pxi":1444
+  /* "src/lxml/serializer.pxi":1443
  *             c_standalone = -1
  *         else:
  *             c_standalone = 1 if standalone else 0             # <<<<<<<<<<<<<<
@@ -160201,7 +160238,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  *         if doctype is not None:
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1444, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1443, __pyx_L1_error)
     if (__pyx_t_6) {
       __pyx_t_7 = 1;
     } else {
@@ -160211,7 +160248,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   __pyx_L5:;
 
-  /* "src/lxml/serializer.pxi":1445
+  /* "src/lxml/serializer.pxi":1444
  *         else:
  *             c_standalone = 1 if standalone else 0
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)             # <<<<<<<<<<<<<<
@@ -160220,7 +160257,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
   __pyx_f_4lxml_5etree__writeDeclarationToBuffer(__pyx_v_self->_c_out, __pyx_v_c_version, __pyx_v_self->_c_encoding, __pyx_v_c_standalone);
 
-  /* "src/lxml/serializer.pxi":1446
+  /* "src/lxml/serializer.pxi":1445
  *             c_standalone = 1 if standalone else 0
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)
  *         if doctype is not None:             # <<<<<<<<<<<<<<
@@ -160231,7 +160268,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_1 = (__pyx_t_6 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1447
+    /* "src/lxml/serializer.pxi":1446
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)
  *         if doctype is not None:
  *             _writeDoctype(self._c_out, _xcstr(doctype))             # <<<<<<<<<<<<<<
@@ -160240,7 +160277,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
     __pyx_f_4lxml_5etree__writeDoctype(__pyx_v_self->_c_out, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_doctype));
 
-    /* "src/lxml/serializer.pxi":1448
+    /* "src/lxml/serializer.pxi":1447
  *         if doctype is not None:
  *             _writeDoctype(self._c_out, _xcstr(doctype))
  *             self._status = WRITER_DTD_WRITTEN             # <<<<<<<<<<<<<<
@@ -160249,7 +160286,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
     __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_DTD_WRITTEN;
 
-    /* "src/lxml/serializer.pxi":1446
+    /* "src/lxml/serializer.pxi":1445
  *             c_standalone = 1 if standalone else 0
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)
  *         if doctype is not None:             # <<<<<<<<<<<<<<
@@ -160259,7 +160296,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
     goto __pyx_L6;
   }
 
-  /* "src/lxml/serializer.pxi":1450
+  /* "src/lxml/serializer.pxi":1449
  *             self._status = WRITER_DTD_WRITTEN
  *         else:
  *             self._status = WRITER_DECL_WRITTEN             # <<<<<<<<<<<<<<
@@ -160271,7 +160308,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   __pyx_L6:;
 
-  /* "src/lxml/serializer.pxi":1451
+  /* "src/lxml/serializer.pxi":1450
  *         else:
  *             self._status = WRITER_DECL_WRITTEN
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -160281,7 +160318,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_1 = ((!(__pyx_v_self->_buffered != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1452
+    /* "src/lxml/serializer.pxi":1451
  *             self._status = WRITER_DECL_WRITTEN
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)             # <<<<<<<<<<<<<<
@@ -160290,7 +160327,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
     (void)(xmlOutputBufferFlush(__pyx_v_self->_c_out));
 
-    /* "src/lxml/serializer.pxi":1451
+    /* "src/lxml/serializer.pxi":1450
  *         else:
  *             self._status = WRITER_DECL_WRITTEN
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -160299,18 +160336,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
   }
 
-  /* "src/lxml/serializer.pxi":1453
+  /* "src/lxml/serializer.pxi":1452
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     def write_doctype(self, doctype):
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1453, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1452, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1426
+  /* "src/lxml/serializer.pxi":1425
  *             tree.xmlOutputBufferClose(self._c_out)
  * 
  *     def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
@@ -160335,7 +160372,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1455
+/* "src/lxml/serializer.pxi":1454
  *         self._handle_error(self._c_out.error)
  * 
  *     def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
@@ -160372,7 +160409,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __Pyx_RefNannySetupContext("write_doctype", 0);
   __Pyx_INCREF(__pyx_v_doctype);
 
-  /* "src/lxml/serializer.pxi":1460
+  /* "src/lxml/serializer.pxi":1459
  *         Writes the given doctype declaration verbatimly into the file.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -160383,12 +160420,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1460, __pyx_L1_error)
+      __PYX_ERR(9, 1459, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1461
+  /* "src/lxml/serializer.pxi":1460
  *         """
  *         assert self._c_out is not NULL
  *         if doctype is None:             # <<<<<<<<<<<<<<
@@ -160399,7 +160436,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1462
+    /* "src/lxml/serializer.pxi":1461
  *         assert self._c_out is not NULL
  *         if doctype is None:
  *             return             # <<<<<<<<<<<<<<
@@ -160410,7 +160447,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1461
+    /* "src/lxml/serializer.pxi":1460
  *         """
  *         assert self._c_out is not NULL
  *         if doctype is None:             # <<<<<<<<<<<<<<
@@ -160419,7 +160456,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   }
 
-  /* "src/lxml/serializer.pxi":1463
+  /* "src/lxml/serializer.pxi":1462
  *         if doctype is None:
  *             return
  *         if self._status >= WRITER_DTD_WRITTEN:             # <<<<<<<<<<<<<<
@@ -160429,14 +160466,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __pyx_t_2 = ((__pyx_v_self->_status >= __pyx_e_4lxml_5etree_WRITER_DTD_WRITTEN) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/serializer.pxi":1464
+    /* "src/lxml/serializer.pxi":1463
  *             return
  *         if self._status >= WRITER_DTD_WRITTEN:
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")             # <<<<<<<<<<<<<<
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1464, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1463, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -160450,14 +160487,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
     }
     __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_s_DOCTYPE_already_written_or_canno) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_s_DOCTYPE_already_written_or_canno);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1464, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1463, __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(9, 1464, __pyx_L1_error)
+    __PYX_ERR(9, 1463, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1463
+    /* "src/lxml/serializer.pxi":1462
  *         if doctype is None:
  *             return
  *         if self._status >= WRITER_DTD_WRITTEN:             # <<<<<<<<<<<<<<
@@ -160466,19 +160503,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   }
 
-  /* "src/lxml/serializer.pxi":1465
+  /* "src/lxml/serializer.pxi":1464
  *         if self._status >= WRITER_DTD_WRITTEN:
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")
  *         doctype = _utf8(doctype)             # <<<<<<<<<<<<<<
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_doctype); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1465, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_doctype); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1466
+  /* "src/lxml/serializer.pxi":1465
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))             # <<<<<<<<<<<<<<
@@ -160487,7 +160524,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   __pyx_f_4lxml_5etree__writeDoctype(__pyx_v_self->_c_out, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_doctype));
 
-  /* "src/lxml/serializer.pxi":1467
+  /* "src/lxml/serializer.pxi":1466
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN             # <<<<<<<<<<<<<<
@@ -160496,7 +160533,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_DTD_WRITTEN;
 
-  /* "src/lxml/serializer.pxi":1468
+  /* "src/lxml/serializer.pxi":1467
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -160506,7 +160543,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __pyx_t_2 = ((!(__pyx_v_self->_buffered != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1469
+    /* "src/lxml/serializer.pxi":1468
  *         self._status = WRITER_DTD_WRITTEN
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)             # <<<<<<<<<<<<<<
@@ -160515,7 +160552,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
     (void)(xmlOutputBufferFlush(__pyx_v_self->_c_out));
 
-    /* "src/lxml/serializer.pxi":1468
+    /* "src/lxml/serializer.pxi":1467
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -160524,18 +160561,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   }
 
-  /* "src/lxml/serializer.pxi":1470
+  /* "src/lxml/serializer.pxi":1469
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     def method(self, method):
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1470, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1469, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1455
+  /* "src/lxml/serializer.pxi":1454
  *         self._handle_error(self._c_out.error)
  * 
  *     def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
@@ -160559,7 +160596,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1472
+/* "src/lxml/serializer.pxi":1471
  *         self._handle_error(self._c_out.error)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
@@ -160596,7 +160633,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("method", 0);
 
-  /* "src/lxml/serializer.pxi":1478
+  /* "src/lxml/serializer.pxi":1477
  *         method is one of (None, 'xml', 'html') where None means 'xml'.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -160607,12 +160644,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1478, __pyx_L1_error)
+      __PYX_ERR(9, 1477, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1479
+  /* "src/lxml/serializer.pxi":1478
  *         """
  *         assert self._c_out is not NULL
  *         c_method = self._method if method is None else _findOutputMethod(method)             # <<<<<<<<<<<<<<
@@ -160623,12 +160660,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
   if ((__pyx_t_2 != 0)) {
     __pyx_t_1 = __pyx_v_self->_method;
   } else {
-    __pyx_t_3 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1479, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1478, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_3;
   }
   __pyx_v_c_method = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":1480
+  /* "src/lxml/serializer.pxi":1479
  *         assert self._c_out is not NULL
  *         c_method = self._method if method is None else _findOutputMethod(method)
  *         return _MethodChanger(self, c_method)             # <<<<<<<<<<<<<<
@@ -160636,9 +160673,9 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_c_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1480, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_c_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1479, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1480, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1479, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -160646,14 +160683,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1480, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1479, __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;
 
-  /* "src/lxml/serializer.pxi":1472
+  /* "src/lxml/serializer.pxi":1471
  *         self._handle_error(self._c_out.error)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
@@ -160673,7 +160710,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1482
+/* "src/lxml/serializer.pxi":1481
  *         return _MethodChanger(self, c_method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
@@ -160745,7 +160782,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_11element(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "element") < 0)) __PYX_ERR(9, 1482, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "element") < 0)) __PYX_ERR(9, 1481, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -160767,7 +160804,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_11element(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("element", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1482, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("element", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1481, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.element", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -160811,7 +160848,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("element", 0);
 
-  /* "src/lxml/serializer.pxi":1488
+  /* "src/lxml/serializer.pxi":1487
  *         method is one of (None, 'xml', 'html') where None means 'xml'.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -160822,24 +160859,24 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1488, __pyx_L1_error)
+      __PYX_ERR(9, 1487, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1489
+  /* "src/lxml/serializer.pxi":1488
  *         """
  *         assert self._c_out is not NULL
  *         attributes = []             # <<<<<<<<<<<<<<
  *         if attrib is not None:
  *             for name, value in _iter_attrib(attrib):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1489, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_attributes = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1490
+  /* "src/lxml/serializer.pxi":1489
  *         assert self._c_out is not NULL
  *         attributes = []
  *         if attrib is not None:             # <<<<<<<<<<<<<<
@@ -160850,22 +160887,22 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":1491
+    /* "src/lxml/serializer.pxi":1490
  *         attributes = []
  *         if attrib is not None:
  *             for name, value in _iter_attrib(attrib):             # <<<<<<<<<<<<<<
  *                 if name not in _extra:
  *                     ns, name = _getNsTag(name)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__iter_attrib(__pyx_v_attrib); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1491, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__iter_attrib(__pyx_v_attrib); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1490, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
       __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
       __pyx_t_6 = NULL;
     } else {
-      __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1491, __pyx_L1_error)
+      __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1490, __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(9, 1491, __pyx_L1_error)
+      __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1490, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     for (;;) {
@@ -160873,17 +160910,17 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         if (likely(PyList_CheckExact(__pyx_t_4))) {
           if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(9, 1491, __pyx_L1_error)
+          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(9, 1490, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1491, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1490, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         } else {
           if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(9, 1491, __pyx_L1_error)
+          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(9, 1490, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1491, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1490, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         }
@@ -160893,7 +160930,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(9, 1491, __pyx_L1_error)
+            else __PYX_ERR(9, 1490, __pyx_L1_error)
           }
           break;
         }
@@ -160905,7 +160942,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1491, __pyx_L1_error)
+          __PYX_ERR(9, 1490, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -160918,15 +160955,15 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __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(9, 1491, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1490, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1491, __pyx_L1_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1490, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1491, __pyx_L1_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1490, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -160934,7 +160971,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __Pyx_GOTREF(__pyx_t_7);
         index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(9, 1491, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(9, 1490, __pyx_L1_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L7_unpacking_done;
@@ -160942,7 +160979,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1491, __pyx_L1_error)
+        __PYX_ERR(9, 1490, __pyx_L1_error)
         __pyx_L7_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
@@ -160950,25 +160987,25 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":1492
+      /* "src/lxml/serializer.pxi":1491
  *         if attrib is not None:
  *             for name, value in _iter_attrib(attrib):
  *                 if name not in _extra:             # <<<<<<<<<<<<<<
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))
  */
-      __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_v_name, __pyx_v__extra, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1492, __pyx_L1_error)
+      __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_v_name, __pyx_v__extra, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(9, 1491, __pyx_L1_error)
       __pyx_t_2 = (__pyx_t_3 != 0);
       if (__pyx_t_2) {
 
-        /* "src/lxml/serializer.pxi":1493
+        /* "src/lxml/serializer.pxi":1492
  *             for name, value in _iter_attrib(attrib):
  *                 if name not in _extra:
  *                     ns, name = _getNsTag(name)             # <<<<<<<<<<<<<<
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:
  */
-        __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1493, __pyx_L1_error)
+        __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1492, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         if (likely(__pyx_t_1 != Py_None)) {
           PyObject* sequence = __pyx_t_1;
@@ -160976,7 +161013,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(9, 1493, __pyx_L1_error)
+            __PYX_ERR(9, 1492, __pyx_L1_error)
           }
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
@@ -160984,30 +161021,30 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
           __Pyx_INCREF(__pyx_t_8);
           __Pyx_INCREF(__pyx_t_7);
           #else
-          __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1493, __pyx_L1_error)
+          __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1492, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_8);
-          __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1493, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1492, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         } else {
-          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1493, __pyx_L1_error)
+          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1492, __pyx_L1_error)
         }
         __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_8);
         __pyx_t_8 = 0;
         __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_7);
         __pyx_t_7 = 0;
 
-        /* "src/lxml/serializer.pxi":1494
+        /* "src/lxml/serializer.pxi":1493
  *                 if name not in _extra:
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))             # <<<<<<<<<<<<<<
  *         if _extra:
  *             for name, value in _extra.iteritems():
  */
-        __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1494, __pyx_L1_error)
+        __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1493, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1494, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1493, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_INCREF(__pyx_v_ns);
         __Pyx_GIVEREF(__pyx_v_ns);
@@ -161018,10 +161055,10 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __Pyx_GIVEREF(__pyx_t_1);
         PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_1);
         __pyx_t_1 = 0;
-        __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_attributes, __pyx_t_7); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 1494, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_attributes, __pyx_t_7); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 1493, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-        /* "src/lxml/serializer.pxi":1492
+        /* "src/lxml/serializer.pxi":1491
  *         if attrib is not None:
  *             for name, value in _iter_attrib(attrib):
  *                 if name not in _extra:             # <<<<<<<<<<<<<<
@@ -161030,7 +161067,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  */
       }
 
-      /* "src/lxml/serializer.pxi":1491
+      /* "src/lxml/serializer.pxi":1490
  *         attributes = []
  *         if attrib is not None:
  *             for name, value in _iter_attrib(attrib):             # <<<<<<<<<<<<<<
@@ -161040,7 +161077,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1490
+    /* "src/lxml/serializer.pxi":1489
  *         assert self._c_out is not NULL
  *         attributes = []
  *         if attrib is not None:             # <<<<<<<<<<<<<<
@@ -161049,17 +161086,17 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  */
   }
 
-  /* "src/lxml/serializer.pxi":1495
+  /* "src/lxml/serializer.pxi":1494
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:             # <<<<<<<<<<<<<<
  *             for name, value in _extra.iteritems():
  *                 ns, name = _getNsTag(name)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__extra); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1495, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__extra); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1494, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1496
+    /* "src/lxml/serializer.pxi":1495
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:
  *             for name, value in _extra.iteritems():             # <<<<<<<<<<<<<<
@@ -161067,7 +161104,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  *                 attributes.append((ns, name, _utf8(value)))
  */
     __pyx_t_5 = 0;
-    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v__extra, 1, __pyx_n_s_iteritems, (&__pyx_t_12), (&__pyx_t_13)); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1496, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v__extra, 1, __pyx_n_s_iteritems, (&__pyx_t_12), (&__pyx_t_13)); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1495, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_XDECREF(__pyx_t_4);
     __pyx_t_4 = __pyx_t_7;
@@ -161075,7 +161112,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
     while (1) {
       __pyx_t_14 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_12, &__pyx_t_5, &__pyx_t_7, &__pyx_t_1, NULL, __pyx_t_13);
       if (unlikely(__pyx_t_14 == 0)) break;
-      if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(9, 1496, __pyx_L1_error)
+      if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(9, 1495, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
@@ -161083,14 +161120,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "src/lxml/serializer.pxi":1497
+      /* "src/lxml/serializer.pxi":1496
  *         if _extra:
  *             for name, value in _extra.iteritems():
  *                 ns, name = _getNsTag(name)             # <<<<<<<<<<<<<<
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}
  */
-      __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1497, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1496, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       if (likely(__pyx_t_1 != Py_None)) {
         PyObject* sequence = __pyx_t_1;
@@ -161098,7 +161135,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1497, __pyx_L1_error)
+          __PYX_ERR(9, 1496, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
@@ -161106,30 +161143,30 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __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(9, 1497, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1496, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1497, __pyx_L1_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1496, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       } else {
-        __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1497, __pyx_L1_error)
+        __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1496, __pyx_L1_error)
       }
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_7);
       __pyx_t_7 = 0;
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":1498
+      /* "src/lxml/serializer.pxi":1497
  *             for name, value in _extra.iteritems():
  *                 ns, name = _getNsTag(name)
  *                 attributes.append((ns, name, _utf8(value)))             # <<<<<<<<<<<<<<
  *         reversed_nsmap = {}
  *         if nsmap:
  */
-      __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1498, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1497, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1498, __pyx_L1_error)
+      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1497, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_v_ns);
       __Pyx_GIVEREF(__pyx_v_ns);
@@ -161140,12 +161177,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_attributes, __pyx_t_8); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 1498, __pyx_L1_error)
+      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_attributes, __pyx_t_8); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 1497, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1495
+    /* "src/lxml/serializer.pxi":1494
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:             # <<<<<<<<<<<<<<
@@ -161154,36 +161191,36 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  */
   }
 
-  /* "src/lxml/serializer.pxi":1499
+  /* "src/lxml/serializer.pxi":1498
  *                 ns, name = _getNsTag(name)
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}             # <<<<<<<<<<<<<<
  *         if nsmap:
  *             for prefix, ns in nsmap.items():
  */
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1499, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1498, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_reversed_nsmap = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1500
+  /* "src/lxml/serializer.pxi":1499
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}
  *         if nsmap:             # <<<<<<<<<<<<<<
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_nsmap); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1500, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_nsmap); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1499, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1501
+    /* "src/lxml/serializer.pxi":1500
  *         reversed_nsmap = {}
  *         if nsmap:
  *             for prefix, ns in nsmap.items():             # <<<<<<<<<<<<<<
  *                 if prefix is not None:
  *                     prefix = _utf8(prefix)
  */
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1501, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_1 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
@@ -161197,16 +161234,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
     }
     __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1501, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
       __pyx_t_8 = __pyx_t_4; __Pyx_INCREF(__pyx_t_8); __pyx_t_12 = 0;
       __pyx_t_6 = NULL;
     } else {
-      __pyx_t_12 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1501, __pyx_L1_error)
+      __pyx_t_12 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1500, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_6 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1501, __pyx_L1_error)
+      __pyx_t_6 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1500, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     for (;;) {
@@ -161214,17 +161251,17 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         if (likely(PyList_CheckExact(__pyx_t_8))) {
           if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_8)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(9, 1501, __pyx_L1_error)
+          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(9, 1500, __pyx_L1_error)
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1501, __pyx_L1_error)
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1500, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         } else {
           if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(9, 1501, __pyx_L1_error)
+          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(9, 1500, __pyx_L1_error)
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1501, __pyx_L1_error)
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1500, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         }
@@ -161234,7 +161271,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(9, 1501, __pyx_L1_error)
+            else __PYX_ERR(9, 1500, __pyx_L1_error)
           }
           break;
         }
@@ -161246,7 +161283,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1501, __pyx_L1_error)
+          __PYX_ERR(9, 1500, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -161259,15 +161296,15 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __Pyx_INCREF(__pyx_t_1);
         __Pyx_INCREF(__pyx_t_7);
         #else
-        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1501, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1500, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1501, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1500, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1501, __pyx_L1_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1500, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -161275,7 +161312,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __Pyx_GOTREF(__pyx_t_1);
         index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L15_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(9, 1501, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(9, 1500, __pyx_L1_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L16_unpacking_done;
@@ -161283,7 +161320,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1501, __pyx_L1_error)
+        __PYX_ERR(9, 1500, __pyx_L1_error)
         __pyx_L16_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_1);
@@ -161291,7 +161328,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "src/lxml/serializer.pxi":1502
+      /* "src/lxml/serializer.pxi":1501
  *         if nsmap:
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:             # <<<<<<<<<<<<<<
@@ -161302,28 +161339,28 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
       __pyx_t_3 = (__pyx_t_2 != 0);
       if (__pyx_t_3) {
 
-        /* "src/lxml/serializer.pxi":1503
+        /* "src/lxml/serializer.pxi":1502
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:
  *                     prefix = _utf8(prefix)             # <<<<<<<<<<<<<<
  *                     _prefixValidOrRaise(prefix)
  *                 reversed_nsmap[_utf8(ns)] = prefix
  */
-        __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_prefix); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1503, __pyx_L1_error)
+        __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_prefix); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1502, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_4);
         __pyx_t_4 = 0;
 
-        /* "src/lxml/serializer.pxi":1504
+        /* "src/lxml/serializer.pxi":1503
  *                 if prefix is not None:
  *                     prefix = _utf8(prefix)
  *                     _prefixValidOrRaise(prefix)             # <<<<<<<<<<<<<<
  *                 reversed_nsmap[_utf8(ns)] = prefix
  *         ns, name = _getNsTag(tag)
  */
-        __pyx_t_13 = __pyx_f_4lxml_5etree__prefixValidOrRaise(__pyx_v_prefix); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1504, __pyx_L1_error)
+        __pyx_t_13 = __pyx_f_4lxml_5etree__prefixValidOrRaise(__pyx_v_prefix); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(9, 1503, __pyx_L1_error)
 
-        /* "src/lxml/serializer.pxi":1502
+        /* "src/lxml/serializer.pxi":1501
  *         if nsmap:
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:             # <<<<<<<<<<<<<<
@@ -161332,19 +161369,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  */
       }
 
-      /* "src/lxml/serializer.pxi":1505
+      /* "src/lxml/serializer.pxi":1504
  *                     prefix = _utf8(prefix)
  *                     _prefixValidOrRaise(prefix)
  *                 reversed_nsmap[_utf8(ns)] = prefix             # <<<<<<<<<<<<<<
  *         ns, name = _getNsTag(tag)
  * 
  */
-      __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1505, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1504, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(PyDict_SetItem(__pyx_v_reversed_nsmap, __pyx_t_4, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1505, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_reversed_nsmap, __pyx_t_4, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1504, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "src/lxml/serializer.pxi":1501
+      /* "src/lxml/serializer.pxi":1500
  *         reversed_nsmap = {}
  *         if nsmap:
  *             for prefix, ns in nsmap.items():             # <<<<<<<<<<<<<<
@@ -161354,7 +161391,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
     }
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "src/lxml/serializer.pxi":1500
+    /* "src/lxml/serializer.pxi":1499
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}
  *         if nsmap:             # <<<<<<<<<<<<<<
@@ -161363,14 +161400,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  */
   }
 
-  /* "src/lxml/serializer.pxi":1506
+  /* "src/lxml/serializer.pxi":1505
  *                     _prefixValidOrRaise(prefix)
  *                 reversed_nsmap[_utf8(ns)] = prefix
  *         ns, name = _getNsTag(tag)             # <<<<<<<<<<<<<<
  * 
  *         c_method = self._method if method is None else _findOutputMethod(method)
  */
-  __pyx_t_8 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1506, __pyx_L1_error)
+  __pyx_t_8 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1505, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   if (likely(__pyx_t_8 != Py_None)) {
     PyObject* sequence = __pyx_t_8;
@@ -161378,7 +161415,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(9, 1506, __pyx_L1_error)
+      __PYX_ERR(9, 1505, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
@@ -161386,21 +161423,21 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_7);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1506, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1505, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1506, __pyx_L1_error)
+    __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1505, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     #endif
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   } else {
-    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1506, __pyx_L1_error)
+    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(9, 1505, __pyx_L1_error)
   }
   __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_4);
   __pyx_t_4 = 0;
   __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":1508
+  /* "src/lxml/serializer.pxi":1507
  *         ns, name = _getNsTag(tag)
  * 
  *         c_method = self._method if method is None else _findOutputMethod(method)             # <<<<<<<<<<<<<<
@@ -161411,12 +161448,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   if ((__pyx_t_3 != 0)) {
     __pyx_t_13 = __pyx_v_self->_method;
   } else {
-    __pyx_t_14 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1508, __pyx_L1_error)
+    __pyx_t_14 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(9, 1507, __pyx_L1_error)
     __pyx_t_13 = __pyx_t_14;
   }
   __pyx_v_c_method = __pyx_t_13;
 
-  /* "src/lxml/serializer.pxi":1510
+  /* "src/lxml/serializer.pxi":1509
  *         c_method = self._method if method is None else _findOutputMethod(method)
  * 
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap), c_method)             # <<<<<<<<<<<<<<
@@ -161424,7 +161461,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  *     cdef _write_qname(self, bytes name, bytes prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1510, __pyx_L1_error)
+  __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_ns);
   __Pyx_GIVEREF(__pyx_v_ns);
@@ -161438,9 +161475,9 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   __Pyx_INCREF(__pyx_v_reversed_nsmap);
   __Pyx_GIVEREF(__pyx_v_reversed_nsmap);
   PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_reversed_nsmap);
-  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_c_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1510, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_c_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1510, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -161451,14 +161488,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_7);
   __pyx_t_8 = 0;
   __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1510, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_7;
   __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1482
+  /* "src/lxml/serializer.pxi":1481
  *         return _MethodChanger(self, c_method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
@@ -161487,7 +161524,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1512
+/* "src/lxml/serializer.pxi":1511
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap), c_method)
  * 
  *     cdef _write_qname(self, bytes name, bytes prefix):             # <<<<<<<<<<<<<<
@@ -161505,7 +161542,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_qname", 0);
 
-  /* "src/lxml/serializer.pxi":1513
+  /* "src/lxml/serializer.pxi":1512
  * 
  *     cdef _write_qname(self, bytes name, bytes prefix):
  *         if prefix:  # empty bytes for no prefix (not None to allow sorting)             # <<<<<<<<<<<<<<
@@ -161515,7 +161552,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   __pyx_t_1 = (__pyx_v_prefix != Py_None)&&(PyBytes_GET_SIZE(__pyx_v_prefix) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1514
+    /* "src/lxml/serializer.pxi":1513
  *     cdef _write_qname(self, bytes name, bytes prefix):
  *         if prefix:  # empty bytes for no prefix (not None to allow sorting)
  *             tree.xmlOutputBufferWrite(self._c_out, len(prefix), _cstr(prefix))             # <<<<<<<<<<<<<<
@@ -161524,12 +161561,12 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
  */
     if (unlikely(__pyx_v_prefix == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      __PYX_ERR(9, 1514, __pyx_L1_error)
+      __PYX_ERR(9, 1513, __pyx_L1_error)
     }
-    __pyx_t_2 = PyBytes_GET_SIZE(__pyx_v_prefix); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1514, __pyx_L1_error)
+    __pyx_t_2 = PyBytes_GET_SIZE(__pyx_v_prefix); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1513, __pyx_L1_error)
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, __pyx_t_2, PyBytes_AS_STRING(__pyx_v_prefix)));
 
-    /* "src/lxml/serializer.pxi":1515
+    /* "src/lxml/serializer.pxi":1514
  *         if prefix:  # empty bytes for no prefix (not None to allow sorting)
  *             tree.xmlOutputBufferWrite(self._c_out, len(prefix), _cstr(prefix))
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ':')             # <<<<<<<<<<<<<<
@@ -161538,7 +161575,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
  */
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, ((const char *)":")));
 
-    /* "src/lxml/serializer.pxi":1513
+    /* "src/lxml/serializer.pxi":1512
  * 
  *     cdef _write_qname(self, bytes name, bytes prefix):
  *         if prefix:  # empty bytes for no prefix (not None to allow sorting)             # <<<<<<<<<<<<<<
@@ -161547,7 +161584,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
  */
   }
 
-  /* "src/lxml/serializer.pxi":1516
+  /* "src/lxml/serializer.pxi":1515
  *             tree.xmlOutputBufferWrite(self._c_out, len(prefix), _cstr(prefix))
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ':')
  *         tree.xmlOutputBufferWrite(self._c_out, len(name), _cstr(name))             # <<<<<<<<<<<<<<
@@ -161556,12 +161593,12 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
  */
   if (unlikely(__pyx_v_name == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(9, 1516, __pyx_L1_error)
+    __PYX_ERR(9, 1515, __pyx_L1_error)
   }
-  __pyx_t_2 = PyBytes_GET_SIZE(__pyx_v_name); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1516, __pyx_L1_error)
+  __pyx_t_2 = PyBytes_GET_SIZE(__pyx_v_name); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1515, __pyx_L1_error)
   (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, __pyx_t_2, PyBytes_AS_STRING(__pyx_v_name)));
 
-  /* "src/lxml/serializer.pxi":1512
+  /* "src/lxml/serializer.pxi":1511
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap), c_method)
  * 
  *     cdef _write_qname(self, bytes name, bytes prefix):             # <<<<<<<<<<<<<<
@@ -161581,7 +161618,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1518
+/* "src/lxml/serializer.pxi":1517
  *         tree.xmlOutputBufferWrite(self._c_out, len(name), _cstr(name))
  * 
  *     cdef _write_start_element(self, element_config):             # <<<<<<<<<<<<<<
@@ -161612,7 +161649,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_start_element", 0);
 
-  /* "src/lxml/serializer.pxi":1519
+  /* "src/lxml/serializer.pxi":1518
  * 
  *     cdef _write_start_element(self, element_config):
  *         if self._status > WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -161622,14 +161659,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_t_1 = ((__pyx_v_self->_status > __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1520
+    /* "src/lxml/serializer.pxi":1519
  *     cdef _write_start_element(self, element_config):
  *         if self._status > WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")             # <<<<<<<<<<<<<<
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1520, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -161643,14 +161680,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_cannot_append_trailing_element_t) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_cannot_append_trailing_element_t);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1520, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1519, __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(9, 1520, __pyx_L1_error)
+    __PYX_ERR(9, 1519, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1519
+    /* "src/lxml/serializer.pxi":1518
  * 
  *     cdef _write_start_element(self, element_config):
  *         if self._status > WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -161659,7 +161696,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":1521
+  /* "src/lxml/serializer.pxi":1520
  *         if self._status > WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  *         ns, name, attributes, nsmap = element_config             # <<<<<<<<<<<<<<
@@ -161672,7 +161709,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     if (unlikely(size != 4)) {
       if (size > 4) __Pyx_RaiseTooManyValuesError(4);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(9, 1521, __pyx_L1_error)
+      __PYX_ERR(9, 1520, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -161695,7 +161732,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
       Py_ssize_t i;
       PyObject** temps[4] = {&__pyx_t_2,&__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(9, 1521, __pyx_L1_error)
+        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(9, 1520, __pyx_L1_error)
         __Pyx_GOTREF(item);
         *(temps[i]) = item;
       }
@@ -161704,7 +161741,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   } else {
     Py_ssize_t index = -1;
     PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
-    __pyx_t_6 = PyObject_GetIter(__pyx_v_element_config); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1521, __pyx_L1_error)
+    __pyx_t_6 = PyObject_GetIter(__pyx_v_element_config); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1520, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
     for (index=0; index < 4; index++) {
@@ -161712,7 +161749,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
       __Pyx_GOTREF(item);
       *(temps[index]) = item;
     }
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(9, 1521, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(9, 1520, __pyx_L1_error)
     __pyx_t_7 = NULL;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L5_unpacking_done;
@@ -161720,7 +161757,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(9, 1521, __pyx_L1_error)
+    __PYX_ERR(9, 1520, __pyx_L1_error)
     __pyx_L5_unpacking_done:;
   }
   __pyx_v_ns = __pyx_t_2;
@@ -161732,15 +161769,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_v_nsmap = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1522
+  /* "src/lxml/serializer.pxi":1521
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)             # <<<<<<<<<<<<<<
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')
  */
-  if (!(likely(PyDict_CheckExact(__pyx_v_nsmap))||((__pyx_v_nsmap) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_nsmap)->tp_name), 0))) __PYX_ERR(9, 1522, __pyx_L1_error)
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_nsmap)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1522, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_v_nsmap))||((__pyx_v_nsmap) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_nsmap)->tp_name), 0))) __PYX_ERR(9, 1521, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_nsmap)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
     PyObject* sequence = __pyx_t_5;
@@ -161748,7 +161785,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(9, 1522, __pyx_L1_error)
+      __PYX_ERR(9, 1521, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -161761,15 +161798,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1522, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1521, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1522, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1521, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1522, __pyx_L1_error)
+    __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1521, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext;
@@ -161777,7 +161814,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_GOTREF(__pyx_t_4);
     index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(9, 1522, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(9, 1521, __pyx_L1_error)
     __pyx_t_7 = NULL;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     goto __pyx_L7_unpacking_done;
@@ -161785,7 +161822,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_7 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(9, 1522, __pyx_L1_error)
+    __PYX_ERR(9, 1521, __pyx_L1_error)
     __pyx_L7_unpacking_done:;
   }
   __pyx_v_flat_namespace_map = __pyx_t_4;
@@ -161793,22 +161830,22 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_v_new_namespaces = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1523
+  /* "src/lxml/serializer.pxi":1522
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)             # <<<<<<<<<<<<<<
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')
  *         self._write_qname(name, prefix)
  */
-  if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_ns)->tp_name), 0))) __PYX_ERR(9, 1523, __pyx_L1_error)
-  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) __PYX_ERR(9, 1523, __pyx_L1_error)
-  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) __PYX_ERR(9, 1523, __pyx_L1_error)
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1523, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_ns)->tp_name), 0))) __PYX_ERR(9, 1522, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) __PYX_ERR(9, 1522, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) __PYX_ERR(9, 1522, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_v_prefix = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1524
+  /* "src/lxml/serializer.pxi":1523
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')             # <<<<<<<<<<<<<<
@@ -161817,42 +161854,42 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, ((const char *)"<")));
 
-  /* "src/lxml/serializer.pxi":1525
+  /* "src/lxml/serializer.pxi":1524
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')
  *         self._write_qname(name, prefix)             # <<<<<<<<<<<<<<
  * 
  *         self._write_attributes_and_namespaces(
  */
-  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1525, __pyx_L1_error)
-  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1525, __pyx_L1_error)
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1525, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1524, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1524, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1528
+  /* "src/lxml/serializer.pxi":1527
  * 
  *         self._write_attributes_and_namespaces(
  *             attributes, flat_namespace_map, new_namespaces)             # <<<<<<<<<<<<<<
  * 
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  */
-  if (!(likely(PyList_CheckExact(__pyx_v_attributes))||((__pyx_v_attributes) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_attributes)->tp_name), 0))) __PYX_ERR(9, 1528, __pyx_L1_error)
-  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) __PYX_ERR(9, 1528, __pyx_L1_error)
-  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) __PYX_ERR(9, 1528, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_attributes))||((__pyx_v_attributes) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_attributes)->tp_name), 0))) __PYX_ERR(9, 1527, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) __PYX_ERR(9, 1527, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) __PYX_ERR(9, 1527, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1527
+  /* "src/lxml/serializer.pxi":1526
  *         self._write_qname(name, prefix)
  * 
  *         self._write_attributes_and_namespaces(             # <<<<<<<<<<<<<<
  *             attributes, flat_namespace_map, new_namespaces)
  * 
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_and_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_attributes), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1527, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_and_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_attributes), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1530
+  /* "src/lxml/serializer.pxi":1529
  *             attributes, flat_namespace_map, new_namespaces)
  * 
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')             # <<<<<<<<<<<<<<
@@ -161861,7 +161898,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, ((const char *)">")));
 
-  /* "src/lxml/serializer.pxi":1531
+  /* "src/lxml/serializer.pxi":1530
  * 
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -161871,7 +161908,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_t_1 = ((!(__pyx_v_self->_buffered != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1532
+    /* "src/lxml/serializer.pxi":1531
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)             # <<<<<<<<<<<<<<
@@ -161880,7 +161917,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
     (void)(xmlOutputBufferFlush(__pyx_v_self->_c_out));
 
-    /* "src/lxml/serializer.pxi":1531
+    /* "src/lxml/serializer.pxi":1530
  * 
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -161889,18 +161926,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   }
 
-  /* "src/lxml/serializer.pxi":1533
+  /* "src/lxml/serializer.pxi":1532
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *         self._element_stack.append((ns, name, prefix, flat_namespace_map))
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1533, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1535
+  /* "src/lxml/serializer.pxi":1534
  *         self._handle_error(self._c_out.error)
  * 
  *         self._element_stack.append((ns, name, prefix, flat_namespace_map))             # <<<<<<<<<<<<<<
@@ -161909,9 +161946,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   if (unlikely(__pyx_v_self->_element_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(9, 1535, __pyx_L1_error)
+    __PYX_ERR(9, 1534, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1535, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1534, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_ns);
   __Pyx_GIVEREF(__pyx_v_ns);
@@ -161925,10 +161962,10 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __Pyx_INCREF(__pyx_v_flat_namespace_map);
   __Pyx_GIVEREF(__pyx_v_flat_namespace_map);
   PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_flat_namespace_map);
-  __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_self->_element_stack, __pyx_t_5); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(9, 1535, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_self->_element_stack, __pyx_t_5); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(9, 1534, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "src/lxml/serializer.pxi":1536
+  /* "src/lxml/serializer.pxi":1535
  * 
  *         self._element_stack.append((ns, name, prefix, flat_namespace_map))
  *         self._status = WRITER_IN_ELEMENT             # <<<<<<<<<<<<<<
@@ -161937,7 +161974,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT;
 
-  /* "src/lxml/serializer.pxi":1518
+  /* "src/lxml/serializer.pxi":1517
  *         tree.xmlOutputBufferWrite(self._c_out, len(name), _cstr(name))
  * 
  *     cdef _write_start_element(self, element_config):             # <<<<<<<<<<<<<<
@@ -161969,7 +162006,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1538
+/* "src/lxml/serializer.pxi":1537
  *         self._status = WRITER_IN_ELEMENT
  * 
  *     cdef _write_attributes_and_namespaces(self, list attributes,             # <<<<<<<<<<<<<<
@@ -162000,7 +162037,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __Pyx_RefNannySetupContext("_write_attributes_and_namespaces", 0);
   __Pyx_INCREF(__pyx_v_attributes);
 
-  /* "src/lxml/serializer.pxi":1541
+  /* "src/lxml/serializer.pxi":1540
  *                                           dict flat_namespace_map,
  *                                           list new_namespaces):
  *         if attributes:             # <<<<<<<<<<<<<<
@@ -162010,17 +162047,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __pyx_t_1 = (__pyx_v_attributes != Py_None)&&(PyList_GET_SIZE(__pyx_v_attributes) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1543
+    /* "src/lxml/serializer.pxi":1542
  *         if attributes:
  *             # _find_prefix() may append to new_namespaces => build them first
  *             attributes = [             # <<<<<<<<<<<<<<
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]
  */
-    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1543, __pyx_L1_error)
+    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1542, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "src/lxml/serializer.pxi":1545
+    /* "src/lxml/serializer.pxi":1544
  *             attributes = [
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]             # <<<<<<<<<<<<<<
@@ -162029,15 +162066,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     if (unlikely(__pyx_v_attributes == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(9, 1545, __pyx_L1_error)
+      __PYX_ERR(9, 1544, __pyx_L1_error)
     }
     __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     for (;;) {
       if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(9, 1545, __pyx_L1_error)
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(9, 1544, __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(9, 1545, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1544, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -162046,7 +162083,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1545, __pyx_L1_error)
+          __PYX_ERR(9, 1544, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -162062,17 +162099,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1545, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1544, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1545, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1544, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1545, __pyx_L1_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1544, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1545, __pyx_L1_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1544, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -162082,7 +162119,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         __Pyx_GOTREF(__pyx_t_7);
         index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(9, 1545, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(9, 1544, __pyx_L1_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L7_unpacking_done;
@@ -162090,7 +162127,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1545, __pyx_L1_error)
+        __PYX_ERR(9, 1544, __pyx_L1_error)
         __pyx_L7_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_6);
@@ -162100,17 +162137,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":1544
+      /* "src/lxml/serializer.pxi":1543
  *             # _find_prefix() may append to new_namespaces => build them first
  *             attributes = [
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)             # <<<<<<<<<<<<<<
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:
  */
-      if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_ns)->tp_name), 0))) __PYX_ERR(9, 1544, __pyx_L1_error)
-      __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), __pyx_v_flat_namespace_map, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1544, __pyx_L1_error)
+      if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_ns)->tp_name), 0))) __PYX_ERR(9, 1543, __pyx_L1_error)
+      __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), __pyx_v_flat_namespace_map, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1543, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1544, __pyx_L1_error)
+      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1543, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_5);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
@@ -162121,10 +162158,10 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_GIVEREF(__pyx_v_value);
       PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_value);
       __pyx_t_5 = 0;
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_8))) __PYX_ERR(9, 1543, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_8))) __PYX_ERR(9, 1542, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "src/lxml/serializer.pxi":1545
+      /* "src/lxml/serializer.pxi":1544
  *             attributes = [
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]             # <<<<<<<<<<<<<<
@@ -162136,7 +162173,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
     __Pyx_DECREF_SET(__pyx_v_attributes, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1541
+    /* "src/lxml/serializer.pxi":1540
  *                                           dict flat_namespace_map,
  *                                           list new_namespaces):
  *         if attributes:             # <<<<<<<<<<<<<<
@@ -162145,7 +162182,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
   }
 
-  /* "src/lxml/serializer.pxi":1546
+  /* "src/lxml/serializer.pxi":1545
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:             # <<<<<<<<<<<<<<
@@ -162155,7 +162192,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __pyx_t_1 = (__pyx_v_new_namespaces != Py_None)&&(PyList_GET_SIZE(__pyx_v_new_namespaces) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1547
+    /* "src/lxml/serializer.pxi":1546
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:
  *             new_namespaces.sort()             # <<<<<<<<<<<<<<
@@ -162164,22 +162201,22 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     if (unlikely(__pyx_v_new_namespaces == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "sort");
-      __PYX_ERR(9, 1547, __pyx_L1_error)
+      __PYX_ERR(9, 1546, __pyx_L1_error)
     }
-    __pyx_t_11 = PyList_Sort(__pyx_v_new_namespaces); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 1547, __pyx_L1_error)
+    __pyx_t_11 = PyList_Sort(__pyx_v_new_namespaces); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 1546, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1548
+    /* "src/lxml/serializer.pxi":1547
  *         if new_namespaces:
  *             new_namespaces.sort()
  *             self._write_attributes_list(new_namespaces)             # <<<<<<<<<<<<<<
  *         if attributes:
  *             self._write_attributes_list(attributes)
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1548, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1547, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1546
+    /* "src/lxml/serializer.pxi":1545
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:             # <<<<<<<<<<<<<<
@@ -162188,7 +162225,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
   }
 
-  /* "src/lxml/serializer.pxi":1549
+  /* "src/lxml/serializer.pxi":1548
  *             new_namespaces.sort()
  *             self._write_attributes_list(new_namespaces)
  *         if attributes:             # <<<<<<<<<<<<<<
@@ -162198,18 +162235,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __pyx_t_1 = (__pyx_v_attributes != Py_None)&&(PyList_GET_SIZE(__pyx_v_attributes) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1550
+    /* "src/lxml/serializer.pxi":1549
  *             self._write_attributes_list(new_namespaces)
  *         if attributes:
  *             self._write_attributes_list(attributes)             # <<<<<<<<<<<<<<
  * 
  *     cdef _write_attributes_list(self, list attributes):
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_attributes); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1550, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_attributes); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1549, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1549
+    /* "src/lxml/serializer.pxi":1548
  *             new_namespaces.sort()
  *             self._write_attributes_list(new_namespaces)
  *         if attributes:             # <<<<<<<<<<<<<<
@@ -162218,7 +162255,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
   }
 
-  /* "src/lxml/serializer.pxi":1538
+  /* "src/lxml/serializer.pxi":1537
  *         self._status = WRITER_IN_ELEMENT
  * 
  *     cdef _write_attributes_and_namespaces(self, list attributes,             # <<<<<<<<<<<<<<
@@ -162249,7 +162286,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1552
+/* "src/lxml/serializer.pxi":1551
  *             self._write_attributes_list(attributes)
  * 
  *     cdef _write_attributes_list(self, list attributes):             # <<<<<<<<<<<<<<
@@ -162276,7 +162313,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_attributes_list", 0);
 
-  /* "src/lxml/serializer.pxi":1553
+  /* "src/lxml/serializer.pxi":1552
  * 
  *     cdef _write_attributes_list(self, list attributes):
  *         for prefix, name, value in attributes:             # <<<<<<<<<<<<<<
@@ -162285,15 +162322,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
   if (unlikely(__pyx_v_attributes == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(9, 1553, __pyx_L1_error)
+    __PYX_ERR(9, 1552, __pyx_L1_error)
   }
   __pyx_t_1 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   for (;;) {
     if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(9, 1553, __pyx_L1_error)
+    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(9, 1552, __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(9, 1553, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1552, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
@@ -162302,7 +162339,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(9, 1553, __pyx_L1_error)
+        __PYX_ERR(9, 1552, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -162318,17 +162355,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1553, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1552, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1553, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1552, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1553, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1552, __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(9, 1553, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1552, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -162338,7 +162375,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __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(9, 1553, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(9, 1552, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -162346,7 +162383,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(9, 1553, __pyx_L1_error)
+      __PYX_ERR(9, 1552, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_4);
@@ -162356,7 +162393,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":1554
+    /* "src/lxml/serializer.pxi":1553
  *     cdef _write_attributes_list(self, list attributes):
  *         for prefix, name, value in attributes:
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ' ')             # <<<<<<<<<<<<<<
@@ -162365,20 +162402,20 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, ((const char *)" ")));
 
-    /* "src/lxml/serializer.pxi":1555
+    /* "src/lxml/serializer.pxi":1554
  *         for prefix, name, value in attributes:
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ' ')
  *             self._write_qname(name, prefix)             # <<<<<<<<<<<<<<
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')
  *             _write_attr_string(self._c_out, _cstr(value))
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1555, __pyx_L1_error)
-    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1555, __pyx_L1_error)
-    __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1555, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1554, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1554, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1554, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/lxml/serializer.pxi":1556
+    /* "src/lxml/serializer.pxi":1555
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ' ')
  *             self._write_qname(name, prefix)
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')             # <<<<<<<<<<<<<<
@@ -162387,18 +162424,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 2, ((const char *)"=\"")));
 
-    /* "src/lxml/serializer.pxi":1557
+    /* "src/lxml/serializer.pxi":1556
  *             self._write_qname(name, prefix)
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')
  *             _write_attr_string(self._c_out, _cstr(value))             # <<<<<<<<<<<<<<
  * 
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '"')
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__write_attr_string(__pyx_v_self->_c_out, PyBytes_AS_STRING(__pyx_v_value)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1557, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__write_attr_string(__pyx_v_self->_c_out, PyBytes_AS_STRING(__pyx_v_value)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1556, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/lxml/serializer.pxi":1559
+    /* "src/lxml/serializer.pxi":1558
  *             _write_attr_string(self._c_out, _cstr(value))
  * 
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '"')             # <<<<<<<<<<<<<<
@@ -162407,7 +162444,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, ((const char *)"\"")));
 
-    /* "src/lxml/serializer.pxi":1553
+    /* "src/lxml/serializer.pxi":1552
  * 
  *     cdef _write_attributes_list(self, list attributes):
  *         for prefix, name, value in attributes:             # <<<<<<<<<<<<<<
@@ -162417,7 +162454,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1552
+  /* "src/lxml/serializer.pxi":1551
  *             self._write_attributes_list(attributes)
  * 
  *     cdef _write_attributes_list(self, list attributes):             # <<<<<<<<<<<<<<
@@ -162446,7 +162483,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1561
+/* "src/lxml/serializer.pxi":1560
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '"')
  * 
  *     cdef _write_end_element(self, element_config):             # <<<<<<<<<<<<<<
@@ -162473,7 +162510,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_end_element", 0);
 
-  /* "src/lxml/serializer.pxi":1562
+  /* "src/lxml/serializer.pxi":1561
  * 
  *     cdef _write_end_element(self, element_config):
  *         if self._status != WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -162483,14 +162520,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   __pyx_t_1 = ((__pyx_v_self->_status != __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1563
+    /* "src/lxml/serializer.pxi":1562
  *     cdef _write_end_element(self, element_config):
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")             # <<<<<<<<<<<<<<
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1563, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1562, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -162504,14 +162541,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_not_in_an_element) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_not_in_an_element);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1563, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1562, __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(9, 1563, __pyx_L1_error)
+    __PYX_ERR(9, 1562, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1562
+    /* "src/lxml/serializer.pxi":1561
  * 
  *     cdef _write_end_element(self, element_config):
  *         if self._status != WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -162520,7 +162557,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   }
 
-  /* "src/lxml/serializer.pxi":1564
+  /* "src/lxml/serializer.pxi":1563
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:             # <<<<<<<<<<<<<<
@@ -162536,32 +162573,32 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   }
   if (unlikely(__pyx_v_self->_element_stack == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(9, 1564, __pyx_L1_error)
+    __PYX_ERR(9, 1563, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_self->_element_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1564, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_self->_element_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 2, NULL, NULL, &__pyx_slice__82, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1564, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 2, NULL, NULL, &__pyx_slice__82, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_element_config, 0, 2, NULL, NULL, &__pyx_slice__82, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1564, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_element_config, 0, 2, NULL, NULL, &__pyx_slice__82, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1564, __pyx_L1_error)
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1563, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1564, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1563, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_1 = __pyx_t_6;
   __pyx_L5_bool_binop_done:;
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1565
+    /* "src/lxml/serializer.pxi":1564
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")             # <<<<<<<<<<<<<<
  * 
  *         # If previous write operations failed, the context manager exit might still call us.
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1565, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1564, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
@@ -162575,14 +162612,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     }
     __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_inconsistent_exit_action_in_cont) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_inconsistent_exit_action_in_cont);
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1565, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1564, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(9, 1565, __pyx_L1_error)
+    __PYX_ERR(9, 1564, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1564
+    /* "src/lxml/serializer.pxi":1563
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:             # <<<<<<<<<<<<<<
@@ -162591,19 +162628,19 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   }
 
-  /* "src/lxml/serializer.pxi":1570
+  /* "src/lxml/serializer.pxi":1569
  *         # That is ok, but we stop writing closing tags and handling errors in that case.
  *         # For all non-I/O errors, we continue writing closing tags if we can.
  *         ok_to_write = self._c_out.error == xmlerror.XML_ERR_OK             # <<<<<<<<<<<<<<
  * 
  *         name, prefix = self._element_stack.pop()[1:3]
  */
-  __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_self->_c_out->error == XML_ERR_OK)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1570, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_self->_c_out->error == XML_ERR_OK)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1569, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_ok_to_write = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1572
+  /* "src/lxml/serializer.pxi":1571
  *         ok_to_write = self._c_out.error == xmlerror.XML_ERR_OK
  * 
  *         name, prefix = self._element_stack.pop()[1:3]             # <<<<<<<<<<<<<<
@@ -162612,11 +162649,11 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   if (unlikely(__pyx_v_self->_element_stack == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop");
-    __PYX_ERR(9, 1572, __pyx_L1_error)
+    __PYX_ERR(9, 1571, __pyx_L1_error)
   }
-  __pyx_t_4 = __Pyx_PyList_Pop(__pyx_v_self->_element_stack); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1572, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyList_Pop(__pyx_v_self->_element_stack); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 3, NULL, NULL, &__pyx_slice__83, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1572, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 3, NULL, NULL, &__pyx_slice__83, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
@@ -162625,7 +162662,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(9, 1572, __pyx_L1_error)
+      __PYX_ERR(9, 1571, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -162638,15 +162675,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1572, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1571, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1572, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1571, __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_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1572, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1571, __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;
@@ -162654,7 +162691,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __Pyx_GOTREF(__pyx_t_4);
     index = 1; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(9, 1572, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(9, 1571, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L8_unpacking_done;
@@ -162662,7 +162699,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(9, 1572, __pyx_L1_error)
+    __PYX_ERR(9, 1571, __pyx_L1_error)
     __pyx_L8_unpacking_done:;
   }
   __pyx_v_name = __pyx_t_4;
@@ -162670,17 +162707,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   __pyx_v_prefix = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1573
+  /* "src/lxml/serializer.pxi":1572
  * 
  *         name, prefix = self._element_stack.pop()[1:3]
  *         if ok_to_write:             # <<<<<<<<<<<<<<
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *             self._write_qname(name, prefix)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ok_to_write); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1573, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ok_to_write); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1572, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1574
+    /* "src/lxml/serializer.pxi":1573
  *         name, prefix = self._element_stack.pop()[1:3]
  *         if ok_to_write:
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '</')             # <<<<<<<<<<<<<<
@@ -162689,20 +162726,20 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 2, ((const char *)"</")));
 
-    /* "src/lxml/serializer.pxi":1575
+    /* "src/lxml/serializer.pxi":1574
  *         if ok_to_write:
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *             self._write_qname(name, prefix)             # <<<<<<<<<<<<<<
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  * 
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1575, __pyx_L1_error)
-    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1575, __pyx_L1_error)
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1575, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1574, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1574, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1574, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1576
+    /* "src/lxml/serializer.pxi":1575
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *             self._write_qname(name, prefix)
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '>')             # <<<<<<<<<<<<<<
@@ -162711,7 +162748,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
     (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, ((const char *)">")));
 
-    /* "src/lxml/serializer.pxi":1573
+    /* "src/lxml/serializer.pxi":1572
  * 
  *         name, prefix = self._element_stack.pop()[1:3]
  *         if ok_to_write:             # <<<<<<<<<<<<<<
@@ -162720,7 +162757,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   }
 
-  /* "src/lxml/serializer.pxi":1578
+  /* "src/lxml/serializer.pxi":1577
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  * 
  *         if not self._element_stack:             # <<<<<<<<<<<<<<
@@ -162731,7 +162768,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   __pyx_t_6 = ((!__pyx_t_1) != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/serializer.pxi":1579
+    /* "src/lxml/serializer.pxi":1578
  * 
  *         if not self._element_stack:
  *             self._status = WRITER_FINISHED             # <<<<<<<<<<<<<<
@@ -162740,7 +162777,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
     __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_FINISHED;
 
-    /* "src/lxml/serializer.pxi":1578
+    /* "src/lxml/serializer.pxi":1577
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  * 
  *         if not self._element_stack:             # <<<<<<<<<<<<<<
@@ -162749,17 +162786,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   }
 
-  /* "src/lxml/serializer.pxi":1580
+  /* "src/lxml/serializer.pxi":1579
  *         if not self._element_stack:
  *             self._status = WRITER_FINISHED
  *         if ok_to_write:             # <<<<<<<<<<<<<<
  *             if not self._buffered:
  *                 tree.xmlOutputBufferFlush(self._c_out)
  */
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_ok_to_write); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1580, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_ok_to_write); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 1579, __pyx_L1_error)
   if (__pyx_t_6) {
 
-    /* "src/lxml/serializer.pxi":1581
+    /* "src/lxml/serializer.pxi":1580
  *             self._status = WRITER_FINISHED
  *         if ok_to_write:
  *             if not self._buffered:             # <<<<<<<<<<<<<<
@@ -162769,7 +162806,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __pyx_t_6 = ((!(__pyx_v_self->_buffered != 0)) != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/serializer.pxi":1582
+      /* "src/lxml/serializer.pxi":1581
  *         if ok_to_write:
  *             if not self._buffered:
  *                 tree.xmlOutputBufferFlush(self._c_out)             # <<<<<<<<<<<<<<
@@ -162778,7 +162815,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
       (void)(xmlOutputBufferFlush(__pyx_v_self->_c_out));
 
-      /* "src/lxml/serializer.pxi":1581
+      /* "src/lxml/serializer.pxi":1580
  *             self._status = WRITER_FINISHED
  *         if ok_to_write:
  *             if not self._buffered:             # <<<<<<<<<<<<<<
@@ -162787,18 +162824,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
     }
 
-    /* "src/lxml/serializer.pxi":1583
+    /* "src/lxml/serializer.pxi":1582
  *             if not self._buffered:
  *                 tree.xmlOutputBufferFlush(self._c_out)
  *             self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1583, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1582, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1580
+    /* "src/lxml/serializer.pxi":1579
  *         if not self._element_stack:
  *             self._status = WRITER_FINISHED
  *         if ok_to_write:             # <<<<<<<<<<<<<<
@@ -162807,7 +162844,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   }
 
-  /* "src/lxml/serializer.pxi":1561
+  /* "src/lxml/serializer.pxi":1560
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '"')
  * 
  *     cdef _write_end_element(self, element_config):             # <<<<<<<<<<<<<<
@@ -162834,7 +162871,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1585
+/* "src/lxml/serializer.pxi":1584
  *             self._handle_error(self._c_out.error)
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):             # <<<<<<<<<<<<<<
@@ -162858,7 +162895,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_find_prefix", 0);
 
-  /* "src/lxml/serializer.pxi":1586
+  /* "src/lxml/serializer.pxi":1585
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  *         if href is None:             # <<<<<<<<<<<<<<
@@ -162869,7 +162906,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1587
+    /* "src/lxml/serializer.pxi":1586
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  *         if href is None:
  *             return None             # <<<<<<<<<<<<<<
@@ -162880,7 +162917,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1586
+    /* "src/lxml/serializer.pxi":1585
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  *         if href is None:             # <<<<<<<<<<<<<<
@@ -162889,7 +162926,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   }
 
-  /* "src/lxml/serializer.pxi":1588
+  /* "src/lxml/serializer.pxi":1587
  *         if href is None:
  *             return None
  *         if href in flat_namespaces_map:             # <<<<<<<<<<<<<<
@@ -162898,13 +162935,13 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   if (unlikely(__pyx_v_flat_namespaces_map == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(9, 1588, __pyx_L1_error)
+    __PYX_ERR(9, 1587, __pyx_L1_error)
   }
-  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_href, __pyx_v_flat_namespaces_map, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1588, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_href, __pyx_v_flat_namespaces_map, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1587, __pyx_L1_error)
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1589
+    /* "src/lxml/serializer.pxi":1588
  *             return None
  *         if href in flat_namespaces_map:
  *             return flat_namespaces_map[href]             # <<<<<<<<<<<<<<
@@ -162914,15 +162951,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_flat_namespaces_map == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(9, 1589, __pyx_L1_error)
+      __PYX_ERR(9, 1588, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_flat_namespaces_map, __pyx_v_href); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1589, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_flat_namespaces_map, __pyx_v_href); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1588, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1588
+    /* "src/lxml/serializer.pxi":1587
  *         if href is None:
  *             return None
  *         if href in flat_namespaces_map:             # <<<<<<<<<<<<<<
@@ -162931,7 +162968,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   }
 
-  /* "src/lxml/serializer.pxi":1591
+  /* "src/lxml/serializer.pxi":1590
  *             return flat_namespaces_map[href]
  *         # need to create a new prefix
  *         prefixes = flat_namespaces_map.values()             # <<<<<<<<<<<<<<
@@ -162940,14 +162977,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   if (unlikely(__pyx_v_flat_namespaces_map == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
-    __PYX_ERR(9, 1591, __pyx_L1_error)
+    __PYX_ERR(9, 1590, __pyx_L1_error)
   }
-  __pyx_t_3 = __Pyx_PyDict_Values(__pyx_v_flat_namespaces_map); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1591, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_Values(__pyx_v_flat_namespaces_map); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_prefixes = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1592
+  /* "src/lxml/serializer.pxi":1591
  *         # need to create a new prefix
  *         prefixes = flat_namespaces_map.values()
  *         i = 0             # <<<<<<<<<<<<<<
@@ -162957,7 +162994,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_i = __pyx_int_0;
 
-  /* "src/lxml/serializer.pxi":1593
+  /* "src/lxml/serializer.pxi":1592
  *         prefixes = flat_namespaces_map.values()
  *         i = 0
  *         while True:             # <<<<<<<<<<<<<<
@@ -162966,33 +163003,33 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   while (1) {
 
-    /* "src/lxml/serializer.pxi":1594
+    /* "src/lxml/serializer.pxi":1593
  *         i = 0
  *         while True:
  *             prefix = _utf8('ns%d' % i)             # <<<<<<<<<<<<<<
  *             if prefix not in prefixes:
  *                 new_namespaces.append((b'xmlns', prefix, href))
  */
-    __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_ns_d, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1594, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_ns_d, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1593, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1594, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1593, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF_SET(__pyx_v_prefix, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1595
+    /* "src/lxml/serializer.pxi":1594
  *         while True:
  *             prefix = _utf8('ns%d' % i)
  *             if prefix not in prefixes:             # <<<<<<<<<<<<<<
  *                 new_namespaces.append((b'xmlns', prefix, href))
  *                 flat_namespaces_map[href] = prefix
  */
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_prefix, __pyx_v_prefixes, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1595, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_prefix, __pyx_v_prefixes, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(9, 1594, __pyx_L1_error)
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":1596
+      /* "src/lxml/serializer.pxi":1595
  *             prefix = _utf8('ns%d' % i)
  *             if prefix not in prefixes:
  *                 new_namespaces.append((b'xmlns', prefix, href))             # <<<<<<<<<<<<<<
@@ -163001,9 +163038,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
       if (unlikely(__pyx_v_new_namespaces == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-        __PYX_ERR(9, 1596, __pyx_L1_error)
+        __PYX_ERR(9, 1595, __pyx_L1_error)
       }
-      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1596, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1595, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_n_b_xmlns_2);
       __Pyx_GIVEREF(__pyx_n_b_xmlns_2);
@@ -163014,10 +163051,10 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
       __Pyx_INCREF(__pyx_v_href);
       __Pyx_GIVEREF(__pyx_v_href);
       PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_href);
-      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_new_namespaces, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1596, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_new_namespaces, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(9, 1595, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "src/lxml/serializer.pxi":1597
+      /* "src/lxml/serializer.pxi":1596
  *             if prefix not in prefixes:
  *                 new_namespaces.append((b'xmlns', prefix, href))
  *                 flat_namespaces_map[href] = prefix             # <<<<<<<<<<<<<<
@@ -163026,11 +163063,11 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
       if (unlikely(__pyx_v_flat_namespaces_map == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(9, 1597, __pyx_L1_error)
+        __PYX_ERR(9, 1596, __pyx_L1_error)
       }
-      if (unlikely(PyDict_SetItem(__pyx_v_flat_namespaces_map, __pyx_v_href, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1597, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_flat_namespaces_map, __pyx_v_href, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1596, __pyx_L1_error)
 
-      /* "src/lxml/serializer.pxi":1598
+      /* "src/lxml/serializer.pxi":1597
  *                 new_namespaces.append((b'xmlns', prefix, href))
  *                 flat_namespaces_map[href] = prefix
  *                 return prefix             # <<<<<<<<<<<<<<
@@ -163042,7 +163079,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
       __pyx_r = __pyx_v_prefix;
       goto __pyx_L0;
 
-      /* "src/lxml/serializer.pxi":1595
+      /* "src/lxml/serializer.pxi":1594
  *         while True:
  *             prefix = _utf8('ns%d' % i)
  *             if prefix not in prefixes:             # <<<<<<<<<<<<<<
@@ -163051,20 +163088,20 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
     }
 
-    /* "src/lxml/serializer.pxi":1599
+    /* "src/lxml/serializer.pxi":1598
  *                 flat_namespaces_map[href] = prefix
  *                 return prefix
  *             i += 1             # <<<<<<<<<<<<<<
  * 
  *     cdef _collect_namespaces(self, dict nsmap):
  */
-    __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1599, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1598, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_4);
     __pyx_t_4 = 0;
   }
 
-  /* "src/lxml/serializer.pxi":1585
+  /* "src/lxml/serializer.pxi":1584
  *             self._handle_error(self._c_out.error)
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):             # <<<<<<<<<<<<<<
@@ -163089,7 +163126,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1601
+/* "src/lxml/serializer.pxi":1600
  *             i += 1
  * 
  *     cdef _collect_namespaces(self, dict nsmap):             # <<<<<<<<<<<<<<
@@ -163119,31 +163156,31 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_collect_namespaces", 0);
 
-  /* "src/lxml/serializer.pxi":1602
+  /* "src/lxml/serializer.pxi":1601
  * 
  *     cdef _collect_namespaces(self, dict nsmap):
  *         new_namespaces = []             # <<<<<<<<<<<<<<
  *         flat_namespaces_map = {}
  *         for ns, prefix in nsmap.iteritems():
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1602, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1601, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_new_namespaces = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1603
+  /* "src/lxml/serializer.pxi":1602
  *     cdef _collect_namespaces(self, dict nsmap):
  *         new_namespaces = []
  *         flat_namespaces_map = {}             # <<<<<<<<<<<<<<
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1603, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_flat_namespaces_map = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1604
+  /* "src/lxml/serializer.pxi":1603
  *         new_namespaces = []
  *         flat_namespaces_map = {}
  *         for ns, prefix in nsmap.iteritems():             # <<<<<<<<<<<<<<
@@ -163153,9 +163190,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   __pyx_t_2 = 0;
   if (unlikely(__pyx_v_nsmap == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "iteritems");
-    __PYX_ERR(9, 1604, __pyx_L1_error)
+    __PYX_ERR(9, 1603, __pyx_L1_error)
   }
-  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_nsmap, 1, __pyx_n_s_iteritems, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1604, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_nsmap, 1, __pyx_n_s_iteritems, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1603, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_1);
   __pyx_t_1 = __pyx_t_5;
@@ -163163,7 +163200,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   while (1) {
     __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
     if (unlikely(__pyx_t_7 == 0)) break;
-    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 1604, __pyx_L1_error)
+    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 1603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_5);
@@ -163171,16 +163208,16 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":1605
+    /* "src/lxml/serializer.pxi":1604
  *         flat_namespaces_map = {}
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix             # <<<<<<<<<<<<<<
  *             if prefix is None:
  *                 # use empty bytes rather than None to allow sorting
  */
-    if (unlikely(PyDict_SetItem(__pyx_v_flat_namespaces_map, __pyx_v_ns, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1605, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_flat_namespaces_map, __pyx_v_ns, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1604, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1606
+    /* "src/lxml/serializer.pxi":1605
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix
  *             if prefix is None:             # <<<<<<<<<<<<<<
@@ -163191,14 +163228,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     __pyx_t_9 = (__pyx_t_8 != 0);
     if (__pyx_t_9) {
 
-      /* "src/lxml/serializer.pxi":1608
+      /* "src/lxml/serializer.pxi":1607
  *             if prefix is None:
  *                 # use empty bytes rather than None to allow sorting
  *                 new_namespaces.append((b'', b'xmlns', ns))             # <<<<<<<<<<<<<<
  *             else:
  *                 new_namespaces.append((b'xmlns', prefix, ns))
  */
-      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1608, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1607, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_INCREF(__pyx_kp_b__12);
       __Pyx_GIVEREF(__pyx_kp_b__12);
@@ -163209,10 +163246,10 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       __Pyx_INCREF(__pyx_v_ns);
       __Pyx_GIVEREF(__pyx_v_ns);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_ns);
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(9, 1608, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(9, 1607, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":1606
+      /* "src/lxml/serializer.pxi":1605
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix
  *             if prefix is None:             # <<<<<<<<<<<<<<
@@ -163222,7 +163259,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       goto __pyx_L5;
     }
 
-    /* "src/lxml/serializer.pxi":1610
+    /* "src/lxml/serializer.pxi":1609
  *                 new_namespaces.append((b'', b'xmlns', ns))
  *             else:
  *                 new_namespaces.append((b'xmlns', prefix, ns))             # <<<<<<<<<<<<<<
@@ -163230,7 +163267,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
  *         if self._element_stack:
  */
     /*else*/ {
-      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1610, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1609, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_INCREF(__pyx_n_b_xmlns_2);
       __Pyx_GIVEREF(__pyx_n_b_xmlns_2);
@@ -163241,14 +163278,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       __Pyx_INCREF(__pyx_v_ns);
       __Pyx_GIVEREF(__pyx_v_ns);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_ns);
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(9, 1610, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(9, 1609, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __pyx_L5:;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1612
+  /* "src/lxml/serializer.pxi":1611
  *                 new_namespaces.append((b'xmlns', prefix, ns))
  *         # merge in flat namespace map of parent
  *         if self._element_stack:             # <<<<<<<<<<<<<<
@@ -163258,7 +163295,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   __pyx_t_9 = (__pyx_v_self->_element_stack != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_element_stack) != 0);
   if (__pyx_t_9) {
 
-    /* "src/lxml/serializer.pxi":1613
+    /* "src/lxml/serializer.pxi":1612
  *         # merge in flat namespace map of parent
  *         if self._element_stack:
  *             for ns, prefix in (<dict>self._element_stack[-1][-1]).iteritems():             # <<<<<<<<<<<<<<
@@ -163268,18 +163305,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     __pyx_t_3 = 0;
     if (unlikely(__pyx_v_self->_element_stack == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(9, 1613, __pyx_L1_error)
+      __PYX_ERR(9, 1612, __pyx_L1_error)
     }
-    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_self->_element_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1613, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_self->_element_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1612, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1613, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1612, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (unlikely(__pyx_t_5 == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "iteritems");
-      __PYX_ERR(9, 1613, __pyx_L1_error)
+      __PYX_ERR(9, 1612, __pyx_L1_error)
     }
-    __pyx_t_6 = __Pyx_dict_iterator(((PyObject*)__pyx_t_5), 1, __pyx_n_s_iteritems, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1613, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_dict_iterator(((PyObject*)__pyx_t_5), 1, __pyx_n_s_iteritems, (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1612, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_1);
@@ -163288,7 +163325,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     while (1) {
       __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_3, &__pyx_t_6, &__pyx_t_5, NULL, __pyx_t_4);
       if (unlikely(__pyx_t_7 == 0)) break;
-      if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 1613, __pyx_L1_error)
+      if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 1612, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_6);
@@ -163296,30 +163333,30 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "src/lxml/serializer.pxi":1614
+      /* "src/lxml/serializer.pxi":1613
  *         if self._element_stack:
  *             for ns, prefix in (<dict>self._element_stack[-1][-1]).iteritems():
  *                 if flat_namespaces_map.get(ns) is None:             # <<<<<<<<<<<<<<
  *                     # unknown or empty prefix => prefer a 'real' prefix
  *                     flat_namespaces_map[ns] = prefix
  */
-      __pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v_flat_namespaces_map, __pyx_v_ns, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1614, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v_flat_namespaces_map, __pyx_v_ns, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1613, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_9 = (__pyx_t_5 == Py_None);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_8 = (__pyx_t_9 != 0);
       if (__pyx_t_8) {
 
-        /* "src/lxml/serializer.pxi":1616
+        /* "src/lxml/serializer.pxi":1615
  *                 if flat_namespaces_map.get(ns) is None:
  *                     # unknown or empty prefix => prefer a 'real' prefix
  *                     flat_namespaces_map[ns] = prefix             # <<<<<<<<<<<<<<
  *         return flat_namespaces_map, new_namespaces
  * 
  */
-        if (unlikely(PyDict_SetItem(__pyx_v_flat_namespaces_map, __pyx_v_ns, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1616, __pyx_L1_error)
+        if (unlikely(PyDict_SetItem(__pyx_v_flat_namespaces_map, __pyx_v_ns, __pyx_v_prefix) < 0)) __PYX_ERR(9, 1615, __pyx_L1_error)
 
-        /* "src/lxml/serializer.pxi":1614
+        /* "src/lxml/serializer.pxi":1613
  *         if self._element_stack:
  *             for ns, prefix in (<dict>self._element_stack[-1][-1]).iteritems():
  *                 if flat_namespaces_map.get(ns) is None:             # <<<<<<<<<<<<<<
@@ -163330,7 +163367,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/serializer.pxi":1612
+    /* "src/lxml/serializer.pxi":1611
  *                 new_namespaces.append((b'xmlns', prefix, ns))
  *         # merge in flat namespace map of parent
  *         if self._element_stack:             # <<<<<<<<<<<<<<
@@ -163339,7 +163376,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
  */
   }
 
-  /* "src/lxml/serializer.pxi":1617
+  /* "src/lxml/serializer.pxi":1616
  *                     # unknown or empty prefix => prefer a 'real' prefix
  *                     flat_namespaces_map[ns] = prefix
  *         return flat_namespaces_map, new_namespaces             # <<<<<<<<<<<<<<
@@ -163347,7 +163384,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False, method=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1617, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_flat_namespaces_map);
   __Pyx_GIVEREF(__pyx_v_flat_namespaces_map);
@@ -163359,7 +163396,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1601
+  /* "src/lxml/serializer.pxi":1600
  *             i += 1
  * 
  *     cdef _collect_namespaces(self, dict nsmap):             # <<<<<<<<<<<<<<
@@ -163384,7 +163421,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1619
+/* "src/lxml/serializer.pxi":1618
  *         return flat_namespaces_map, new_namespaces
  * 
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False, method=None):             # <<<<<<<<<<<<<<
@@ -163437,19 +163474,19 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_13write(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "write") < 0)) __PYX_ERR(9, 1619, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "write") < 0)) __PYX_ERR(9, 1618, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 0) {
       goto __pyx_L5_argtuple_error;
     } else {
     }
     if (values[0]) {
-      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1619, __pyx_L3_error)
+      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1618, __pyx_L3_error)
     } else {
       __pyx_v_with_tail = ((int)1);
     }
     if (values[1]) {
-      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1619, __pyx_L3_error)
+      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1618, __pyx_L3_error)
     } else {
       __pyx_v_pretty_print = ((int)0);
     }
@@ -163457,7 +163494,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_13write(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 0, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1619, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write", 0, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1618, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -163502,7 +163539,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "src/lxml/serializer.pxi":1627
+  /* "src/lxml/serializer.pxi":1626
  *         to temporarily override the output method.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -163513,12 +163550,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1627, __pyx_L1_error)
+      __PYX_ERR(9, 1626, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1628
+  /* "src/lxml/serializer.pxi":1627
  *         """
  *         assert self._c_out is not NULL
  *         c_method = self._method if method is None else _findOutputMethod(method)             # <<<<<<<<<<<<<<
@@ -163529,12 +163566,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   if ((__pyx_t_2 != 0)) {
     __pyx_t_1 = __pyx_v_self->_method;
   } else {
-    __pyx_t_3 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1628, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__findOutputMethod(__pyx_v_method); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1627, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_3;
   }
   __pyx_v_c_method = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":1630
+  /* "src/lxml/serializer.pxi":1629
  *         c_method = self._method if method is None else _findOutputMethod(method)
  * 
  *         for content in args:             # <<<<<<<<<<<<<<
@@ -163545,15 +163582,15 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   for (;;) {
     if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(9, 1630, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(9, 1629, __pyx_L1_error)
     #else
-    __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1630, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1629, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_content, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":1631
+    /* "src/lxml/serializer.pxi":1630
  * 
  *         for content in args:
  *             if _isString(content):             # <<<<<<<<<<<<<<
@@ -163563,7 +163600,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
     __pyx_t_2 = (_isString(__pyx_v_content) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":1632
+      /* "src/lxml/serializer.pxi":1631
  *         for content in args:
  *             if _isString(content):
  *                 if self._status != WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -163573,7 +163610,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_2 = ((__pyx_v_self->_status != __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
       if (__pyx_t_2) {
 
-        /* "src/lxml/serializer.pxi":1633
+        /* "src/lxml/serializer.pxi":1632
  *             if _isString(content):
  *                 if self._status != WRITER_IN_ELEMENT:
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():             # <<<<<<<<<<<<<<
@@ -163586,7 +163623,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
           __pyx_t_2 = __pyx_t_7;
           goto __pyx_L8_bool_binop_done;
         }
-        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_content, __pyx_n_s_strip); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1633, __pyx_L1_error)
+        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_content, __pyx_n_s_strip); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
         __pyx_t_9 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
@@ -163600,23 +163637,23 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         }
         __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
         __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
-        if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1633, __pyx_L1_error)
+        if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1632, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 1633, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 1632, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_2 = __pyx_t_7;
         __pyx_L8_bool_binop_done:;
         if (unlikely(__pyx_t_2)) {
 
-          /* "src/lxml/serializer.pxi":1634
+          /* "src/lxml/serializer.pxi":1633
  *                 if self._status != WRITER_IN_ELEMENT:
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():
  *                         raise LxmlSyntaxError("not in an element")             # <<<<<<<<<<<<<<
  *                 bstring = _utf8(content)
  *                 if not bstring:
  */
-          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1634, __pyx_L1_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1633, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_8);
           __pyx_t_9 = NULL;
           if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
@@ -163630,14 +163667,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
           }
           __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_kp_s_not_in_an_element) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_kp_s_not_in_an_element);
           __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
-          if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1634, __pyx_L1_error)
+          if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1633, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_Raise(__pyx_t_6, 0, 0, 0);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-          __PYX_ERR(9, 1634, __pyx_L1_error)
+          __PYX_ERR(9, 1633, __pyx_L1_error)
 
-          /* "src/lxml/serializer.pxi":1633
+          /* "src/lxml/serializer.pxi":1632
  *             if _isString(content):
  *                 if self._status != WRITER_IN_ELEMENT:
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():             # <<<<<<<<<<<<<<
@@ -163646,7 +163683,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
         }
 
-        /* "src/lxml/serializer.pxi":1632
+        /* "src/lxml/serializer.pxi":1631
  *         for content in args:
  *             if _isString(content):
  *                 if self._status != WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -163655,19 +163692,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       }
 
-      /* "src/lxml/serializer.pxi":1635
+      /* "src/lxml/serializer.pxi":1634
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():
  *                         raise LxmlSyntaxError("not in an element")
  *                 bstring = _utf8(content)             # <<<<<<<<<<<<<<
  *                 if not bstring:
  *                     continue
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree__utf8(__pyx_v_content); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1635, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_4lxml_5etree__utf8(__pyx_v_content); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_XDECREF_SET(__pyx_v_bstring, ((PyObject*)__pyx_t_6));
       __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":1636
+      /* "src/lxml/serializer.pxi":1635
  *                         raise LxmlSyntaxError("not in an element")
  *                 bstring = _utf8(content)
  *                 if not bstring:             # <<<<<<<<<<<<<<
@@ -163678,7 +163715,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_7 = ((!__pyx_t_2) != 0);
       if (__pyx_t_7) {
 
-        /* "src/lxml/serializer.pxi":1637
+        /* "src/lxml/serializer.pxi":1636
  *                 bstring = _utf8(content)
  *                 if not bstring:
  *                     continue             # <<<<<<<<<<<<<<
@@ -163687,7 +163724,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
         goto __pyx_L3_continue;
 
-        /* "src/lxml/serializer.pxi":1636
+        /* "src/lxml/serializer.pxi":1635
  *                         raise LxmlSyntaxError("not in an element")
  *                 bstring = _utf8(content)
  *                 if not bstring:             # <<<<<<<<<<<<<<
@@ -163696,7 +163733,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       }
 
-      /* "src/lxml/serializer.pxi":1639
+      /* "src/lxml/serializer.pxi":1638
  *                     continue
  * 
  *                 ns, name, _, _ = self._element_stack[-1]             # <<<<<<<<<<<<<<
@@ -163705,9 +163742,9 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       if (unlikely(__pyx_v_self->_element_stack == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(9, 1639, __pyx_L1_error)
+        __PYX_ERR(9, 1638, __pyx_L1_error)
       }
-      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_self->_element_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1639, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_self->_element_stack, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1638, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
         PyObject* sequence = __pyx_t_6;
@@ -163715,7 +163752,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         if (unlikely(size != 4)) {
           if (size > 4) __Pyx_RaiseTooManyValuesError(4);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(9, 1639, __pyx_L1_error)
+          __PYX_ERR(9, 1638, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -163738,7 +163775,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
           Py_ssize_t i;
           PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
           for (i=0; i < 4; i++) {
-            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(9, 1639, __pyx_L1_error)
+            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(9, 1638, __pyx_L1_error)
             __Pyx_GOTREF(item);
             *(temps[i]) = item;
           }
@@ -163748,7 +163785,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       } else {
         Py_ssize_t index = -1;
         PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
-        __pyx_t_12 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 1639, __pyx_L1_error)
+        __pyx_t_12 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(9, 1638, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
@@ -163757,7 +163794,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
           __Pyx_GOTREF(item);
           *(temps[index]) = item;
         }
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 4) < 0) __PYX_ERR(9, 1639, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 4) < 0) __PYX_ERR(9, 1638, __pyx_L1_error)
         __pyx_t_13 = NULL;
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         goto __pyx_L12_unpacking_done;
@@ -163765,7 +163802,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __pyx_t_13 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(9, 1639, __pyx_L1_error)
+        __PYX_ERR(9, 1638, __pyx_L1_error)
         __pyx_L12_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_8);
@@ -163777,7 +163814,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __Pyx_DECREF_SET(__pyx_v__, __pyx_t_11);
       __pyx_t_11 = 0;
 
-      /* "src/lxml/serializer.pxi":1640
+      /* "src/lxml/serializer.pxi":1639
  * 
  *                 ns, name, _, _ = self._element_stack[-1]
  *                 if (c_method == OUTPUT_METHOD_HTML and             # <<<<<<<<<<<<<<
@@ -163791,7 +163828,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         goto __pyx_L14_bool_binop_done;
       }
 
-      /* "src/lxml/serializer.pxi":1641
+      /* "src/lxml/serializer.pxi":1640
  *                 ns, name, _, _ = self._element_stack[-1]
  *                 if (c_method == OUTPUT_METHOD_HTML and
  *                         ns in (None, b'http://www.w3.org/1999/xhtml') and             # <<<<<<<<<<<<<<
@@ -163800,15 +163837,15 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       __Pyx_INCREF(__pyx_v_ns);
       __pyx_t_6 = __pyx_v_ns;
-      __pyx_t_11 = PyObject_RichCompare(__pyx_t_6, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1641, __pyx_L1_error)
-      __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(9, 1641, __pyx_L1_error)
+      __pyx_t_11 = PyObject_RichCompare(__pyx_t_6, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1640, __pyx_L1_error)
+      __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(9, 1640, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       if (!__pyx_t_14) {
       } else {
         __pyx_t_2 = __pyx_t_14;
         goto __pyx_L17_bool_binop_done;
       }
-      __pyx_t_14 = (__Pyx_PyBytes_Equals(__pyx_t_6, __pyx_kp_b_http_www_w3_org_1999_xhtml, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(9, 1641, __pyx_L1_error)
+      __pyx_t_14 = (__Pyx_PyBytes_Equals(__pyx_t_6, __pyx_kp_b_http_www_w3_org_1999_xhtml, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(9, 1640, __pyx_L1_error)
       __pyx_t_2 = __pyx_t_14;
       __pyx_L17_bool_binop_done:;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -163819,7 +163856,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         goto __pyx_L14_bool_binop_done;
       }
 
-      /* "src/lxml/serializer.pxi":1642
+      /* "src/lxml/serializer.pxi":1641
  *                 if (c_method == OUTPUT_METHOD_HTML and
  *                         ns in (None, b'http://www.w3.org/1999/xhtml') and
  *                         name in (b'script', b'style')):             # <<<<<<<<<<<<<<
@@ -163828,13 +163865,13 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       __Pyx_INCREF(__pyx_v_name);
       __pyx_t_6 = __pyx_v_name;
-      __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_t_6, __pyx_n_b_script, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1642, __pyx_L1_error)
+      __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_t_6, __pyx_n_b_script, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1641, __pyx_L1_error)
       if (!__pyx_t_2) {
       } else {
         __pyx_t_14 = __pyx_t_2;
         goto __pyx_L19_bool_binop_done;
       }
-      __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_t_6, __pyx_n_b_style, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1642, __pyx_L1_error)
+      __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_t_6, __pyx_n_b_style, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(9, 1641, __pyx_L1_error)
       __pyx_t_14 = __pyx_t_2;
       __pyx_L19_bool_binop_done:;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -163842,7 +163879,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_7 = __pyx_t_2;
       __pyx_L14_bool_binop_done:;
 
-      /* "src/lxml/serializer.pxi":1640
+      /* "src/lxml/serializer.pxi":1639
  * 
  *                 ns, name, _, _ = self._element_stack[-1]
  *                 if (c_method == OUTPUT_METHOD_HTML and             # <<<<<<<<<<<<<<
@@ -163851,7 +163888,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       if (__pyx_t_7) {
 
-        /* "src/lxml/serializer.pxi":1643
+        /* "src/lxml/serializer.pxi":1642
  *                         ns in (None, b'http://www.w3.org/1999/xhtml') and
  *                         name in (b'script', b'style')):
  *                     tree.xmlOutputBufferWrite(self._c_out, len(bstring), _cstr(bstring))             # <<<<<<<<<<<<<<
@@ -163860,12 +163897,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
         if (unlikely(__pyx_v_bstring == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-          __PYX_ERR(9, 1643, __pyx_L1_error)
+          __PYX_ERR(9, 1642, __pyx_L1_error)
         }
-        __pyx_t_15 = PyBytes_GET_SIZE(__pyx_v_bstring); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1643, __pyx_L1_error)
+        __pyx_t_15 = PyBytes_GET_SIZE(__pyx_v_bstring); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1642, __pyx_L1_error)
         (void)(xmlOutputBufferWrite(__pyx_v_self->_c_out, __pyx_t_15, PyBytes_AS_STRING(__pyx_v_bstring)));
 
-        /* "src/lxml/serializer.pxi":1640
+        /* "src/lxml/serializer.pxi":1639
  * 
  *                 ns, name, _, _ = self._element_stack[-1]
  *                 if (c_method == OUTPUT_METHOD_HTML and             # <<<<<<<<<<<<<<
@@ -163875,7 +163912,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         goto __pyx_L13;
       }
 
-      /* "src/lxml/serializer.pxi":1646
+      /* "src/lxml/serializer.pxi":1645
  * 
  *                 else:
  *                     tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(bstring), NULL)             # <<<<<<<<<<<<<<
@@ -163887,7 +163924,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       }
       __pyx_L13:;
 
-      /* "src/lxml/serializer.pxi":1631
+      /* "src/lxml/serializer.pxi":1630
  * 
  *         for content in args:
  *             if _isString(content):             # <<<<<<<<<<<<<<
@@ -163897,14 +163934,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       goto __pyx_L5;
     }
 
-    /* "src/lxml/serializer.pxi":1648
+    /* "src/lxml/serializer.pxi":1647
  *                     tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(bstring), NULL)
  * 
  *             elif iselement(content):             # <<<<<<<<<<<<<<
  *                 if self._status > WRITER_IN_ELEMENT:
  *                     raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_iselement); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1648, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_iselement); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __pyx_t_10 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
@@ -163918,14 +163955,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
     }
     __pyx_t_6 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, __pyx_v_content) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_content);
     __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1648, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 1648, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 1647, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (__pyx_t_7) {
 
-      /* "src/lxml/serializer.pxi":1649
+      /* "src/lxml/serializer.pxi":1648
  * 
  *             elif iselement(content):
  *                 if self._status > WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -163935,14 +163972,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_7 = ((__pyx_v_self->_status > __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
       if (unlikely(__pyx_t_7)) {
 
-        /* "src/lxml/serializer.pxi":1650
+        /* "src/lxml/serializer.pxi":1649
  *             elif iselement(content):
  *                 if self._status > WRITER_IN_ELEMENT:
  *                     raise LxmlSyntaxError("cannot append trailing element to complete XML document")             # <<<<<<<<<<<<<<
  *                 _writeNodeToBuffer(self._c_out, (<_Element>content)._c_node,
  *                                    self._c_encoding, NULL, c_method,
  */
-        __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1650, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1649, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __pyx_t_10 = NULL;
         if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
@@ -163956,14 +163993,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         }
         __pyx_t_6 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, __pyx_kp_s_cannot_append_trailing_element_t) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_kp_s_cannot_append_trailing_element_t);
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-        if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1650, __pyx_L1_error)
+        if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1649, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_Raise(__pyx_t_6, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-        __PYX_ERR(9, 1650, __pyx_L1_error)
+        __PYX_ERR(9, 1649, __pyx_L1_error)
 
-        /* "src/lxml/serializer.pxi":1649
+        /* "src/lxml/serializer.pxi":1648
  * 
  *             elif iselement(content):
  *                 if self._status > WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -163972,7 +164009,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       }
 
-      /* "src/lxml/serializer.pxi":1651
+      /* "src/lxml/serializer.pxi":1650
  *                 if self._status > WRITER_IN_ELEMENT:
  *                     raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  *                 _writeNodeToBuffer(self._c_out, (<_Element>content)._c_node,             # <<<<<<<<<<<<<<
@@ -163981,7 +164018,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       __pyx_f_4lxml_5etree__writeNodeToBuffer(__pyx_v_self->_c_out, ((struct LxmlElement *)__pyx_v_content)->_c_node, __pyx_v_self->_c_encoding, NULL, __pyx_v_c_method, 0, 0, __pyx_v_pretty_print, __pyx_v_with_tail, 0);
 
-      /* "src/lxml/serializer.pxi":1654
+      /* "src/lxml/serializer.pxi":1653
  *                                    self._c_encoding, NULL, c_method,
  *                                    False, False, pretty_print, with_tail, False)
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -163991,7 +164028,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_7 = ((((struct LxmlElement *)__pyx_v_content)->_c_node->type == XML_ELEMENT_NODE) != 0);
       if (__pyx_t_7) {
 
-        /* "src/lxml/serializer.pxi":1655
+        /* "src/lxml/serializer.pxi":1654
  *                                    False, False, pretty_print, with_tail, False)
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:
  *                     if not self._element_stack:             # <<<<<<<<<<<<<<
@@ -164002,7 +164039,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
         __pyx_t_2 = ((!__pyx_t_7) != 0);
         if (__pyx_t_2) {
 
-          /* "src/lxml/serializer.pxi":1656
+          /* "src/lxml/serializer.pxi":1655
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:
  *                     if not self._element_stack:
  *                         self._status = WRITER_FINISHED             # <<<<<<<<<<<<<<
@@ -164011,7 +164048,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
           __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_FINISHED;
 
-          /* "src/lxml/serializer.pxi":1655
+          /* "src/lxml/serializer.pxi":1654
  *                                    False, False, pretty_print, with_tail, False)
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:
  *                     if not self._element_stack:             # <<<<<<<<<<<<<<
@@ -164020,7 +164057,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
         }
 
-        /* "src/lxml/serializer.pxi":1654
+        /* "src/lxml/serializer.pxi":1653
  *                                    self._c_encoding, NULL, c_method,
  *                                    False, False, pretty_print, with_tail, False)
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -164029,7 +164066,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
       }
 
-      /* "src/lxml/serializer.pxi":1648
+      /* "src/lxml/serializer.pxi":1647
  *                     tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(bstring), NULL)
  * 
  *             elif iselement(content):             # <<<<<<<<<<<<<<
@@ -164039,7 +164076,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       goto __pyx_L5;
     }
 
-    /* "src/lxml/serializer.pxi":1658
+    /* "src/lxml/serializer.pxi":1657
  *                         self._status = WRITER_FINISHED
  * 
  *             elif content is not None:             # <<<<<<<<<<<<<<
@@ -164050,14 +164087,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
     __pyx_t_7 = (__pyx_t_2 != 0);
     if (unlikely(__pyx_t_7)) {
 
-      /* "src/lxml/serializer.pxi":1660
+      /* "src/lxml/serializer.pxi":1659
  *             elif content is not None:
  *                 raise TypeError(
  *                     f"got invalid input value of type {type(content)}, expected string or Element")             # <<<<<<<<<<<<<<
  *             self._handle_error(self._c_out.error)
  *         if not self._buffered:
  */
-      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1660, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1659, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_15 = 0;
       __pyx_t_16 = 127;
@@ -164065,7 +164102,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_15 += 32;
       __Pyx_GIVEREF(__pyx_kp_u_got_invalid_input_value_of_type);
       PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_got_invalid_input_value_of_type);
-      __pyx_t_11 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_content)), __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1660, __pyx_L1_error)
+      __pyx_t_11 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_content)), __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1659, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_16;
       __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
@@ -164076,25 +164113,25 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
       __pyx_t_15 += 28;
       __Pyx_GIVEREF(__pyx_kp_u_expected_string_or_Element);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u_expected_string_or_Element);
-      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1660, __pyx_L1_error)
+      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_11)) __PYX_ERR(9, 1659, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "src/lxml/serializer.pxi":1659
+      /* "src/lxml/serializer.pxi":1658
  * 
  *             elif content is not None:
  *                 raise TypeError(             # <<<<<<<<<<<<<<
  *                     f"got invalid input value of type {type(content)}, expected string or Element")
  *             self._handle_error(self._c_out.error)
  */
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1659, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1658, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_Raise(__pyx_t_6, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __PYX_ERR(9, 1659, __pyx_L1_error)
+      __PYX_ERR(9, 1658, __pyx_L1_error)
 
-      /* "src/lxml/serializer.pxi":1658
+      /* "src/lxml/serializer.pxi":1657
  *                         self._status = WRITER_FINISHED
  * 
  *             elif content is not None:             # <<<<<<<<<<<<<<
@@ -164104,18 +164141,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
     }
     __pyx_L5:;
 
-    /* "src/lxml/serializer.pxi":1661
+    /* "src/lxml/serializer.pxi":1660
  *                 raise TypeError(
  *                     f"got invalid input value of type {type(content)}, expected string or Element")
  *             self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1661, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 1660, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "src/lxml/serializer.pxi":1630
+    /* "src/lxml/serializer.pxi":1629
  *         c_method = self._method if method is None else _findOutputMethod(method)
  * 
  *         for content in args:             # <<<<<<<<<<<<<<
@@ -164126,7 +164163,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1662
+  /* "src/lxml/serializer.pxi":1661
  *                     f"got invalid input value of type {type(content)}, expected string or Element")
  *             self._handle_error(self._c_out.error)
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -164136,7 +164173,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   __pyx_t_7 = ((!(__pyx_v_self->_buffered != 0)) != 0);
   if (__pyx_t_7) {
 
-    /* "src/lxml/serializer.pxi":1663
+    /* "src/lxml/serializer.pxi":1662
  *             self._handle_error(self._c_out.error)
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)             # <<<<<<<<<<<<<<
@@ -164145,18 +164182,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
     (void)(xmlOutputBufferFlush(__pyx_v_self->_c_out));
 
-    /* "src/lxml/serializer.pxi":1664
+    /* "src/lxml/serializer.pxi":1663
  *         if not self._buffered:
  *             tree.xmlOutputBufferFlush(self._c_out)
  *             self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     def flush(self):
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1664, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1663, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1662
+    /* "src/lxml/serializer.pxi":1661
  *                     f"got invalid input value of type {type(content)}, expected string or Element")
  *             self._handle_error(self._c_out.error)
  *         if not self._buffered:             # <<<<<<<<<<<<<<
@@ -164165,7 +164202,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  */
   }
 
-  /* "src/lxml/serializer.pxi":1619
+  /* "src/lxml/serializer.pxi":1618
  *         return flat_namespaces_map, new_namespaces
  * 
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False, method=None):             # <<<<<<<<<<<<<<
@@ -164197,7 +164234,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1666
+/* "src/lxml/serializer.pxi":1665
  *             self._handle_error(self._c_out.error)
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
@@ -164229,7 +164266,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_14flush(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("flush", 0);
 
-  /* "src/lxml/serializer.pxi":1671
+  /* "src/lxml/serializer.pxi":1670
  *         Write any pending content of the current output buffer to the stream.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -164240,12 +164277,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_14flush(struct _
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(9, 1671, __pyx_L1_error)
+      __PYX_ERR(9, 1670, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/serializer.pxi":1672
+  /* "src/lxml/serializer.pxi":1671
  *         """
  *         assert self._c_out is not NULL
  *         tree.xmlOutputBufferFlush(self._c_out)             # <<<<<<<<<<<<<<
@@ -164254,18 +164291,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_14flush(struct _
  */
   (void)(xmlOutputBufferFlush(__pyx_v_self->_c_out));
 
-  /* "src/lxml/serializer.pxi":1673
+  /* "src/lxml/serializer.pxi":1672
  *         assert self._c_out is not NULL
  *         tree.xmlOutputBufferFlush(self._c_out)
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     cdef _close(self, bint raise_on_error):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1673, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1672, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1666
+  /* "src/lxml/serializer.pxi":1665
  *             self._handle_error(self._c_out.error)
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
@@ -164286,7 +164323,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_14flush(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1675
+/* "src/lxml/serializer.pxi":1674
  *         self._handle_error(self._c_out.error)
  * 
  *     cdef _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
@@ -164308,7 +164345,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_close", 0);
 
-  /* "src/lxml/serializer.pxi":1676
+  /* "src/lxml/serializer.pxi":1675
  * 
  *     cdef _close(self, bint raise_on_error):
  *         if raise_on_error:             # <<<<<<<<<<<<<<
@@ -164318,7 +164355,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_1 = (__pyx_v_raise_on_error != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1677
+    /* "src/lxml/serializer.pxi":1676
  *     cdef _close(self, bint raise_on_error):
  *         if raise_on_error:
  *             if self._status < WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -164328,14 +164365,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     __pyx_t_1 = ((__pyx_v_self->_status < __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "src/lxml/serializer.pxi":1678
+      /* "src/lxml/serializer.pxi":1677
  *         if raise_on_error:
  *             if self._status < WRITER_IN_ELEMENT:
  *                 raise LxmlSyntaxError("no content written")             # <<<<<<<<<<<<<<
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1678, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1677, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -164349,14 +164386,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
       }
       __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_no_content_written) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_no_content_written);
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1678, __pyx_L1_error)
+      if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1677, __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(9, 1678, __pyx_L1_error)
+      __PYX_ERR(9, 1677, __pyx_L1_error)
 
-      /* "src/lxml/serializer.pxi":1677
+      /* "src/lxml/serializer.pxi":1676
  *     cdef _close(self, bint raise_on_error):
  *         if raise_on_error:
  *             if self._status < WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -164365,7 +164402,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
     }
 
-    /* "src/lxml/serializer.pxi":1679
+    /* "src/lxml/serializer.pxi":1678
  *             if self._status < WRITER_IN_ELEMENT:
  *                 raise LxmlSyntaxError("no content written")
  *             if self._element_stack:             # <<<<<<<<<<<<<<
@@ -164375,14 +164412,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     __pyx_t_1 = (__pyx_v_self->_element_stack != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_element_stack) != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "src/lxml/serializer.pxi":1680
+      /* "src/lxml/serializer.pxi":1679
  *                 raise LxmlSyntaxError("no content written")
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")             # <<<<<<<<<<<<<<
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1680, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1679, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -164396,14 +164433,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
       }
       __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_pending_open_tags_on_close) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_pending_open_tags_on_close);
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1680, __pyx_L1_error)
+      if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1679, __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(9, 1680, __pyx_L1_error)
+      __PYX_ERR(9, 1679, __pyx_L1_error)
 
-      /* "src/lxml/serializer.pxi":1679
+      /* "src/lxml/serializer.pxi":1678
  *             if self._status < WRITER_IN_ELEMENT:
  *                 raise LxmlSyntaxError("no content written")
  *             if self._element_stack:             # <<<<<<<<<<<<<<
@@ -164412,7 +164449,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
     }
 
-    /* "src/lxml/serializer.pxi":1676
+    /* "src/lxml/serializer.pxi":1675
  * 
  *     cdef _close(self, bint raise_on_error):
  *         if raise_on_error:             # <<<<<<<<<<<<<<
@@ -164421,7 +164458,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
   }
 
-  /* "src/lxml/serializer.pxi":1681
+  /* "src/lxml/serializer.pxi":1680
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")
  *         error_result = self._c_out.error             # <<<<<<<<<<<<<<
@@ -164431,7 +164468,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_5 = __pyx_v_self->_c_out->error;
   __pyx_v_error_result = __pyx_t_5;
 
-  /* "src/lxml/serializer.pxi":1682
+  /* "src/lxml/serializer.pxi":1681
  *                 raise LxmlSyntaxError("pending open tags on close")
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -164441,7 +164478,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_1 = ((__pyx_v_error_result == XML_ERR_OK) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1683
+    /* "src/lxml/serializer.pxi":1682
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:
  *             error_result = tree.xmlOutputBufferClose(self._c_out)             # <<<<<<<<<<<<<<
@@ -164450,7 +164487,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
     __pyx_v_error_result = xmlOutputBufferClose(__pyx_v_self->_c_out);
 
-    /* "src/lxml/serializer.pxi":1684
+    /* "src/lxml/serializer.pxi":1683
  *         if error_result == xmlerror.XML_ERR_OK:
  *             error_result = tree.xmlOutputBufferClose(self._c_out)
  *             if error_result != -1:             # <<<<<<<<<<<<<<
@@ -164460,7 +164497,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     __pyx_t_1 = ((__pyx_v_error_result != -1L) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/serializer.pxi":1685
+      /* "src/lxml/serializer.pxi":1684
  *             error_result = tree.xmlOutputBufferClose(self._c_out)
  *             if error_result != -1:
  *                 error_result = xmlerror.XML_ERR_OK             # <<<<<<<<<<<<<<
@@ -164469,7 +164506,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
       __pyx_v_error_result = XML_ERR_OK;
 
-      /* "src/lxml/serializer.pxi":1684
+      /* "src/lxml/serializer.pxi":1683
  *         if error_result == xmlerror.XML_ERR_OK:
  *             error_result = tree.xmlOutputBufferClose(self._c_out)
  *             if error_result != -1:             # <<<<<<<<<<<<<<
@@ -164478,7 +164515,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
     }
 
-    /* "src/lxml/serializer.pxi":1682
+    /* "src/lxml/serializer.pxi":1681
  *                 raise LxmlSyntaxError("pending open tags on close")
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -164488,7 +164525,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     goto __pyx_L6;
   }
 
-  /* "src/lxml/serializer.pxi":1687
+  /* "src/lxml/serializer.pxi":1686
  *                 error_result = xmlerror.XML_ERR_OK
  *         else:
  *             tree.xmlOutputBufferClose(self._c_out)             # <<<<<<<<<<<<<<
@@ -164500,7 +164537,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   }
   __pyx_L6:;
 
-  /* "src/lxml/serializer.pxi":1688
+  /* "src/lxml/serializer.pxi":1687
  *         else:
  *             tree.xmlOutputBufferClose(self._c_out)
  *         self._status = WRITER_FINISHED             # <<<<<<<<<<<<<<
@@ -164509,7 +164546,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
   __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_FINISHED;
 
-  /* "src/lxml/serializer.pxi":1689
+  /* "src/lxml/serializer.pxi":1688
  *             tree.xmlOutputBufferClose(self._c_out)
  *         self._status = WRITER_FINISHED
  *         self._c_out = NULL             # <<<<<<<<<<<<<<
@@ -164518,7 +164555,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
   __pyx_v_self->_c_out = NULL;
 
-  /* "src/lxml/serializer.pxi":1690
+  /* "src/lxml/serializer.pxi":1689
  *         self._status = WRITER_FINISHED
  *         self._c_out = NULL
  *         del self._element_stack[:]             # <<<<<<<<<<<<<<
@@ -164527,11 +164564,11 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
   if (unlikely(__pyx_v_self->_element_stack == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(9, 1690, __pyx_L1_error)
+    __PYX_ERR(9, 1689, __pyx_L1_error)
   }
-  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_element_stack, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(9, 1690, __pyx_L1_error)
+  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_element_stack, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(9, 1689, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1691
+  /* "src/lxml/serializer.pxi":1690
  *         self._c_out = NULL
  *         del self._element_stack[:]
  *         if raise_on_error:             # <<<<<<<<<<<<<<
@@ -164541,18 +164578,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_1 = (__pyx_v_raise_on_error != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1692
+    /* "src/lxml/serializer.pxi":1691
  *         del self._element_stack[:]
  *         if raise_on_error:
  *             self._handle_error(error_result)             # <<<<<<<<<<<<<<
  * 
  *     cdef _handle_error(self, int error_result):
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_error_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1692, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_error_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1691, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "src/lxml/serializer.pxi":1691
+    /* "src/lxml/serializer.pxi":1690
  *         self._c_out = NULL
  *         del self._element_stack[:]
  *         if raise_on_error:             # <<<<<<<<<<<<<<
@@ -164561,7 +164598,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
   }
 
-  /* "src/lxml/serializer.pxi":1675
+  /* "src/lxml/serializer.pxi":1674
  *         self._handle_error(self._c_out.error)
  * 
  *     cdef _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
@@ -164584,7 +164621,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1694
+/* "src/lxml/serializer.pxi":1693
  *             self._handle_error(error_result)
  * 
  *     cdef _handle_error(self, int error_result):             # <<<<<<<<<<<<<<
@@ -164604,7 +164641,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handle_error", 0);
 
-  /* "src/lxml/serializer.pxi":1695
+  /* "src/lxml/serializer.pxi":1694
  * 
  *     cdef _handle_error(self, int error_result):
  *         if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -164614,7 +164651,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
   __pyx_t_1 = ((__pyx_v_error_result != XML_ERR_OK) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1696
+    /* "src/lxml/serializer.pxi":1695
  *     cdef _handle_error(self, int error_result):
  *         if error_result != xmlerror.XML_ERR_OK:
  *             if self._target is not None:             # <<<<<<<<<<<<<<
@@ -164625,16 +164662,16 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/serializer.pxi":1697
+      /* "src/lxml/serializer.pxi":1696
  *         if error_result != xmlerror.XML_ERR_OK:
  *             if self._target is not None:
  *                 self._target._exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
  *             _raiseSerialisationError(error_result)
  * 
  */
-      __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_self->_target->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_self->_target->_exc_context); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1697, __pyx_L1_error)
+      __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_self->_target->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_self->_target->_exc_context); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 1696, __pyx_L1_error)
 
-      /* "src/lxml/serializer.pxi":1696
+      /* "src/lxml/serializer.pxi":1695
  *     cdef _handle_error(self, int error_result):
  *         if error_result != xmlerror.XML_ERR_OK:
  *             if self._target is not None:             # <<<<<<<<<<<<<<
@@ -164643,18 +164680,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
  */
     }
 
-    /* "src/lxml/serializer.pxi":1698
+    /* "src/lxml/serializer.pxi":1697
  *             if self._target is not None:
  *                 self._target._exc_context._raise_if_stored()
  *             _raiseSerialisationError(error_result)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1698, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1697, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/serializer.pxi":1695
+    /* "src/lxml/serializer.pxi":1694
  * 
  *     cdef _handle_error(self, int error_result):
  *         if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -164663,7 +164700,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
  */
   }
 
-  /* "src/lxml/serializer.pxi":1694
+  /* "src/lxml/serializer.pxi":1693
  *             self._handle_error(error_result)
  * 
  *     cdef _handle_error(self, int error_result):             # <<<<<<<<<<<<<<
@@ -164684,7 +164721,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1705
+/* "src/lxml/serializer.pxi":1704
  * cdef class _AsyncDataWriter:
  *     cdef list _data
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -164717,14 +164754,14 @@ static int __pyx_pf_4lxml_5etree_16_AsyncDataWriter___cinit__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "src/lxml/serializer.pxi":1706
+  /* "src/lxml/serializer.pxi":1705
  *     cdef list _data
  *     def __cinit__(self):
  *         self._data = []             # <<<<<<<<<<<<<<
  * 
  *     cdef bytes collect(self):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1706, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1705, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_data);
@@ -164732,7 +164769,7 @@ static int __pyx_pf_4lxml_5etree_16_AsyncDataWriter___cinit__(struct __pyx_obj_4
   __pyx_v_self->_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1705
+  /* "src/lxml/serializer.pxi":1704
  * cdef class _AsyncDataWriter:
  *     cdef list _data
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -164752,7 +164789,7 @@ static int __pyx_pf_4lxml_5etree_16_AsyncDataWriter___cinit__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1708
+/* "src/lxml/serializer.pxi":1707
  *         self._data = []
  * 
  *     cdef bytes collect(self):             # <<<<<<<<<<<<<<
@@ -164771,7 +164808,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("collect", 0);
 
-  /* "src/lxml/serializer.pxi":1709
+  /* "src/lxml/serializer.pxi":1708
  * 
  *     cdef bytes collect(self):
  *         data = b''.join(self._data)             # <<<<<<<<<<<<<<
@@ -164780,13 +164817,13 @@ static PyObject *__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(struct __pyx_ob
  */
   __pyx_t_1 = __pyx_v_self->_data;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyBytes_Join(__pyx_kp_b__12, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1709, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyBytes_Join(__pyx_kp_b__12, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1708, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_data = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1710
+  /* "src/lxml/serializer.pxi":1709
  *     cdef bytes collect(self):
  *         data = b''.join(self._data)
  *         del self._data[:]             # <<<<<<<<<<<<<<
@@ -164795,11 +164832,11 @@ static PyObject *__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(struct __pyx_ob
  */
   if (unlikely(__pyx_v_self->_data == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(9, 1710, __pyx_L1_error)
+    __PYX_ERR(9, 1709, __pyx_L1_error)
   }
-  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_data, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(9, 1710, __pyx_L1_error)
+  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_data, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(9, 1709, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1711
+  /* "src/lxml/serializer.pxi":1710
  *         data = b''.join(self._data)
  *         del self._data[:]
  *         return data             # <<<<<<<<<<<<<<
@@ -164807,12 +164844,12 @@ static PyObject *__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(struct __pyx_ob
  *     def write(self, data):
  */
   __Pyx_XDECREF(__pyx_r);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_data))||((__pyx_v_data) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_data)->tp_name), 0))) __PYX_ERR(9, 1711, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_data))||((__pyx_v_data) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_data)->tp_name), 0))) __PYX_ERR(9, 1710, __pyx_L1_error)
   __Pyx_INCREF(__pyx_v_data);
   __pyx_r = ((PyObject*)__pyx_v_data);
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1708
+  /* "src/lxml/serializer.pxi":1707
  *         self._data = []
  * 
  *     cdef bytes collect(self):             # <<<<<<<<<<<<<<
@@ -164833,7 +164870,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1713
+/* "src/lxml/serializer.pxi":1712
  *         return data
  * 
  *     def write(self, data):             # <<<<<<<<<<<<<<
@@ -164864,7 +164901,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_AsyncDataWriter_2write(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "src/lxml/serializer.pxi":1714
+  /* "src/lxml/serializer.pxi":1713
  * 
  *     def write(self, data):
  *         self._data.append(data)             # <<<<<<<<<<<<<<
@@ -164873,11 +164910,11 @@ static PyObject *__pyx_pf_4lxml_5etree_16_AsyncDataWriter_2write(struct __pyx_ob
  */
   if (unlikely(__pyx_v_self->_data == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(9, 1714, __pyx_L1_error)
+    __PYX_ERR(9, 1713, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyList_Append(__pyx_v_self->_data, __pyx_v_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 1714, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyList_Append(__pyx_v_self->_data, __pyx_v_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 1713, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1713
+  /* "src/lxml/serializer.pxi":1712
  *         return data
  * 
  *     def write(self, data):             # <<<<<<<<<<<<<<
@@ -164897,7 +164934,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_AsyncDataWriter_2write(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1716
+/* "src/lxml/serializer.pxi":1715
  *         self._data.append(data)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -164931,7 +164968,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_AsyncDataWriter_4close(CYTHON_UNUSED s
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1730
+/* "src/lxml/serializer.pxi":1729
  *     cdef bint _buffered
  * 
  *     def __cinit__(self, async_outfile, bytes encoding, int compresslevel, bint close,             # <<<<<<<<<<<<<<
@@ -164985,35 +165022,35 @@ static int __pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_1__cinit__(PyObje
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_encoding)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 1); __PYX_ERR(9, 1730, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 1); __PYX_ERR(9, 1729, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compresslevel)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 2); __PYX_ERR(9, 1730, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 2); __PYX_ERR(9, 1729, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_close)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 3); __PYX_ERR(9, 1730, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 3); __PYX_ERR(9, 1729, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buffered)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 4); __PYX_ERR(9, 1730, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 4); __PYX_ERR(9, 1729, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 5); __PYX_ERR(9, 1730, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, 5); __PYX_ERR(9, 1729, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1730, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1729, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -165027,20 +165064,20 @@ static int __pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_1__cinit__(PyObje
     }
     __pyx_v_async_outfile = values[0];
     __pyx_v_encoding = ((PyObject*)values[1]);
-    __pyx_v_compresslevel = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_compresslevel == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1730, __pyx_L3_error)
-    __pyx_v_close = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_close == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1730, __pyx_L3_error)
-    __pyx_v_buffered = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_buffered == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1731, __pyx_L3_error)
-    __pyx_v_method = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1731, __pyx_L3_error)
+    __pyx_v_compresslevel = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_compresslevel == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1729, __pyx_L3_error)
+    __pyx_v_close = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_close == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1729, __pyx_L3_error)
+    __pyx_v_buffered = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_buffered == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1730, __pyx_L3_error)
+    __pyx_v_method = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1730, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1730, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1729, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._AsyncIncrementalFileWriter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_encoding), (&PyBytes_Type), 1, "encoding", 1))) __PYX_ERR(9, 1730, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_encoding), (&PyBytes_Type), 1, "encoding", 1))) __PYX_ERR(9, 1729, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(((struct __pyx_obj_4lxml_5etree__AsyncIncrementalFileWriter *)__pyx_v_self), __pyx_v_async_outfile, __pyx_v_encoding, __pyx_v_compresslevel, __pyx_v_close, __pyx_v_buffered, __pyx_v_method);
 
   /* function exit code */
@@ -165063,7 +165100,7 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "src/lxml/serializer.pxi":1732
+  /* "src/lxml/serializer.pxi":1731
  *     def __cinit__(self, async_outfile, bytes encoding, int compresslevel, bint close,
  *                   bint buffered, int method):
  *         self._flush_after_writes = 20             # <<<<<<<<<<<<<<
@@ -165072,7 +165109,7 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
  */
   __pyx_v_self->_flush_after_writes = 20;
 
-  /* "src/lxml/serializer.pxi":1733
+  /* "src/lxml/serializer.pxi":1732
  *                   bint buffered, int method):
  *         self._flush_after_writes = 20
  *         self._async_outfile = async_outfile             # <<<<<<<<<<<<<<
@@ -165085,7 +165122,7 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
   __Pyx_DECREF(__pyx_v_self->_async_outfile);
   __pyx_v_self->_async_outfile = __pyx_v_async_outfile;
 
-  /* "src/lxml/serializer.pxi":1734
+  /* "src/lxml/serializer.pxi":1733
  *         self._flush_after_writes = 20
  *         self._async_outfile = async_outfile
  *         self._should_close = close             # <<<<<<<<<<<<<<
@@ -165094,7 +165131,7 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
  */
   __pyx_v_self->_should_close = __pyx_v_close;
 
-  /* "src/lxml/serializer.pxi":1735
+  /* "src/lxml/serializer.pxi":1734
  *         self._async_outfile = async_outfile
  *         self._should_close = close
  *         self._buffered = buffered             # <<<<<<<<<<<<<<
@@ -165103,14 +165140,14 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
  */
   __pyx_v_self->_buffered = __pyx_v_buffered;
 
-  /* "src/lxml/serializer.pxi":1736
+  /* "src/lxml/serializer.pxi":1735
  *         self._should_close = close
  *         self._buffered = buffered
  *         self._buffer = _AsyncDataWriter()             # <<<<<<<<<<<<<<
  *         self._writer = _IncrementalFileWriter(
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1736, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1735, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_buffer);
@@ -165118,24 +165155,24 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
   __pyx_v_self->_buffer = ((struct __pyx_obj_4lxml_5etree__AsyncDataWriter *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1738
+  /* "src/lxml/serializer.pxi":1737
  *         self._buffer = _AsyncDataWriter()
  *         self._writer = _IncrementalFileWriter(
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)             # <<<<<<<<<<<<<<
  * 
  *     cdef bytes _flush(self):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_compresslevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1738, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_compresslevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "src/lxml/serializer.pxi":1737
+  /* "src/lxml/serializer.pxi":1736
  *         self._buffered = buffered
  *         self._buffer = _AsyncDataWriter()
  *         self._writer = _IncrementalFileWriter(             # <<<<<<<<<<<<<<
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)
  * 
  */
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1737, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_self->_buffer));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_buffer));
@@ -165147,30 +165184,30 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
   PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1738
+  /* "src/lxml/serializer.pxi":1737
  *         self._buffer = _AsyncDataWriter()
  *         self._writer = _IncrementalFileWriter(
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)             # <<<<<<<<<<<<<<
  * 
  *     cdef bytes _flush(self):
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1738, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_close, Py_True) < 0) __PYX_ERR(9, 1738, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_buffered, Py_False) < 0) __PYX_ERR(9, 1738, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_method); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1738, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_close, Py_True) < 0) __PYX_ERR(9, 1737, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_buffered, Py_False) < 0) __PYX_ERR(9, 1737, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_method); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_method, __pyx_t_3) < 0) __PYX_ERR(9, 1738, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_method, __pyx_t_3) < 0) __PYX_ERR(9, 1737, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1737
+  /* "src/lxml/serializer.pxi":1736
  *         self._buffered = buffered
  *         self._buffer = _AsyncDataWriter()
  *         self._writer = _IncrementalFileWriter(             # <<<<<<<<<<<<<<
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter), __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1737, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter), __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -165180,7 +165217,7 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
   __pyx_v_self->_writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1730
+  /* "src/lxml/serializer.pxi":1729
  *     cdef bint _buffered
  * 
  *     def __cinit__(self, async_outfile, bytes encoding, int compresslevel, bint close,             # <<<<<<<<<<<<<<
@@ -165202,7 +165239,7 @@ static int __pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter___cinit__(struct
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1740
+/* "src/lxml/serializer.pxi":1739
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)
  * 
  *     cdef bytes _flush(self):             # <<<<<<<<<<<<<<
@@ -165222,7 +165259,7 @@ static PyObject *__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_flush", 0);
 
-  /* "src/lxml/serializer.pxi":1741
+  /* "src/lxml/serializer.pxi":1740
  * 
  *     cdef bytes _flush(self):
  *         if not self._buffered or len(self._buffer._data) > self._flush_after_writes:             # <<<<<<<<<<<<<<
@@ -165239,16 +165276,16 @@ static PyObject *__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(struc
   __Pyx_INCREF(__pyx_t_3);
   if (unlikely(__pyx_t_3 == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(9, 1741, __pyx_L1_error)
+    __PYX_ERR(9, 1740, __pyx_L1_error)
   }
-  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1741, __pyx_L1_error)
+  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(9, 1740, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_2 = ((__pyx_t_4 > __pyx_v_self->_flush_after_writes) != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/serializer.pxi":1742
+    /* "src/lxml/serializer.pxi":1741
  *     cdef bytes _flush(self):
  *         if not self._buffered or len(self._buffer._data) > self._flush_after_writes:
  *             return self._buffer.collect()             # <<<<<<<<<<<<<<
@@ -165256,13 +165293,13 @@ static PyObject *__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(struc
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(__pyx_v_self->_buffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1742, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(__pyx_v_self->_buffer); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1741, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/serializer.pxi":1741
+    /* "src/lxml/serializer.pxi":1740
  * 
  *     cdef bytes _flush(self):
  *         if not self._buffered or len(self._buffer._data) > self._flush_after_writes:             # <<<<<<<<<<<<<<
@@ -165271,7 +165308,7 @@ static PyObject *__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(struc
  */
   }
 
-  /* "src/lxml/serializer.pxi":1743
+  /* "src/lxml/serializer.pxi":1742
  *         if not self._buffered or len(self._buffer._data) > self._flush_after_writes:
  *             return self._buffer.collect()
  *         return None             # <<<<<<<<<<<<<<
@@ -165282,7 +165319,7 @@ static PyObject *__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(struc
   __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1740
+  /* "src/lxml/serializer.pxi":1739
  *             self._buffer, encoding, compresslevel, close=True, buffered=False, method=method)
  * 
  *     cdef bytes _flush(self):             # <<<<<<<<<<<<<<
@@ -165302,7 +165339,7 @@ static PyObject *__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(struc
 }
 static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1745
+/* "src/lxml/serializer.pxi":1744
  *         return None
  * 
  *     async def flush(self):             # <<<<<<<<<<<<<<
@@ -165336,7 +165373,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_2flush(stru
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_4_flush *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1745, __pyx_L1_error)
+    __PYX_ERR(9, 1744, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -165344,7 +165381,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_2flush(stru
   __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4, __pyx_codeobj__84, (PyObject *) __pyx_cur_scope, __pyx_n_s_flush, __pyx_n_s_AsyncIncrementalFileWriter_flus, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1745, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4, __pyx_codeobj__84, (PyObject *) __pyx_cur_scope, __pyx_n_s_flush, __pyx_n_s_AsyncIncrementalFileWriter_flus, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1744, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -165381,16 +165418,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1745, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1744, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1746
+  /* "src/lxml/serializer.pxi":1745
  * 
  *     async def flush(self):
  *         self._writer.flush()             # <<<<<<<<<<<<<<
  *         data = self._buffer.collect()
  *         if data:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1746, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1745, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -165404,25 +165441,25 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1746, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1745, __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;
 
-  /* "src/lxml/serializer.pxi":1747
+  /* "src/lxml/serializer.pxi":1746
  *     async def flush(self):
  *         self._writer.flush()
  *         data = self._buffer.collect()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._async_outfile.write(data)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(__pyx_cur_scope->__pyx_v_self->_buffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1747, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(__pyx_cur_scope->__pyx_v_self->_buffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1746, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1748
+  /* "src/lxml/serializer.pxi":1747
  *         self._writer.flush()
  *         data = self._buffer.collect()
  *         if data:             # <<<<<<<<<<<<<<
@@ -165432,14 +165469,14 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
   __pyx_t_4 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_4) {
 
-    /* "src/lxml/serializer.pxi":1749
+    /* "src/lxml/serializer.pxi":1748
  *         data = self._buffer.collect()
  *         if data:
  *             await self._async_outfile.write(data)             # <<<<<<<<<<<<<<
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1749, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1748, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -165453,7 +165490,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
     }
     __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1749, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1748, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
@@ -165467,16 +165504,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1749, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1748, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1749, __pyx_L1_error)
+        else __PYX_ERR(9, 1748, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1748
+    /* "src/lxml/serializer.pxi":1747
  *         self._writer.flush()
  *         data = self._buffer.collect()
  *         if data:             # <<<<<<<<<<<<<<
@@ -165486,7 +165523,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1745
+  /* "src/lxml/serializer.pxi":1744
  *         return None
  * 
  *     async def flush(self):             # <<<<<<<<<<<<<<
@@ -165514,7 +165551,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_4generator4
 }
 static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1751
+/* "src/lxml/serializer.pxi":1750
  *             await self._async_outfile.write(data)
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
@@ -165575,7 +165612,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_6write_decl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_declaration") < 0)) __PYX_ERR(9, 1751, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_declaration") < 0)) __PYX_ERR(9, 1750, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -165595,7 +165632,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_6write_decl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_declaration", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1751, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_declaration", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1750, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._AsyncIncrementalFileWriter.write_declaration", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -165620,7 +165657,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_5write_decl
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_5_write_declaration *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1751, __pyx_L1_error)
+    __PYX_ERR(9, 1750, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -165637,7 +165674,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_5write_decl
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_doctype);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_doctype);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5, __pyx_codeobj__85, (PyObject *) __pyx_cur_scope, __pyx_n_s_write_declaration, __pyx_n_s_AsyncIncrementalFileWriter_writ, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1751, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5, __pyx_codeobj__85, (PyObject *) __pyx_cur_scope, __pyx_n_s_write_declaration, __pyx_n_s_AsyncIncrementalFileWriter_writ, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1750, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -165676,16 +165713,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1751, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1750, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1752
+  /* "src/lxml/serializer.pxi":1751
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):
  *         self._writer.write_declaration(version, standalone, doctype)             # <<<<<<<<<<<<<<
  *         data = self._flush()
  *         if data:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_write_declaration); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1752, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_write_declaration); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1751, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -165702,7 +165739,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_2)) {
     PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_version, __pyx_cur_scope->__pyx_v_standalone, __pyx_cur_scope->__pyx_v_doctype};
-    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1752, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1751, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
@@ -165710,13 +165747,13 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
     PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_version, __pyx_cur_scope->__pyx_v_standalone, __pyx_cur_scope->__pyx_v_doctype};
-    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1752, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1751, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
   #endif
   {
-    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1752, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1751, __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;
@@ -165730,27 +165767,27 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
     __Pyx_INCREF(__pyx_cur_scope->__pyx_v_doctype);
     __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_doctype);
     PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_doctype);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1752, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1751, __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;
 
-  /* "src/lxml/serializer.pxi":1753
+  /* "src/lxml/serializer.pxi":1752
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):
  *         self._writer.write_declaration(version, standalone, doctype)
  *         data = self._flush()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._async_outfile.write(data)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1753, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1752, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1754
+  /* "src/lxml/serializer.pxi":1753
  *         self._writer.write_declaration(version, standalone, doctype)
  *         data = self._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -165760,14 +165797,14 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
   __pyx_t_6 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/serializer.pxi":1755
+    /* "src/lxml/serializer.pxi":1754
  *         data = self._flush()
  *         if data:
  *             await self._async_outfile.write(data)             # <<<<<<<<<<<<<<
  * 
  *     async def write_doctype(self, doctype):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1755, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1754, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -165781,7 +165818,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
     }
     __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1755, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1754, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
@@ -165795,16 +165832,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1755, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1754, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1755, __pyx_L1_error)
+        else __PYX_ERR(9, 1754, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1754
+    /* "src/lxml/serializer.pxi":1753
  *         self._writer.write_declaration(version, standalone, doctype)
  *         data = self._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -165814,7 +165851,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1751
+  /* "src/lxml/serializer.pxi":1750
  *             await self._async_outfile.write(data)
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
@@ -165843,7 +165880,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_7generator5
 }
 static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1757
+/* "src/lxml/serializer.pxi":1756
  *             await self._async_outfile.write(data)
  * 
  *     async def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
@@ -165877,7 +165914,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_8write_doct
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_6_write_doctype *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1757, __pyx_L1_error)
+    __PYX_ERR(9, 1756, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -165888,7 +165925,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_8write_doct
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_doctype);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_doctype);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator6, __pyx_codeobj__86, (PyObject *) __pyx_cur_scope, __pyx_n_s_write_doctype, __pyx_n_s_AsyncIncrementalFileWriter_writ_2, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1757, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator6, __pyx_codeobj__86, (PyObject *) __pyx_cur_scope, __pyx_n_s_write_doctype, __pyx_n_s_AsyncIncrementalFileWriter_writ_2, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1756, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -165925,16 +165962,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1757, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1756, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1758
+  /* "src/lxml/serializer.pxi":1757
  * 
  *     async def write_doctype(self, doctype):
  *         self._writer.write_doctype(doctype)             # <<<<<<<<<<<<<<
  *         data = self._flush()
  *         if data:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_write_doctype); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1758, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_write_doctype); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1757, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -165948,25 +165985,25 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_doctype) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_doctype);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1758, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1757, __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;
 
-  /* "src/lxml/serializer.pxi":1759
+  /* "src/lxml/serializer.pxi":1758
  *     async def write_doctype(self, doctype):
  *         self._writer.write_doctype(doctype)
  *         data = self._flush()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._async_outfile.write(data)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1759, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1758, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1760
+  /* "src/lxml/serializer.pxi":1759
  *         self._writer.write_doctype(doctype)
  *         data = self._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -165976,14 +166013,14 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
   __pyx_t_4 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_4) {
 
-    /* "src/lxml/serializer.pxi":1761
+    /* "src/lxml/serializer.pxi":1760
  *         data = self._flush()
  *         if data:
  *             await self._async_outfile.write(data)             # <<<<<<<<<<<<<<
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1761, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -165997,7 +166034,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
     }
     __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1761, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
@@ -166011,16 +166048,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1761, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1760, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1761, __pyx_L1_error)
+        else __PYX_ERR(9, 1760, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1760
+    /* "src/lxml/serializer.pxi":1759
  *         self._writer.write_doctype(doctype)
  *         data = self._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -166030,7 +166067,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1757
+  /* "src/lxml/serializer.pxi":1756
  *             await self._async_outfile.write(data)
  * 
  *     async def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
@@ -166058,7 +166095,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_10generator
 }
 static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1763
+/* "src/lxml/serializer.pxi":1762
  *             await self._async_outfile.write(data)
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):             # <<<<<<<<<<<<<<
@@ -166112,7 +166149,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_12write(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "write") < 0)) __PYX_ERR(9, 1763, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "write") < 0)) __PYX_ERR(9, 1762, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 0) {
       goto __pyx_L5_argtuple_error;
@@ -166124,7 +166161,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_12write(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 0, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1763, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write", 0, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1762, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_CLEAR(__pyx_v_args);
   __Pyx_AddTraceback("lxml.etree._AsyncIncrementalFileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -166151,7 +166188,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_11write(str
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_7_write *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1763, __pyx_L1_error)
+    __PYX_ERR(9, 1762, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -166171,7 +166208,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_11write(str
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_args);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_args);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator7, __pyx_codeobj__87, (PyObject *) __pyx_cur_scope, __pyx_n_s_write, __pyx_n_s_AsyncIncrementalFileWriter_writ_3, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1763, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator7, __pyx_codeobj__87, (PyObject *) __pyx_cur_scope, __pyx_n_s_write, __pyx_n_s_AsyncIncrementalFileWriter_writ_3, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1762, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -166208,42 +166245,42 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1763, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1762, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1764
+  /* "src/lxml/serializer.pxi":1763
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):
  *         self._writer.write(*args, with_tail=with_tail, pretty_print=pretty_print, method=method)             # <<<<<<<<<<<<<<
  *         data = self._flush()
  *         if data:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_write); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1764, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_writer), __pyx_n_s_write); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1764, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_tail, __pyx_cur_scope->__pyx_v_with_tail) < 0) __PYX_ERR(9, 1764, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pretty_print, __pyx_cur_scope->__pyx_v_pretty_print) < 0) __PYX_ERR(9, 1764, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_method, __pyx_cur_scope->__pyx_v_method) < 0) __PYX_ERR(9, 1764, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_cur_scope->__pyx_v_args, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1764, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_tail, __pyx_cur_scope->__pyx_v_with_tail) < 0) __PYX_ERR(9, 1763, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pretty_print, __pyx_cur_scope->__pyx_v_pretty_print) < 0) __PYX_ERR(9, 1763, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_method, __pyx_cur_scope->__pyx_v_method) < 0) __PYX_ERR(9, 1763, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_cur_scope->__pyx_v_args, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1763, __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;
 
-  /* "src/lxml/serializer.pxi":1765
+  /* "src/lxml/serializer.pxi":1764
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):
  *         self._writer.write(*args, with_tail=with_tail, pretty_print=pretty_print, method=method)
  *         data = self._flush()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._async_outfile.write(data)
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1765, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1764, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1766
+  /* "src/lxml/serializer.pxi":1765
  *         self._writer.write(*args, with_tail=with_tail, pretty_print=pretty_print, method=method)
  *         data = self._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -166253,14 +166290,14 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator
   __pyx_t_4 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_4) {
 
-    /* "src/lxml/serializer.pxi":1767
+    /* "src/lxml/serializer.pxi":1766
  *         data = self._flush()
  *         if data:
  *             await self._async_outfile.write(data)             # <<<<<<<<<<<<<<
  * 
  *     def method(self, method):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1767, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -166274,7 +166311,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator
     }
     __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1767, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_3);
@@ -166288,16 +166325,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1767, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1766, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1767, __pyx_L1_error)
+        else __PYX_ERR(9, 1766, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1766
+    /* "src/lxml/serializer.pxi":1765
  *         self._writer.write(*args, with_tail=with_tail, pretty_print=pretty_print, method=method)
  *         data = self._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -166307,7 +166344,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1763
+  /* "src/lxml/serializer.pxi":1762
  *             await self._async_outfile.write(data)
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):             # <<<<<<<<<<<<<<
@@ -166334,7 +166371,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_13generator
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1769
+/* "src/lxml/serializer.pxi":1768
  *             await self._async_outfile.write(data)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
@@ -166367,7 +166404,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_14method(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("method", 0);
 
-  /* "src/lxml/serializer.pxi":1770
+  /* "src/lxml/serializer.pxi":1769
  * 
  *     def method(self, method):
  *         return self._writer.method(method)             # <<<<<<<<<<<<<<
@@ -166375,7 +166412,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_14method(st
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_writer), __pyx_n_s_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1770, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_writer), __pyx_n_s_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1769, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -166389,14 +166426,14 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_14method(st
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_method) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_method);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1770, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1769, __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;
 
-  /* "src/lxml/serializer.pxi":1769
+  /* "src/lxml/serializer.pxi":1768
  *             await self._async_outfile.write(data)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
@@ -166417,7 +166454,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_14method(st
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1772
+/* "src/lxml/serializer.pxi":1771
  *         return self._writer.method(method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
@@ -166488,7 +166525,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_17element(P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "element") < 0)) __PYX_ERR(9, 1772, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "element") < 0)) __PYX_ERR(9, 1771, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -166510,7 +166547,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_17element(P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("element", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1772, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("element", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1771, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree._AsyncIncrementalFileWriter.element", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -166532,21 +166569,22 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_16element(s
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("element", 0);
 
-  /* "src/lxml/serializer.pxi":1773
+  /* "src/lxml/serializer.pxi":1772
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):
  *         element_writer = self._writer.element(tag, attrib, nsmap, method, **_extra)             # <<<<<<<<<<<<<<
  *         return _AsyncFileWriterElement(element_writer, self)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_writer), __pyx_n_s_element); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1773, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_writer), __pyx_n_s_element); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1773, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_tag);
   __Pyx_GIVEREF(__pyx_v_tag);
@@ -166560,14 +166598,17 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_16element(s
   __Pyx_INCREF(__pyx_v_method);
   __Pyx_GIVEREF(__pyx_v_method);
   PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_method);
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_v__extra); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1773, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v__extra); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1772, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v_element_writer = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_element_writer = __pyx_t_4;
+  __pyx_t_4 = 0;
 
-  /* "src/lxml/serializer.pxi":1774
+  /* "src/lxml/serializer.pxi":1773
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):
  *         element_writer = self._writer.element(tag, attrib, nsmap, method, **_extra)
  *         return _AsyncFileWriterElement(element_writer, self)             # <<<<<<<<<<<<<<
@@ -166575,22 +166616,22 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_16element(s
  *     async def _close(self, bint raise_on_error):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1774, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 1773, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_element_writer);
   __Pyx_GIVEREF(__pyx_v_element_writer);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_element_writer);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_element_writer);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1774, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_self));
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1773, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/serializer.pxi":1772
+  /* "src/lxml/serializer.pxi":1771
  *         return self._writer.method(method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
@@ -166603,6 +166644,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_16element(s
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.etree._AsyncIncrementalFileWriter.element", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -166613,7 +166655,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_16element(s
 }
 static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1776
+/* "src/lxml/serializer.pxi":1775
  *         return _AsyncFileWriterElement(element_writer, self)
  * 
  *     async def _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
@@ -166633,7 +166675,7 @@ static PyObject *__pyx_pw_4lxml_5etree_27_AsyncIncrementalFileWriter_19_close(Py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_close (wrapper)", 0);
   assert(__pyx_arg_raise_on_error); {
-    __pyx_v_raise_on_error = __Pyx_PyObject_IsTrue(__pyx_arg_raise_on_error); if (unlikely((__pyx_v_raise_on_error == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1776, __pyx_L3_error)
+    __pyx_v_raise_on_error = __Pyx_PyObject_IsTrue(__pyx_arg_raise_on_error); if (unlikely((__pyx_v_raise_on_error == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1775, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -166660,7 +166702,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_18_close(st
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_8__close *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1776, __pyx_L1_error)
+    __PYX_ERR(9, 1775, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -166669,7 +166711,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27_AsyncIncrementalFileWriter_18_close(st
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __pyx_cur_scope->__pyx_v_raise_on_error = __pyx_v_raise_on_error;
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator8, __pyx_codeobj__88, (PyObject *) __pyx_cur_scope, __pyx_n_s_close_2, __pyx_n_s_AsyncIncrementalFileWriter__clo, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1776, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator8, __pyx_codeobj__88, (PyObject *) __pyx_cur_scope, __pyx_n_s_close_2, __pyx_n_s_AsyncIncrementalFileWriter__clo, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1775, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -166707,33 +166749,33 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1776, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1775, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1777
+  /* "src/lxml/serializer.pxi":1776
  * 
  *     async def _close(self, bint raise_on_error):
  *         self._writer._close(raise_on_error)             # <<<<<<<<<<<<<<
  *         data = self._buffer.collect()
  *         if data:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(__pyx_cur_scope->__pyx_v_self->_writer, __pyx_cur_scope->__pyx_v_raise_on_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1777, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(__pyx_cur_scope->__pyx_v_self->_writer, __pyx_cur_scope->__pyx_v_raise_on_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1776, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1778
+  /* "src/lxml/serializer.pxi":1777
  *     async def _close(self, bint raise_on_error):
  *         self._writer._close(raise_on_error)
  *         data = self._buffer.collect()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._async_outfile.write(data)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(__pyx_cur_scope->__pyx_v_self->_buffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1778, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_16_AsyncDataWriter_collect(__pyx_cur_scope->__pyx_v_self->_buffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1777, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1779
+  /* "src/lxml/serializer.pxi":1778
  *         self._writer._close(raise_on_error)
  *         data = self._buffer.collect()
  *         if data:             # <<<<<<<<<<<<<<
@@ -166743,14 +166785,14 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
   __pyx_t_2 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1780
+    /* "src/lxml/serializer.pxi":1779
  *         data = self._buffer.collect()
  *         if data:
  *             await self._async_outfile.write(data)             # <<<<<<<<<<<<<<
  *         if self._should_close:
  *             await self._async_outfile.close()
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1780, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1779, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -166764,7 +166806,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
     }
     __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1780, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1779, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
@@ -166778,16 +166820,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1780, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1779, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1780, __pyx_L1_error)
+        else __PYX_ERR(9, 1779, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1779
+    /* "src/lxml/serializer.pxi":1778
  *         self._writer._close(raise_on_error)
  *         data = self._buffer.collect()
  *         if data:             # <<<<<<<<<<<<<<
@@ -166796,7 +166838,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
  */
   }
 
-  /* "src/lxml/serializer.pxi":1781
+  /* "src/lxml/serializer.pxi":1780
  *         if data:
  *             await self._async_outfile.write(data)
  *         if self._should_close:             # <<<<<<<<<<<<<<
@@ -166806,14 +166848,14 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
   __pyx_t_2 = (__pyx_cur_scope->__pyx_v_self->_should_close != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/serializer.pxi":1782
+    /* "src/lxml/serializer.pxi":1781
  *             await self._async_outfile.write(data)
  *         if self._should_close:
  *             await self._async_outfile.close()             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1782, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_async_outfile, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -166827,7 +166869,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
     }
     __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1782, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
@@ -166841,16 +166883,16 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
       __pyx_generator->resume_label = 2;
       return __pyx_r;
       __pyx_L7_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1782, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1781, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1782, __pyx_L1_error)
+        else __PYX_ERR(9, 1781, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1781
+    /* "src/lxml/serializer.pxi":1780
  *         if data:
  *             await self._async_outfile.write(data)
  *         if self._should_close:             # <<<<<<<<<<<<<<
@@ -166860,7 +166902,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1776
+  /* "src/lxml/serializer.pxi":1775
  *         return _AsyncFileWriterElement(element_writer, self)
  * 
  *     async def _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
@@ -166887,7 +166929,7 @@ static PyObject *__pyx_gb_4lxml_5etree_27_AsyncIncrementalFileWriter_20generator
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1791
+/* "src/lxml/serializer.pxi":1790
  *     cdef _AsyncIncrementalFileWriter _writer
  * 
  *     def __cinit__(self, _FileWriterElement element_writer not None,             # <<<<<<<<<<<<<<
@@ -166929,11 +166971,11 @@ static int __pyx_pw_4lxml_5etree_23_AsyncFileWriterElement_1__cinit__(PyObject *
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_writer)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(9, 1791, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(9, 1790, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1791, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1790, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -166946,14 +166988,14 @@ static int __pyx_pw_4lxml_5etree_23_AsyncFileWriterElement_1__cinit__(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1791, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1790, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._AsyncFileWriterElement.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element_writer), __pyx_ptype_4lxml_5etree__FileWriterElement, 0, "element_writer", 0))) __PYX_ERR(9, 1791, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter, 0, "writer", 0))) __PYX_ERR(9, 1792, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element_writer), __pyx_ptype_4lxml_5etree__FileWriterElement, 0, "element_writer", 0))) __PYX_ERR(9, 1790, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter, 0, "writer", 0))) __PYX_ERR(9, 1791, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_23_AsyncFileWriterElement___cinit__(((struct __pyx_obj_4lxml_5etree__AsyncFileWriterElement *)__pyx_v_self), __pyx_v_element_writer, __pyx_v_writer);
 
   /* function exit code */
@@ -166970,7 +167012,7 @@ static int __pyx_pf_4lxml_5etree_23_AsyncFileWriterElement___cinit__(struct __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "src/lxml/serializer.pxi":1793
+  /* "src/lxml/serializer.pxi":1792
  *     def __cinit__(self, _FileWriterElement element_writer not None,
  *                   _AsyncIncrementalFileWriter writer not None):
  *         self._element_writer = element_writer             # <<<<<<<<<<<<<<
@@ -166983,7 +167025,7 @@ static int __pyx_pf_4lxml_5etree_23_AsyncFileWriterElement___cinit__(struct __py
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_element_writer));
   __pyx_v_self->_element_writer = __pyx_v_element_writer;
 
-  /* "src/lxml/serializer.pxi":1794
+  /* "src/lxml/serializer.pxi":1793
  *                   _AsyncIncrementalFileWriter writer not None):
  *         self._element_writer = element_writer
  *         self._writer = writer             # <<<<<<<<<<<<<<
@@ -166996,7 +167038,7 @@ static int __pyx_pf_4lxml_5etree_23_AsyncFileWriterElement___cinit__(struct __py
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_writer));
   __pyx_v_self->_writer = __pyx_v_writer;
 
-  /* "src/lxml/serializer.pxi":1791
+  /* "src/lxml/serializer.pxi":1790
  *     cdef _AsyncIncrementalFileWriter _writer
  * 
  *     def __cinit__(self, _FileWriterElement element_writer not None,             # <<<<<<<<<<<<<<
@@ -167011,7 +167053,7 @@ static int __pyx_pf_4lxml_5etree_23_AsyncFileWriterElement___cinit__(struct __py
 }
 static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1796
+/* "src/lxml/serializer.pxi":1795
  *         self._writer = writer
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -167045,7 +167087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_23_AsyncFileWriterElement_2__aenter__(str
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_9___aenter__ *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1796, __pyx_L1_error)
+    __PYX_ERR(9, 1795, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -167053,7 +167095,7 @@ static PyObject *__pyx_pf_4lxml_5etree_23_AsyncFileWriterElement_2__aenter__(str
   __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9, __pyx_codeobj__89, (PyObject *) __pyx_cur_scope, __pyx_n_s_aenter, __pyx_n_s_AsyncFileWriterElement___aenter, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1796, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9, __pyx_codeobj__89, (PyObject *) __pyx_cur_scope, __pyx_n_s_aenter, __pyx_n_s_AsyncFileWriterElement___aenter, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1795, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -167090,16 +167132,16 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1796, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1795, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1797
+  /* "src/lxml/serializer.pxi":1796
  * 
  *     async def __aenter__(self):
  *         self._element_writer.__enter__()             # <<<<<<<<<<<<<<
  *         data = self._writer._flush()
  *         if data:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_element_writer), __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1797, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_element_writer), __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -167113,25 +167155,25 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1797, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1796, __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;
 
-  /* "src/lxml/serializer.pxi":1798
+  /* "src/lxml/serializer.pxi":1797
  *     async def __aenter__(self):
  *         self._element_writer.__enter__()
  *         data = self._writer._flush()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._writer._async_outfile.write(data)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self->_writer); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1798, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self->_writer); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1799
+  /* "src/lxml/serializer.pxi":1798
  *         self._element_writer.__enter__()
  *         data = self._writer._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -167141,14 +167183,14 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
   __pyx_t_4 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_4) {
 
-    /* "src/lxml/serializer.pxi":1800
+    /* "src/lxml/serializer.pxi":1799
  *         data = self._writer._flush()
  *         if data:
  *             await self._writer._async_outfile.write(data)             # <<<<<<<<<<<<<<
  * 
  *     async def __aexit__(self, *args):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_writer->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1800, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_writer->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1799, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -167162,7 +167204,7 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
     }
     __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1800, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1799, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_1);
@@ -167176,16 +167218,16 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1800, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1799, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1800, __pyx_L1_error)
+        else __PYX_ERR(9, 1799, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1799
+    /* "src/lxml/serializer.pxi":1798
  *         self._element_writer.__enter__()
  *         data = self._writer._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -167195,7 +167237,7 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1796
+  /* "src/lxml/serializer.pxi":1795
  *         self._writer = writer
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -167223,7 +167265,7 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_4generator9(__p
 }
 static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1802
+/* "src/lxml/serializer.pxi":1801
  *             await self._writer._async_outfile.write(data)
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
@@ -167262,7 +167304,7 @@ static PyObject *__pyx_pf_4lxml_5etree_23_AsyncFileWriterElement_5__aexit__(stru
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_10___aexit__ *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1802, __pyx_L1_error)
+    __PYX_ERR(9, 1801, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -167273,7 +167315,7 @@ static PyObject *__pyx_pf_4lxml_5etree_23_AsyncFileWriterElement_5__aexit__(stru
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_args);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_args);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10, __pyx_codeobj__90, (PyObject *) __pyx_cur_scope, __pyx_n_s_aexit, __pyx_n_s_AsyncFileWriterElement___aexit, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1802, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10, __pyx_codeobj__90, (PyObject *) __pyx_cur_scope, __pyx_n_s_aexit, __pyx_n_s_AsyncFileWriterElement___aexit, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1801, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -167310,36 +167352,36 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1802, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1801, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1803
+  /* "src/lxml/serializer.pxi":1802
  * 
  *     async def __aexit__(self, *args):
  *         self._element_writer.__exit__(*args)             # <<<<<<<<<<<<<<
  *         data = self._writer._flush()
  *         if data:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_element_writer), __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1803, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_element_writer), __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_cur_scope->__pyx_v_args, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1803, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_cur_scope->__pyx_v_args, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1804
+  /* "src/lxml/serializer.pxi":1803
  *     async def __aexit__(self, *args):
  *         self._element_writer.__exit__(*args)
  *         data = self._writer._flush()             # <<<<<<<<<<<<<<
  *         if data:
  *             await self._writer._async_outfile.write(data)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self->_writer); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1804, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush(__pyx_cur_scope->__pyx_v_self->_writer); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1803, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_cur_scope->__pyx_v_data = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1805
+  /* "src/lxml/serializer.pxi":1804
  *         self._element_writer.__exit__(*args)
  *         data = self._writer._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -167349,14 +167391,14 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__
   __pyx_t_3 = (__pyx_cur_scope->__pyx_v_data != Py_None)&&(PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_data) != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/serializer.pxi":1806
+    /* "src/lxml/serializer.pxi":1805
  *         data = self._writer._flush()
  *         if data:
  *             await self._writer._async_outfile.write(data)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_writer->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1806, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->_writer->_async_outfile, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1805, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -167370,7 +167412,7 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_cur_scope->__pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_data);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1806, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1805, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_r = __Pyx_Coroutine_Yield_From(__pyx_generator, __pyx_t_2);
@@ -167384,16 +167426,16 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L5_resume_from_await:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1806, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1805, __pyx_L1_error)
     } else {
       PyObject* exc_type = __Pyx_PyErr_Occurred();
       if (exc_type) {
         if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
-        else __PYX_ERR(9, 1806, __pyx_L1_error)
+        else __PYX_ERR(9, 1805, __pyx_L1_error)
       }
     }
 
-    /* "src/lxml/serializer.pxi":1805
+    /* "src/lxml/serializer.pxi":1804
  *         self._element_writer.__exit__(*args)
  *         data = self._writer._flush()
  *         if data:             # <<<<<<<<<<<<<<
@@ -167403,7 +167445,7 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1802
+  /* "src/lxml/serializer.pxi":1801
  *             await self._writer._async_outfile.write(data)
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
@@ -167430,7 +167472,7 @@ static PyObject *__pyx_gb_4lxml_5etree_23_AsyncFileWriterElement_7generator10(__
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1818
+/* "src/lxml/serializer.pxi":1817
  *     cdef int _old_method
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config, int method):             # <<<<<<<<<<<<<<
@@ -167475,17 +167517,17 @@ static int __pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(PyObject *__pyx
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_element_config)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 1); __PYX_ERR(9, 1818, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 1); __PYX_ERR(9, 1817, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 2); __PYX_ERR(9, 1818, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 2); __PYX_ERR(9, 1817, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1818, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1817, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -167496,17 +167538,17 @@ static int __pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(PyObject *__pyx
     }
     __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)values[0]);
     __pyx_v_element_config = values[1];
-    __pyx_v_method = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1818, __pyx_L3_error)
+    __pyx_v_method = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1817, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1818, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1817, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._FileWriterElement.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__IncrementalFileWriter, 0, "writer", 0))) __PYX_ERR(9, 1818, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__IncrementalFileWriter, 0, "writer", 0))) __PYX_ERR(9, 1817, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(((struct __pyx_obj_4lxml_5etree__FileWriterElement *)__pyx_v_self), __pyx_v_writer, __pyx_v_element_config, __pyx_v_method);
 
   /* function exit code */
@@ -167524,7 +167566,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "src/lxml/serializer.pxi":1819
+  /* "src/lxml/serializer.pxi":1818
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config, int method):
  *         self._writer = writer             # <<<<<<<<<<<<<<
@@ -167537,7 +167579,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_writer));
   __pyx_v_self->_writer = __pyx_v_writer;
 
-  /* "src/lxml/serializer.pxi":1820
+  /* "src/lxml/serializer.pxi":1819
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config, int method):
  *         self._writer = writer
  *         self._element = element_config             # <<<<<<<<<<<<<<
@@ -167550,7 +167592,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_self->_element);
   __pyx_v_self->_element = __pyx_v_element_config;
 
-  /* "src/lxml/serializer.pxi":1821
+  /* "src/lxml/serializer.pxi":1820
  *         self._writer = writer
  *         self._element = element_config
  *         self._new_method = method             # <<<<<<<<<<<<<<
@@ -167559,7 +167601,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
  */
   __pyx_v_self->_new_method = __pyx_v_method;
 
-  /* "src/lxml/serializer.pxi":1822
+  /* "src/lxml/serializer.pxi":1821
  *         self._element = element_config
  *         self._new_method = method
  *         self._old_method = writer._method             # <<<<<<<<<<<<<<
@@ -167569,7 +167611,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   __pyx_t_1 = __pyx_v_writer->_method;
   __pyx_v_self->_old_method = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":1818
+  /* "src/lxml/serializer.pxi":1817
  *     cdef int _old_method
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config, int method):             # <<<<<<<<<<<<<<
@@ -167583,7 +167625,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1824
+/* "src/lxml/serializer.pxi":1823
  *         self._old_method = writer._method
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -167616,7 +167658,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_2__enter__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "src/lxml/serializer.pxi":1825
+  /* "src/lxml/serializer.pxi":1824
  * 
  *     def __enter__(self):
  *         self._writer._method = self._new_method             # <<<<<<<<<<<<<<
@@ -167626,7 +167668,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_2__enter__(struct __
   __pyx_t_1 = __pyx_v_self->_new_method;
   __pyx_v_self->_writer->_method = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":1826
+  /* "src/lxml/serializer.pxi":1825
  *     def __enter__(self):
  *         self._writer._method = self._new_method
  *         self._writer._write_start_element(self._element)             # <<<<<<<<<<<<<<
@@ -167635,12 +167677,12 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_2__enter__(struct __
  */
   __pyx_t_2 = __pyx_v_self->_element;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element(__pyx_v_self->_writer, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1826, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element(__pyx_v_self->_writer, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1825, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/serializer.pxi":1824
+  /* "src/lxml/serializer.pxi":1823
  *         self._old_method = writer._method
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -167662,7 +167704,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_2__enter__(struct __
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1828
+/* "src/lxml/serializer.pxi":1827
  *         self._writer._write_start_element(self._element)
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -167708,17 +167750,17 @@ static PyObject *__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__(PyObject *
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(9, 1828, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(9, 1827, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_tb)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(9, 1828, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(9, 1827, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(9, 1828, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(9, 1827, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -167733,7 +167775,7 @@ static PyObject *__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1828, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1827, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._FileWriterElement.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -167757,7 +167799,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_4__exit__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "src/lxml/serializer.pxi":1829
+  /* "src/lxml/serializer.pxi":1828
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         self._writer._write_end_element(self._element)             # <<<<<<<<<<<<<<
@@ -167766,12 +167808,12 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_4__exit__(struct __p
  */
   __pyx_t_1 = __pyx_v_self->_element;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_element(__pyx_v_self->_writer, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1829, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_element(__pyx_v_self->_writer, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1828, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":1830
+  /* "src/lxml/serializer.pxi":1829
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         self._writer._write_end_element(self._element)
  *         self._writer._method = self._old_method             # <<<<<<<<<<<<<<
@@ -167781,7 +167823,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_4__exit__(struct __p
   __pyx_t_3 = __pyx_v_self->_old_method;
   __pyx_v_self->_writer->_method = __pyx_t_3;
 
-  /* "src/lxml/serializer.pxi":1828
+  /* "src/lxml/serializer.pxi":1827
  *         self._writer._write_start_element(self._element)
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -167803,7 +167845,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_4__exit__(struct __p
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1843
+/* "src/lxml/serializer.pxi":1842
  *     cdef bint _exited
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, int method):             # <<<<<<<<<<<<<<
@@ -167845,11 +167887,11 @@ static int __pyx_pw_4lxml_5etree_14_MethodChanger_1__cinit__(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(9, 1843, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(9, 1842, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1843, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(9, 1842, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -167858,17 +167900,17 @@ static int __pyx_pw_4lxml_5etree_14_MethodChanger_1__cinit__(PyObject *__pyx_v_s
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
     __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)values[0]);
-    __pyx_v_method = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1843, __pyx_L3_error)
+    __pyx_v_method = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_method == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 1842, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1843, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1842, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._MethodChanger.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__IncrementalFileWriter, 0, "writer", 0))) __PYX_ERR(9, 1843, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__IncrementalFileWriter, 0, "writer", 0))) __PYX_ERR(9, 1842, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(((struct __pyx_obj_4lxml_5etree__MethodChanger *)__pyx_v_self), __pyx_v_writer, __pyx_v_method);
 
   /* function exit code */
@@ -167886,7 +167928,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "src/lxml/serializer.pxi":1844
+  /* "src/lxml/serializer.pxi":1843
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, int method):
  *         self._writer = writer             # <<<<<<<<<<<<<<
@@ -167899,7 +167941,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_writer));
   __pyx_v_self->_writer = __pyx_v_writer;
 
-  /* "src/lxml/serializer.pxi":1845
+  /* "src/lxml/serializer.pxi":1844
  *     def __cinit__(self, _IncrementalFileWriter writer not None, int method):
  *         self._writer = writer
  *         self._new_method = method             # <<<<<<<<<<<<<<
@@ -167908,7 +167950,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
  */
   __pyx_v_self->_new_method = __pyx_v_method;
 
-  /* "src/lxml/serializer.pxi":1846
+  /* "src/lxml/serializer.pxi":1845
  *         self._writer = writer
  *         self._new_method = method
  *         self._old_method = writer._method             # <<<<<<<<<<<<<<
@@ -167918,7 +167960,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
   __pyx_t_1 = __pyx_v_writer->_method;
   __pyx_v_self->_old_method = __pyx_t_1;
 
-  /* "src/lxml/serializer.pxi":1847
+  /* "src/lxml/serializer.pxi":1846
  *         self._new_method = method
  *         self._old_method = writer._method
  *         self._entered = False             # <<<<<<<<<<<<<<
@@ -167927,7 +167969,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
  */
   __pyx_v_self->_entered = 0;
 
-  /* "src/lxml/serializer.pxi":1848
+  /* "src/lxml/serializer.pxi":1847
  *         self._old_method = writer._method
  *         self._entered = False
  *         self._exited = False             # <<<<<<<<<<<<<<
@@ -167936,7 +167978,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
  */
   __pyx_v_self->_exited = 0;
 
-  /* "src/lxml/serializer.pxi":1843
+  /* "src/lxml/serializer.pxi":1842
  *     cdef bint _exited
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, int method):             # <<<<<<<<<<<<<<
@@ -167950,7 +167992,7 @@ static int __pyx_pf_4lxml_5etree_14_MethodChanger___cinit__(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1850
+/* "src/lxml/serializer.pxi":1849
  *         self._exited = False
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -167985,7 +168027,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "src/lxml/serializer.pxi":1851
+  /* "src/lxml/serializer.pxi":1850
  * 
  *     def __enter__(self):
  *         if self._entered:             # <<<<<<<<<<<<<<
@@ -167995,14 +168037,14 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
   __pyx_t_1 = (__pyx_v_self->_entered != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1852
+    /* "src/lxml/serializer.pxi":1851
  *     def __enter__(self):
  *         if self._entered:
  *             raise LxmlSyntaxError("Inconsistent enter action in context manager")             # <<<<<<<<<<<<<<
  *         self._writer._method = self._new_method
  *         self._entered = True
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1852, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1851, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -168016,14 +168058,14 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_Inconsistent_enter_action_in_con) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_Inconsistent_enter_action_in_con);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1852, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1851, __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(9, 1852, __pyx_L1_error)
+    __PYX_ERR(9, 1851, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1851
+    /* "src/lxml/serializer.pxi":1850
  * 
  *     def __enter__(self):
  *         if self._entered:             # <<<<<<<<<<<<<<
@@ -168032,7 +168074,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
  */
   }
 
-  /* "src/lxml/serializer.pxi":1853
+  /* "src/lxml/serializer.pxi":1852
  *         if self._entered:
  *             raise LxmlSyntaxError("Inconsistent enter action in context manager")
  *         self._writer._method = self._new_method             # <<<<<<<<<<<<<<
@@ -168042,7 +168084,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
   __pyx_t_5 = __pyx_v_self->_new_method;
   __pyx_v_self->_writer->_method = __pyx_t_5;
 
-  /* "src/lxml/serializer.pxi":1854
+  /* "src/lxml/serializer.pxi":1853
  *             raise LxmlSyntaxError("Inconsistent enter action in context manager")
  *         self._writer._method = self._new_method
  *         self._entered = True             # <<<<<<<<<<<<<<
@@ -168051,7 +168093,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
  */
   __pyx_v_self->_entered = 1;
 
-  /* "src/lxml/serializer.pxi":1850
+  /* "src/lxml/serializer.pxi":1849
  *         self._exited = False
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -168074,7 +168116,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_2__enter__(struct __pyx_
   return __pyx_r;
 }
 
-/* "src/lxml/serializer.pxi":1856
+/* "src/lxml/serializer.pxi":1855
  *         self._entered = True
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -168120,17 +168162,17 @@ static PyObject *__pyx_pw_4lxml_5etree_14_MethodChanger_5__exit__(PyObject *__py
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(9, 1856, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(9, 1855, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_exc_tb)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(9, 1856, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(9, 1855, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(9, 1856, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(9, 1855, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -168145,7 +168187,7 @@ static PyObject *__pyx_pw_4lxml_5etree_14_MethodChanger_5__exit__(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1856, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 1855, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._MethodChanger.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -168171,7 +168213,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "src/lxml/serializer.pxi":1857
+  /* "src/lxml/serializer.pxi":1856
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         if self._exited:             # <<<<<<<<<<<<<<
@@ -168181,14 +168223,14 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
   __pyx_t_1 = (__pyx_v_self->_exited != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1858
+    /* "src/lxml/serializer.pxi":1857
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         if self._exited:
  *             raise LxmlSyntaxError("Inconsistent exit action in context manager")             # <<<<<<<<<<<<<<
  *         if self._writer._method != self._new_method:
  *             raise LxmlSyntaxError("Method changed outside of context manager")
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1858, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1857, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -168202,14 +168244,14 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_Inconsistent_exit_action_in_cont) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_Inconsistent_exit_action_in_cont);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1858, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1857, __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(9, 1858, __pyx_L1_error)
+    __PYX_ERR(9, 1857, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1857
+    /* "src/lxml/serializer.pxi":1856
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         if self._exited:             # <<<<<<<<<<<<<<
@@ -168218,7 +168260,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/serializer.pxi":1859
+  /* "src/lxml/serializer.pxi":1858
  *         if self._exited:
  *             raise LxmlSyntaxError("Inconsistent exit action in context manager")
  *         if self._writer._method != self._new_method:             # <<<<<<<<<<<<<<
@@ -168228,14 +168270,14 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_self->_writer->_method != __pyx_v_self->_new_method) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/serializer.pxi":1860
+    /* "src/lxml/serializer.pxi":1859
  *             raise LxmlSyntaxError("Inconsistent exit action in context manager")
  *         if self._writer._method != self._new_method:
  *             raise LxmlSyntaxError("Method changed outside of context manager")             # <<<<<<<<<<<<<<
  *         self._writer._method = self._old_method
  *         self._exited = True
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1860, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 1859, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -168249,14 +168291,14 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_Method_changed_outside_of_contex) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_Method_changed_outside_of_contex);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1860, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1859, __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(9, 1860, __pyx_L1_error)
+    __PYX_ERR(9, 1859, __pyx_L1_error)
 
-    /* "src/lxml/serializer.pxi":1859
+    /* "src/lxml/serializer.pxi":1858
  *         if self._exited:
  *             raise LxmlSyntaxError("Inconsistent exit action in context manager")
  *         if self._writer._method != self._new_method:             # <<<<<<<<<<<<<<
@@ -168265,7 +168307,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/serializer.pxi":1861
+  /* "src/lxml/serializer.pxi":1860
  *         if self._writer._method != self._new_method:
  *             raise LxmlSyntaxError("Method changed outside of context manager")
  *         self._writer._method = self._old_method             # <<<<<<<<<<<<<<
@@ -168275,7 +168317,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
   __pyx_t_5 = __pyx_v_self->_old_method;
   __pyx_v_self->_writer->_method = __pyx_t_5;
 
-  /* "src/lxml/serializer.pxi":1862
+  /* "src/lxml/serializer.pxi":1861
  *             raise LxmlSyntaxError("Method changed outside of context manager")
  *         self._writer._method = self._old_method
  *         self._exited = True             # <<<<<<<<<<<<<<
@@ -168284,7 +168326,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
  */
   __pyx_v_self->_exited = 1;
 
-  /* "src/lxml/serializer.pxi":1856
+  /* "src/lxml/serializer.pxi":1855
  *         self._entered = True
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -168308,7 +168350,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_4__exit__(struct __pyx_o
 }
 static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_8generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1864
+/* "src/lxml/serializer.pxi":1863
  *         self._exited = True
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -168342,7 +168384,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_6__aenter__(struct __pyx
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_11___aenter__ *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1864, __pyx_L1_error)
+    __PYX_ERR(9, 1863, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -168350,7 +168392,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_6__aenter__(struct __pyx
   __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_14_MethodChanger_8generator11, __pyx_codeobj__91, (PyObject *) __pyx_cur_scope, __pyx_n_s_aenter, __pyx_n_s_MethodChanger___aenter, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1864, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_14_MethodChanger_8generator11, __pyx_codeobj__91, (PyObject *) __pyx_cur_scope, __pyx_n_s_aenter, __pyx_n_s_MethodChanger___aenter, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1863, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -168385,9 +168427,9 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_8generator11(__pyx_Corou
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1864, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1863, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1866
+  /* "src/lxml/serializer.pxi":1865
  *     async def __aenter__(self):
  *         # for your async convenience
  *         return self.__enter__()             # <<<<<<<<<<<<<<
@@ -168395,7 +168437,7 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_8generator11(__pyx_Corou
  *     async def __aexit__(self, *args):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1866, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1865, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -168409,7 +168451,7 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_8generator11(__pyx_Corou
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1866, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1865, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_1);
@@ -168417,7 +168459,7 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_8generator11(__pyx_Corou
   goto __pyx_L0;
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1864
+  /* "src/lxml/serializer.pxi":1863
  *         self._exited = True
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
@@ -168443,7 +168485,7 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_8generator11(__pyx_Corou
 }
 static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_11generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/serializer.pxi":1868
+/* "src/lxml/serializer.pxi":1867
  *         return self.__enter__()
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
@@ -168482,7 +168524,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_9__aexit__(struct __pyx_
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_12___aexit__ *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(9, 1868, __pyx_L1_error)
+    __PYX_ERR(9, 1867, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -168493,7 +168535,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_MethodChanger_9__aexit__(struct __pyx_
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_args);
   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_args);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_14_MethodChanger_11generator12, __pyx_codeobj__92, (PyObject *) __pyx_cur_scope, __pyx_n_s_aexit, __pyx_n_s_MethodChanger___aexit, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1868, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_14_MethodChanger_11generator12, __pyx_codeobj__92, (PyObject *) __pyx_cur_scope, __pyx_n_s_aexit, __pyx_n_s_MethodChanger___aexit, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(9, 1867, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -168527,17 +168569,17 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_11generator12(__pyx_Coro
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1868, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(9, 1867, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1870
+  /* "src/lxml/serializer.pxi":1869
  *     async def __aexit__(self, *args):
  *         # for your async convenience
  *         return self.__exit__(*args)             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1870, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1869, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_cur_scope->__pyx_v_args, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1870, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_cur_scope->__pyx_v_args, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1869, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_2);
@@ -168545,7 +168587,7 @@ static PyObject *__pyx_gb_4lxml_5etree_14_MethodChanger_11generator12(__pyx_Coro
   goto __pyx_L0;
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/serializer.pxi":1868
+  /* "src/lxml/serializer.pxi":1867
  *         return self.__enter__()
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
@@ -192155,6 +192197,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_6evaluate(struct __
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -192173,11 +192216,14 @@ static PyObject *__pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_6evaluate(struct __
   __Pyx_INCREF(__pyx_v__eval_arg);
   __Pyx_GIVEREF(__pyx_v__eval_arg);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__eval_arg);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_v__variables); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 163, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 163, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* "src/lxml/xpath.pxi":150
@@ -192192,6 +192238,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_6evaluate(struct __
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("lxml.etree._XPathEvaluatorBase.evaluate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -213990,7 +214037,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_7content___get__(struct
  *         _assertValidDTDNode(self, self._c_node)
  *         return funicodeOrNone(self._c_node.content)             # <<<<<<<<<<<<<<
  * 
- * 
+ *     @property
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_node->content); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 259, __pyx_L1_error)
@@ -214018,7 +214065,80 @@ static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_7content___get__(struct
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":274
+/* "src/lxml/dtd.pxi":262
+ * 
+ *     @property
+ *     def system_url(self):             # <<<<<<<<<<<<<<
+ *         _assertValidDTDNode(self, self._c_node)
+ *         return funicodeOrNone(self._c_node.SystemID)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_5etree_14_DTDEntityDecl_10system_url_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_5etree_14_DTDEntityDecl_10system_url_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_5etree_14_DTDEntityDecl_10system_url___get__(((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl_10system_url___get__(struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "src/lxml/dtd.pxi":263
+ *     @property
+ *     def system_url(self):
+ *         _assertValidDTDNode(self, self._c_node)             # <<<<<<<<<<<<<<
+ *         return funicodeOrNone(self._c_node.SystemID)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidDTDNode(((PyObject *)__pyx_v_self), __pyx_v_self->_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(20, 263, __pyx_L1_error)
+
+  /* "src/lxml/dtd.pxi":264
+ *     def system_url(self):
+ *         _assertValidDTDNode(self, self._c_node)
+ *         return funicodeOrNone(self._c_node.SystemID)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_node->SystemID); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 264, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "src/lxml/dtd.pxi":262
+ * 
+ *     @property
+ *     def system_url(self):             # <<<<<<<<<<<<<<
+ *         _assertValidDTDNode(self, self._c_node)
+ *         return funicodeOrNone(self._c_node.SystemID)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("lxml.etree._DTDEntityDecl.system_url.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "src/lxml/dtd.pxi":279
  *     """
  *     cdef tree.xmlDtd* _c_dtd
  *     def __init__(self, file=None, *, external_id=None):             # <<<<<<<<<<<<<<
@@ -214065,7 +214185,7 @@ static int __pyx_pw_4lxml_5etree_3DTD_1__init__(PyObject *__pyx_v_self, PyObject
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(20, 274, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(20, 279, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -214080,7 +214200,7 @@ static int __pyx_pw_4lxml_5etree_3DTD_1__init__(PyObject *__pyx_v_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 274, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 279, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.DTD.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -214117,14 +214237,14 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_file);
 
-  /* "src/lxml/dtd.pxi":275
+  /* "src/lxml/dtd.pxi":280
  *     cdef tree.xmlDtd* _c_dtd
  *     def __init__(self, file=None, *, external_id=None):
  *         _Validator.__init__(self)             # <<<<<<<<<<<<<<
  *         if file is not None:
  *             if _isString(file):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__Validator), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 275, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__Validator), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -214138,12 +214258,12 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_self));
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 275, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 280, __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;
 
-  /* "src/lxml/dtd.pxi":276
+  /* "src/lxml/dtd.pxi":281
  *     def __init__(self, file=None, *, external_id=None):
  *         _Validator.__init__(self)
  *         if file is not None:             # <<<<<<<<<<<<<<
@@ -214154,7 +214274,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "src/lxml/dtd.pxi":277
+    /* "src/lxml/dtd.pxi":282
  *         _Validator.__init__(self)
  *         if file is not None:
  *             if _isString(file):             # <<<<<<<<<<<<<<
@@ -214164,19 +214284,19 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
     __pyx_t_5 = (_isString(__pyx_v_file) != 0);
     if (__pyx_t_5) {
 
-      /* "src/lxml/dtd.pxi":278
+      /* "src/lxml/dtd.pxi":283
  *         if file is not None:
  *             if _isString(file):
  *                 file = _encodeFilename(file)             # <<<<<<<<<<<<<<
  *                 with self._error_log:
  *                     orig_loader = _register_document_loader()
  */
-      __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_file); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 278, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_file); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 283, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF_SET(__pyx_v_file, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "src/lxml/dtd.pxi":279
+      /* "src/lxml/dtd.pxi":284
  *             if _isString(file):
  *                 file = _encodeFilename(file)
  *                 with self._error_log:             # <<<<<<<<<<<<<<
@@ -214184,15 +214304,15 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  *                     self._c_dtd = xmlparser.xmlParseDTD(NULL, _xcstr(file))
  */
       /*with:*/ {
-        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->__pyx_base._error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 279, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->__pyx_base._error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 284, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_7 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->__pyx_base._error_log); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(20, 279, __pyx_L5_error)
+        __pyx_t_7 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->__pyx_base._error_log); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(20, 284, __pyx_L5_error)
         /*try:*/ {
           {
             (void)__pyx_t_8; (void)__pyx_t_9; (void)__pyx_t_10; /* mark used */
             /*try:*/ {
 
-              /* "src/lxml/dtd.pxi":280
+              /* "src/lxml/dtd.pxi":285
  *                 file = _encodeFilename(file)
  *                 with self._error_log:
  *                     orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -214201,7 +214321,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
               __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-              /* "src/lxml/dtd.pxi":281
+              /* "src/lxml/dtd.pxi":286
  *                 with self._error_log:
  *                     orig_loader = _register_document_loader()
  *                     self._c_dtd = xmlparser.xmlParseDTD(NULL, _xcstr(file))             # <<<<<<<<<<<<<<
@@ -214210,7 +214330,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
               __pyx_v_self->_c_dtd = xmlParseDTD(NULL, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_file));
 
-              /* "src/lxml/dtd.pxi":282
+              /* "src/lxml/dtd.pxi":287
  *                     orig_loader = _register_document_loader()
  *                     self._c_dtd = xmlparser.xmlParseDTD(NULL, _xcstr(file))
  *                     _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -214219,7 +214339,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
               __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
 
-              /* "src/lxml/dtd.pxi":279
+              /* "src/lxml/dtd.pxi":284
  *             if _isString(file):
  *                 file = _encodeFilename(file)
  *                 with self._error_log:             # <<<<<<<<<<<<<<
@@ -214234,7 +214354,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
             if (__pyx_t_6) {
               __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-              if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 279, __pyx_L1_error)
+              if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 284, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
             }
@@ -214249,7 +214369,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
         __pyx_L15:;
       }
 
-      /* "src/lxml/dtd.pxi":277
+      /* "src/lxml/dtd.pxi":282
  *         _Validator.__init__(self)
  *         if file is not None:
  *             if _isString(file):             # <<<<<<<<<<<<<<
@@ -214259,18 +214379,18 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
       goto __pyx_L4;
     }
 
-    /* "src/lxml/dtd.pxi":283
+    /* "src/lxml/dtd.pxi":288
  *                     self._c_dtd = xmlparser.xmlParseDTD(NULL, _xcstr(file))
  *                     _reset_document_loader(orig_loader)
  *             elif hasattr(file, 'read'):             # <<<<<<<<<<<<<<
  *                 orig_loader = _register_document_loader()
  *                 self._c_dtd = _parseDtdFromFilelike(file)
  */
-    __pyx_t_5 = __Pyx_HasAttr(__pyx_v_file, __pyx_n_s_read); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(20, 283, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_HasAttr(__pyx_v_file, __pyx_n_s_read); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(20, 288, __pyx_L1_error)
     __pyx_t_4 = (__pyx_t_5 != 0);
     if (likely(__pyx_t_4)) {
 
-      /* "src/lxml/dtd.pxi":284
+      /* "src/lxml/dtd.pxi":289
  *                     _reset_document_loader(orig_loader)
  *             elif hasattr(file, 'read'):
  *                 orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -214279,17 +214399,17 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
       __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-      /* "src/lxml/dtd.pxi":285
+      /* "src/lxml/dtd.pxi":290
  *             elif hasattr(file, 'read'):
  *                 orig_loader = _register_document_loader()
  *                 self._c_dtd = _parseDtdFromFilelike(file)             # <<<<<<<<<<<<<<
  *                 _reset_document_loader(orig_loader)
  *             else:
  */
-      __pyx_t_11 = __pyx_f_4lxml_5etree__parseDtdFromFilelike(__pyx_v_file); if (unlikely(__pyx_t_11 == ((xmlDtd *)NULL))) __PYX_ERR(20, 285, __pyx_L1_error)
+      __pyx_t_11 = __pyx_f_4lxml_5etree__parseDtdFromFilelike(__pyx_v_file); if (unlikely(__pyx_t_11 == ((xmlDtd *)NULL))) __PYX_ERR(20, 290, __pyx_L1_error)
       __pyx_v_self->_c_dtd = __pyx_t_11;
 
-      /* "src/lxml/dtd.pxi":286
+      /* "src/lxml/dtd.pxi":291
  *                 orig_loader = _register_document_loader()
  *                 self._c_dtd = _parseDtdFromFilelike(file)
  *                 _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -214298,7 +214418,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
       __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
 
-      /* "src/lxml/dtd.pxi":283
+      /* "src/lxml/dtd.pxi":288
  *                     self._c_dtd = xmlparser.xmlParseDTD(NULL, _xcstr(file))
  *                     _reset_document_loader(orig_loader)
  *             elif hasattr(file, 'read'):             # <<<<<<<<<<<<<<
@@ -214308,7 +214428,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
       goto __pyx_L4;
     }
 
-    /* "src/lxml/dtd.pxi":288
+    /* "src/lxml/dtd.pxi":293
  *                 _reset_document_loader(orig_loader)
  *             else:
  *                 raise DTDParseError, u"file must be a filename or file-like object"             # <<<<<<<<<<<<<<
@@ -214317,11 +214437,11 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
     /*else*/ {
       __Pyx_Raise(((PyObject *)__pyx_ptype_4lxml_5etree_DTDParseError), __pyx_kp_u_file_must_be_a_filename_or_file, 0, 0);
-      __PYX_ERR(20, 288, __pyx_L1_error)
+      __PYX_ERR(20, 293, __pyx_L1_error)
     }
     __pyx_L4:;
 
-    /* "src/lxml/dtd.pxi":276
+    /* "src/lxml/dtd.pxi":281
  *     def __init__(self, file=None, *, external_id=None):
  *         _Validator.__init__(self)
  *         if file is not None:             # <<<<<<<<<<<<<<
@@ -214331,7 +214451,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
     goto __pyx_L3;
   }
 
-  /* "src/lxml/dtd.pxi":289
+  /* "src/lxml/dtd.pxi":294
  *             else:
  *                 raise DTDParseError, u"file must be a filename or file-like object"
  *         elif external_id is not None:             # <<<<<<<<<<<<<<
@@ -214342,7 +214462,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (likely(__pyx_t_5)) {
 
-    /* "src/lxml/dtd.pxi":290
+    /* "src/lxml/dtd.pxi":295
  *                 raise DTDParseError, u"file must be a filename or file-like object"
  *         elif external_id is not None:
  *             with self._error_log:             # <<<<<<<<<<<<<<
@@ -214350,9 +214470,9 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  *                 self._c_dtd = xmlparser.xmlParseDTD(<const_xmlChar*>external_id, NULL)
  */
     /*with:*/ {
-      __pyx_t_6 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->__pyx_base._error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 290, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->__pyx_base._error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 295, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->__pyx_base._error_log); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(20, 290, __pyx_L16_error)
+      __pyx_t_7 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->__pyx_base._error_log); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(20, 295, __pyx_L16_error)
       /*try:*/ {
         {
           __Pyx_PyThreadState_declare
@@ -214363,7 +214483,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
           __Pyx_XGOTREF(__pyx_t_8);
           /*try:*/ {
 
-            /* "src/lxml/dtd.pxi":291
+            /* "src/lxml/dtd.pxi":296
  *         elif external_id is not None:
  *             with self._error_log:
  *                 orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -214372,17 +214492,17 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
             __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-            /* "src/lxml/dtd.pxi":292
+            /* "src/lxml/dtd.pxi":297
  *             with self._error_log:
  *                 orig_loader = _register_document_loader()
  *                 self._c_dtd = xmlparser.xmlParseDTD(<const_xmlChar*>external_id, NULL)             # <<<<<<<<<<<<<<
  *                 _reset_document_loader(orig_loader)
  *         else:
  */
-            __pyx_t_12 = __Pyx_PyObject_AsUString(__pyx_v_external_id); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(20, 292, __pyx_L20_error)
+            __pyx_t_12 = __Pyx_PyObject_AsUString(__pyx_v_external_id); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(20, 297, __pyx_L20_error)
             __pyx_v_self->_c_dtd = xmlParseDTD(((const xmlChar *)__pyx_t_12), NULL);
 
-            /* "src/lxml/dtd.pxi":293
+            /* "src/lxml/dtd.pxi":298
  *                 orig_loader = _register_document_loader()
  *                 self._c_dtd = xmlparser.xmlParseDTD(<const_xmlChar*>external_id, NULL)
  *                 _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -214391,7 +214511,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
             __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
 
-            /* "src/lxml/dtd.pxi":290
+            /* "src/lxml/dtd.pxi":295
  *                 raise DTDParseError, u"file must be a filename or file-like object"
  *         elif external_id is not None:
  *             with self._error_log:             # <<<<<<<<<<<<<<
@@ -214409,20 +214529,20 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
           __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
           /*except:*/ {
             __Pyx_AddTraceback("lxml.etree.DTD.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(20, 290, __pyx_L22_except_error)
+            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(20, 295, __pyx_L22_except_error)
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_GOTREF(__pyx_t_2);
             __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_13 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(20, 290, __pyx_L22_except_error)
+            __pyx_t_13 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(20, 295, __pyx_L22_except_error)
             __Pyx_GOTREF(__pyx_t_13);
             __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_13, NULL);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-            if (unlikely(!__pyx_t_14)) __PYX_ERR(20, 290, __pyx_L22_except_error)
+            if (unlikely(!__pyx_t_14)) __PYX_ERR(20, 295, __pyx_L22_except_error)
             __Pyx_GOTREF(__pyx_t_14);
             __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_14);
             __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-            if (__pyx_t_5 < 0) __PYX_ERR(20, 290, __pyx_L22_except_error)
+            if (__pyx_t_5 < 0) __PYX_ERR(20, 295, __pyx_L22_except_error)
             __pyx_t_4 = ((!(__pyx_t_5 != 0)) != 0);
             if (__pyx_t_4) {
               __Pyx_GIVEREF(__pyx_t_1);
@@ -214430,7 +214550,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
               __Pyx_XGIVEREF(__pyx_t_3);
               __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_3);
               __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; 
-              __PYX_ERR(20, 290, __pyx_L22_except_error)
+              __PYX_ERR(20, 295, __pyx_L22_except_error)
             }
             __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -214456,7 +214576,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
           if (__pyx_t_6) {
             __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__35, NULL);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-            if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 290, __pyx_L1_error)
+            if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 295, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
           }
@@ -214471,7 +214591,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
       __pyx_L29:;
     }
 
-    /* "src/lxml/dtd.pxi":289
+    /* "src/lxml/dtd.pxi":294
  *             else:
  *                 raise DTDParseError, u"file must be a filename or file-like object"
  *         elif external_id is not None:             # <<<<<<<<<<<<<<
@@ -214481,7 +214601,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
     goto __pyx_L3;
   }
 
-  /* "src/lxml/dtd.pxi":295
+  /* "src/lxml/dtd.pxi":300
  *                 _reset_document_loader(orig_loader)
  *         else:
  *             raise DTDParseError, u"either filename or external ID required"             # <<<<<<<<<<<<<<
@@ -214490,11 +214610,11 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
   /*else*/ {
     __Pyx_Raise(((PyObject *)__pyx_ptype_4lxml_5etree_DTDParseError), __pyx_kp_u_either_filename_or_external_ID_r, 0, 0);
-    __PYX_ERR(20, 295, __pyx_L1_error)
+    __PYX_ERR(20, 300, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "src/lxml/dtd.pxi":297
+  /* "src/lxml/dtd.pxi":302
  *             raise DTDParseError, u"either filename or external ID required"
  * 
  *         if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214504,24 +214624,24 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   __pyx_t_4 = ((__pyx_v_self->_c_dtd == NULL) != 0);
   if (unlikely(__pyx_t_4)) {
 
-    /* "src/lxml/dtd.pxi":299
+    /* "src/lxml/dtd.pxi":304
  *         if self._c_dtd is NULL:
  *             raise DTDParseError(
  *                 self._error_log._buildExceptionMessage(u"error parsing DTD"),             # <<<<<<<<<<<<<<
  *                 self._error_log)
  * 
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->__pyx_base._error_log), __pyx_kp_u_error_parsing_DTD); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 299, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->__pyx_base._error_log), __pyx_kp_u_error_parsing_DTD); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 304, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
 
-    /* "src/lxml/dtd.pxi":298
+    /* "src/lxml/dtd.pxi":303
  * 
  *         if self._c_dtd is NULL:
  *             raise DTDParseError(             # <<<<<<<<<<<<<<
  *                 self._error_log._buildExceptionMessage(u"error parsing DTD"),
  *                 self._error_log)
  */
-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 298, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
@@ -214529,14 +214649,14 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDParseError), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 298, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDParseError), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(20, 298, __pyx_L1_error)
+    __PYX_ERR(20, 303, __pyx_L1_error)
 
-    /* "src/lxml/dtd.pxi":297
+    /* "src/lxml/dtd.pxi":302
  *             raise DTDParseError, u"either filename or external ID required"
  * 
  *         if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214545,7 +214665,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
  */
   }
 
-  /* "src/lxml/dtd.pxi":274
+  /* "src/lxml/dtd.pxi":279
  *     """
  *     cdef tree.xmlDtd* _c_dtd
  *     def __init__(self, file=None, *, external_id=None):             # <<<<<<<<<<<<<<
@@ -214569,7 +214689,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":303
+/* "src/lxml/dtd.pxi":308
  * 
  *     @property
  *     def name(self):             # <<<<<<<<<<<<<<
@@ -214600,7 +214720,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/dtd.pxi":304
+  /* "src/lxml/dtd.pxi":309
  *     @property
  *     def name(self):
  *        if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214610,7 +214730,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml
   __pyx_t_1 = ((__pyx_v_self->_c_dtd == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":305
+    /* "src/lxml/dtd.pxi":310
  *     def name(self):
  *        if self._c_dtd is NULL:
  *            return None             # <<<<<<<<<<<<<<
@@ -214621,7 +214741,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":304
+    /* "src/lxml/dtd.pxi":309
  *     @property
  *     def name(self):
  *        if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214630,7 +214750,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml
  */
   }
 
-  /* "src/lxml/dtd.pxi":306
+  /* "src/lxml/dtd.pxi":311
  *        if self._c_dtd is NULL:
  *            return None
  *        return funicodeOrNone(self._c_dtd.name)             # <<<<<<<<<<<<<<
@@ -214638,13 +214758,13 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml
  *     @property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_dtd->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 306, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_dtd->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":303
+  /* "src/lxml/dtd.pxi":308
  * 
  *     @property
  *     def name(self):             # <<<<<<<<<<<<<<
@@ -214663,7 +214783,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_4name___get__(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":309
+/* "src/lxml/dtd.pxi":314
  * 
  *     @property
  *     def external_id(self):             # <<<<<<<<<<<<<<
@@ -214694,7 +214814,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/dtd.pxi":310
+  /* "src/lxml/dtd.pxi":315
  *     @property
  *     def external_id(self):
  *        if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214704,7 +214824,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_self->_c_dtd == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":311
+    /* "src/lxml/dtd.pxi":316
  *     def external_id(self):
  *        if self._c_dtd is NULL:
  *            return None             # <<<<<<<<<<<<<<
@@ -214715,7 +214835,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_o
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":310
+    /* "src/lxml/dtd.pxi":315
  *     @property
  *     def external_id(self):
  *        if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214724,7 +214844,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/dtd.pxi":312
+  /* "src/lxml/dtd.pxi":317
  *        if self._c_dtd is NULL:
  *            return None
  *        return funicodeOrNone(self._c_dtd.ExternalID)             # <<<<<<<<<<<<<<
@@ -214732,13 +214852,13 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_o
  *     @property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_dtd->ExternalID); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 312, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_dtd->ExternalID); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 317, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":309
+  /* "src/lxml/dtd.pxi":314
  * 
  *     @property
  *     def external_id(self):             # <<<<<<<<<<<<<<
@@ -214757,7 +214877,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_11external_id___get__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":315
+/* "src/lxml/dtd.pxi":320
  * 
  *     @property
  *     def system_url(self):             # <<<<<<<<<<<<<<
@@ -214788,7 +214908,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10system_url___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/dtd.pxi":316
+  /* "src/lxml/dtd.pxi":321
  *     @property
  *     def system_url(self):
  *        if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214798,7 +214918,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10system_url___get__(struct __pyx_ob
   __pyx_t_1 = ((__pyx_v_self->_c_dtd == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":317
+    /* "src/lxml/dtd.pxi":322
  *     def system_url(self):
  *        if self._c_dtd is NULL:
  *            return None             # <<<<<<<<<<<<<<
@@ -214809,7 +214929,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10system_url___get__(struct __pyx_ob
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":316
+    /* "src/lxml/dtd.pxi":321
  *     @property
  *     def system_url(self):
  *        if self._c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -214818,7 +214938,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10system_url___get__(struct __pyx_ob
  */
   }
 
-  /* "src/lxml/dtd.pxi":318
+  /* "src/lxml/dtd.pxi":323
  *        if self._c_dtd is NULL:
  *            return None
  *        return funicodeOrNone(self._c_dtd.SystemID)             # <<<<<<<<<<<<<<
@@ -214826,13 +214946,13 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10system_url___get__(struct __pyx_ob
  *     def iterelements(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_dtd->SystemID); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 318, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrNone(__pyx_v_self->_c_dtd->SystemID); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":315
+  /* "src/lxml/dtd.pxi":320
  * 
  *     @property
  *     def system_url(self):             # <<<<<<<<<<<<<<
@@ -214852,7 +214972,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10system_url___get__(struct __pyx_ob
 }
 static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/dtd.pxi":320
+/* "src/lxml/dtd.pxi":325
  *        return funicodeOrNone(self._c_dtd.SystemID)
  * 
  *     def iterelements(self):             # <<<<<<<<<<<<<<
@@ -214886,7 +215006,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_2iterelements(struct __pyx_obj_4lxml
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_15_iterelements *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(20, 320, __pyx_L1_error)
+    __PYX_ERR(20, 325, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -214894,7 +215014,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_2iterelements(struct __pyx_obj_4lxml
   __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_3DTD_4generator15, __pyx_codeobj__105, (PyObject *) __pyx_cur_scope, __pyx_n_s_iterelements, __pyx_n_s_DTD_iterelements, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(20, 320, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_3DTD_4generator15, __pyx_codeobj__105, (PyObject *) __pyx_cur_scope, __pyx_n_s_iterelements, __pyx_n_s_DTD_iterelements, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(20, 325, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -214930,9 +215050,9 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 320, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 325, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":321
+  /* "src/lxml/dtd.pxi":326
  * 
  *     def iterelements(self):
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL             # <<<<<<<<<<<<<<
@@ -214946,7 +215066,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
   }
   __pyx_cur_scope->__pyx_v_c_node = __pyx_t_1;
 
-  /* "src/lxml/dtd.pxi":322
+  /* "src/lxml/dtd.pxi":327
  *     def iterelements(self):
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -214957,7 +215077,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
     __pyx_t_2 = ((__pyx_cur_scope->__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "src/lxml/dtd.pxi":323
+    /* "src/lxml/dtd.pxi":328
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  *             if c_node.type == tree.XML_ELEMENT_DECL:             # <<<<<<<<<<<<<<
@@ -214967,21 +215087,21 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
     __pyx_t_2 = ((__pyx_cur_scope->__pyx_v_c_node->type == XML_ELEMENT_DECL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/dtd.pxi":324
+      /* "src/lxml/dtd.pxi":329
  *         while c_node is not NULL:
  *             if c_node.type == tree.XML_ELEMENT_DECL:
  *                 node = _DTDElementDecl()             # <<<<<<<<<<<<<<
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlElement*>c_node
  */
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__DTDElementDecl)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 324, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__DTDElementDecl)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 329, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_node));
       __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_node, ((struct __pyx_obj_4lxml_5etree__DTDElementDecl *)__pyx_t_3));
       __Pyx_GIVEREF(__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/dtd.pxi":325
+      /* "src/lxml/dtd.pxi":330
  *             if c_node.type == tree.XML_ELEMENT_DECL:
  *                 node = _DTDElementDecl()
  *                 node._dtd = self             # <<<<<<<<<<<<<<
@@ -214994,7 +215114,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
       __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_node->_dtd));
       __pyx_cur_scope->__pyx_v_node->_dtd = __pyx_cur_scope->__pyx_v_self;
 
-      /* "src/lxml/dtd.pxi":326
+      /* "src/lxml/dtd.pxi":331
  *                 node = _DTDElementDecl()
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlElement*>c_node             # <<<<<<<<<<<<<<
@@ -215003,7 +215123,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
  */
       __pyx_cur_scope->__pyx_v_node->_c_node = ((xmlElement *)__pyx_cur_scope->__pyx_v_c_node);
 
-      /* "src/lxml/dtd.pxi":327
+      /* "src/lxml/dtd.pxi":332
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlElement*>c_node
  *                 yield node             # <<<<<<<<<<<<<<
@@ -215019,9 +215139,9 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L7_resume_from_yield:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 327, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 332, __pyx_L1_error)
 
-      /* "src/lxml/dtd.pxi":323
+      /* "src/lxml/dtd.pxi":328
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  *             if c_node.type == tree.XML_ELEMENT_DECL:             # <<<<<<<<<<<<<<
@@ -215030,7 +215150,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
  */
     }
 
-    /* "src/lxml/dtd.pxi":328
+    /* "src/lxml/dtd.pxi":333
  *                 node._c_node = <tree.xmlElement*>c_node
  *                 yield node
  *             c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -215042,7 +215162,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/dtd.pxi":320
+  /* "src/lxml/dtd.pxi":325
  *        return funicodeOrNone(self._c_dtd.SystemID)
  * 
  *     def iterelements(self):             # <<<<<<<<<<<<<<
@@ -215067,7 +215187,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator15(__pyx_CoroutineObject *
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":330
+/* "src/lxml/dtd.pxi":335
  *             c_node = c_node.next
  * 
  *     def elements(self):             # <<<<<<<<<<<<<<
@@ -215100,7 +215220,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_5elements(struct __pyx_obj_4lxml_5et
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("elements", 0);
 
-  /* "src/lxml/dtd.pxi":331
+  /* "src/lxml/dtd.pxi":336
  * 
  *     def elements(self):
  *         return list(self.iterelements())             # <<<<<<<<<<<<<<
@@ -215108,7 +215228,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_5elements(struct __pyx_obj_4lxml_5et
  *     def iterentities(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterelements); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 331, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterelements); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 336, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -215122,17 +215242,17 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_5elements(struct __pyx_obj_4lxml_5et
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 331, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 336, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 331, __pyx_L1_error)
+  __pyx_t_2 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 336, __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;
 
-  /* "src/lxml/dtd.pxi":330
+  /* "src/lxml/dtd.pxi":335
  *             c_node = c_node.next
  * 
  *     def elements(self):             # <<<<<<<<<<<<<<
@@ -215154,7 +215274,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_5elements(struct __pyx_obj_4lxml_5et
 }
 static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 
-/* "src/lxml/dtd.pxi":333
+/* "src/lxml/dtd.pxi":338
  *         return list(self.iterelements())
  * 
  *     def iterentities(self):             # <<<<<<<<<<<<<<
@@ -215188,7 +215308,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_7iterentities(struct __pyx_obj_4lxml
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_16_iterentities *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(20, 333, __pyx_L1_error)
+    __PYX_ERR(20, 338, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
@@ -215196,7 +215316,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_7iterentities(struct __pyx_obj_4lxml
   __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
   {
-    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_3DTD_9generator16, __pyx_codeobj__106, (PyObject *) __pyx_cur_scope, __pyx_n_s_iterentities, __pyx_n_s_DTD_iterentities, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(20, 333, __pyx_L1_error)
+    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_4lxml_5etree_3DTD_9generator16, __pyx_codeobj__106, (PyObject *) __pyx_cur_scope, __pyx_n_s_iterentities, __pyx_n_s_DTD_iterentities, __pyx_n_s_lxml_etree); if (unlikely(!gen)) __PYX_ERR(20, 338, __pyx_L1_error)
     __Pyx_DECREF(__pyx_cur_scope);
     __Pyx_RefNannyFinishContext();
     return (PyObject *) gen;
@@ -215232,9 +215352,9 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
     return NULL;
   }
   __pyx_L3_first_run:;
-  if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 333, __pyx_L1_error)
+  if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 338, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":334
+  /* "src/lxml/dtd.pxi":339
  * 
  *     def iterentities(self):
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL             # <<<<<<<<<<<<<<
@@ -215248,7 +215368,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
   }
   __pyx_cur_scope->__pyx_v_c_node = __pyx_t_1;
 
-  /* "src/lxml/dtd.pxi":335
+  /* "src/lxml/dtd.pxi":340
  *     def iterentities(self):
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -215259,7 +215379,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
     __pyx_t_2 = ((__pyx_cur_scope->__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "src/lxml/dtd.pxi":336
+    /* "src/lxml/dtd.pxi":341
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  *             if c_node.type == tree.XML_ENTITY_DECL:             # <<<<<<<<<<<<<<
@@ -215269,21 +215389,21 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
     __pyx_t_2 = ((__pyx_cur_scope->__pyx_v_c_node->type == XML_ENTITY_DECL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/dtd.pxi":337
+      /* "src/lxml/dtd.pxi":342
  *         while c_node is not NULL:
  *             if c_node.type == tree.XML_ENTITY_DECL:
  *                 node = _DTDEntityDecl()             # <<<<<<<<<<<<<<
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlEntity*>c_node
  */
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__DTDEntityDecl)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 337, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__DTDEntityDecl)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 342, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_node));
       __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_node, ((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)__pyx_t_3));
       __Pyx_GIVEREF(__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/dtd.pxi":338
+      /* "src/lxml/dtd.pxi":343
  *             if c_node.type == tree.XML_ENTITY_DECL:
  *                 node = _DTDEntityDecl()
  *                 node._dtd = self             # <<<<<<<<<<<<<<
@@ -215296,7 +215416,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
       __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_node->_dtd));
       __pyx_cur_scope->__pyx_v_node->_dtd = __pyx_cur_scope->__pyx_v_self;
 
-      /* "src/lxml/dtd.pxi":339
+      /* "src/lxml/dtd.pxi":344
  *                 node = _DTDEntityDecl()
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlEntity*>c_node             # <<<<<<<<<<<<<<
@@ -215305,7 +215425,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
  */
       __pyx_cur_scope->__pyx_v_node->_c_node = ((xmlEntity *)__pyx_cur_scope->__pyx_v_c_node);
 
-      /* "src/lxml/dtd.pxi":340
+      /* "src/lxml/dtd.pxi":345
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlEntity*>c_node
  *                 yield node             # <<<<<<<<<<<<<<
@@ -215321,9 +215441,9 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
       __pyx_generator->resume_label = 1;
       return __pyx_r;
       __pyx_L7_resume_from_yield:;
-      if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 340, __pyx_L1_error)
+      if (unlikely(!__pyx_sent_value)) __PYX_ERR(20, 345, __pyx_L1_error)
 
-      /* "src/lxml/dtd.pxi":336
+      /* "src/lxml/dtd.pxi":341
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  *             if c_node.type == tree.XML_ENTITY_DECL:             # <<<<<<<<<<<<<<
@@ -215332,7 +215452,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
  */
     }
 
-    /* "src/lxml/dtd.pxi":341
+    /* "src/lxml/dtd.pxi":346
  *                 node._c_node = <tree.xmlEntity*>c_node
  *                 yield node
  *             c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -215344,7 +215464,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
   }
   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 
-  /* "src/lxml/dtd.pxi":333
+  /* "src/lxml/dtd.pxi":338
  *         return list(self.iterelements())
  * 
  *     def iterentities(self):             # <<<<<<<<<<<<<<
@@ -215369,7 +215489,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator16(__pyx_CoroutineObject *
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":343
+/* "src/lxml/dtd.pxi":348
  *             c_node = c_node.next
  * 
  *     def entities(self):             # <<<<<<<<<<<<<<
@@ -215402,7 +215522,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10entities(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("entities", 0);
 
-  /* "src/lxml/dtd.pxi":344
+  /* "src/lxml/dtd.pxi":349
  * 
  *     def entities(self):
  *         return list(self.iterentities())             # <<<<<<<<<<<<<<
@@ -215410,7 +215530,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10entities(struct __pyx_obj_4lxml_5e
  *     def __dealloc__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterentities); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 344, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterentities); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -215424,17 +215544,17 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10entities(struct __pyx_obj_4lxml_5e
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 344, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 344, __pyx_L1_error)
+  __pyx_t_2 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 349, __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;
 
-  /* "src/lxml/dtd.pxi":343
+  /* "src/lxml/dtd.pxi":348
  *             c_node = c_node.next
  * 
  *     def entities(self):             # <<<<<<<<<<<<<<
@@ -215455,7 +215575,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10entities(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":346
+/* "src/lxml/dtd.pxi":351
  *         return list(self.iterentities())
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -215478,7 +215598,7 @@ static void __pyx_pf_4lxml_5etree_3DTD_12__dealloc__(struct __pyx_obj_4lxml_5etr
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "src/lxml/dtd.pxi":347
+  /* "src/lxml/dtd.pxi":352
  * 
  *     def __dealloc__(self):
  *         tree.xmlFreeDtd(self._c_dtd)             # <<<<<<<<<<<<<<
@@ -215487,7 +215607,7 @@ static void __pyx_pf_4lxml_5etree_3DTD_12__dealloc__(struct __pyx_obj_4lxml_5etr
  */
   xmlFreeDtd(__pyx_v_self->_c_dtd);
 
-  /* "src/lxml/dtd.pxi":346
+  /* "src/lxml/dtd.pxi":351
  *         return list(self.iterentities())
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -215499,7 +215619,7 @@ static void __pyx_pf_4lxml_5etree_3DTD_12__dealloc__(struct __pyx_obj_4lxml_5etr
   __Pyx_RefNannyFinishContext();
 }
 
-/* "src/lxml/dtd.pxi":349
+/* "src/lxml/dtd.pxi":354
  *         tree.xmlFreeDtd(self._c_dtd)
  * 
  *     def __call__(self, etree):             # <<<<<<<<<<<<<<
@@ -215540,7 +215660,7 @@ static PyObject *__pyx_pw_4lxml_5etree_3DTD_15__call__(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, "__call__") < 0)) __PYX_ERR(20, 349, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(20, 354, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -215551,7 +215671,7 @@ static PyObject *__pyx_pw_4lxml_5etree_3DTD_15__call__(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 349, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 354, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.DTD.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -215593,7 +215713,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "src/lxml/dtd.pxi":360
+  /* "src/lxml/dtd.pxi":365
  *         cdef xmlDoc* c_doc
  *         cdef dtdvalid.xmlValidCtxt* valid_ctxt
  *         cdef int ret = -1             # <<<<<<<<<<<<<<
@@ -215602,7 +215722,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_ret = -1;
 
-  /* "src/lxml/dtd.pxi":362
+  /* "src/lxml/dtd.pxi":367
  *         cdef int ret = -1
  * 
  *         assert self._c_dtd is not NULL, "DTD not initialised"             # <<<<<<<<<<<<<<
@@ -215613,36 +215733,36 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->_c_dtd != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_DTD_not_initialised);
-      __PYX_ERR(20, 362, __pyx_L1_error)
+      __PYX_ERR(20, 367, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/dtd.pxi":363
+  /* "src/lxml/dtd.pxi":368
  * 
  *         assert self._c_dtd is not NULL, "DTD not initialised"
  *         doc = _documentOrRaise(etree)             # <<<<<<<<<<<<<<
  *         root_node = _rootNodeOrRaise(etree)
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_etree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 363, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_etree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 368, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/dtd.pxi":364
+  /* "src/lxml/dtd.pxi":369
  *         assert self._c_dtd is not NULL, "DTD not initialised"
  *         doc = _documentOrRaise(etree)
  *         root_node = _rootNodeOrRaise(etree)             # <<<<<<<<<<<<<<
  * 
  *         valid_ctxt = dtdvalid.xmlNewValidCtxt()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v_etree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 364, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v_etree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 369, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_root_node = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/dtd.pxi":366
+  /* "src/lxml/dtd.pxi":371
  *         root_node = _rootNodeOrRaise(etree)
  * 
  *         valid_ctxt = dtdvalid.xmlNewValidCtxt()             # <<<<<<<<<<<<<<
@@ -215651,7 +215771,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_valid_ctxt = xmlNewValidCtxt();
 
-  /* "src/lxml/dtd.pxi":367
+  /* "src/lxml/dtd.pxi":372
  * 
  *         valid_ctxt = dtdvalid.xmlNewValidCtxt()
  *         if valid_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -215661,20 +215781,20 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
   __pyx_t_2 = ((__pyx_v_valid_ctxt == NULL) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/dtd.pxi":368
+    /* "src/lxml/dtd.pxi":373
  *         valid_ctxt = dtdvalid.xmlNewValidCtxt()
  *         if valid_ctxt is NULL:
  *             raise DTDError(u"Failed to create validation context")             # <<<<<<<<<<<<<<
  * 
  *         # work around error reporting bug in libxml2 <= 2.9.1 (and later?)
  */
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDError), __pyx_tuple__107, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 368, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDError), __pyx_tuple__107, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 373, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(20, 368, __pyx_L1_error)
+    __PYX_ERR(20, 373, __pyx_L1_error)
 
-    /* "src/lxml/dtd.pxi":367
+    /* "src/lxml/dtd.pxi":372
  * 
  *         valid_ctxt = dtdvalid.xmlNewValidCtxt()
  *         if valid_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -215683,7 +215803,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/dtd.pxi":372
+  /* "src/lxml/dtd.pxi":377
  *         # work around error reporting bug in libxml2 <= 2.9.1 (and later?)
  *         # https://bugzilla.gnome.org/show_bug.cgi?id=724903
  *         valid_ctxt.error = <dtdvalid.xmlValidityErrorFunc>_nullGenericErrorFunc             # <<<<<<<<<<<<<<
@@ -215692,7 +215812,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_valid_ctxt->error = ((xmlValidityErrorFunc)__pyx_f_4lxml_5etree__nullGenericErrorFunc);
 
-  /* "src/lxml/dtd.pxi":373
+  /* "src/lxml/dtd.pxi":378
  *         # https://bugzilla.gnome.org/show_bug.cgi?id=724903
  *         valid_ctxt.error = <dtdvalid.xmlValidityErrorFunc>_nullGenericErrorFunc
  *         valid_ctxt.userData = NULL             # <<<<<<<<<<<<<<
@@ -215701,7 +215821,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_valid_ctxt->userData = NULL;
 
-  /* "src/lxml/dtd.pxi":375
+  /* "src/lxml/dtd.pxi":380
  *         valid_ctxt.userData = NULL
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -215710,7 +215830,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   /*try:*/ {
 
-    /* "src/lxml/dtd.pxi":376
+    /* "src/lxml/dtd.pxi":381
  * 
  *         try:
  *             with self._error_log:             # <<<<<<<<<<<<<<
@@ -215718,9 +215838,9 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  *                 ret = dtdvalid.xmlValidateDtd(valid_ctxt, c_doc, self._c_dtd)
  */
     /*with:*/ {
-      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->__pyx_base._error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 376, __pyx_L5_error)
+      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->__pyx_base._error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 381, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->__pyx_base._error_log); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(20, 376, __pyx_L7_error)
+      __pyx_t_4 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->__pyx_base._error_log); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(20, 381, __pyx_L7_error)
       /*try:*/ {
         {
           __Pyx_PyThreadState_declare
@@ -215731,17 +215851,17 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
           __Pyx_XGOTREF(__pyx_t_7);
           /*try:*/ {
 
-            /* "src/lxml/dtd.pxi":377
+            /* "src/lxml/dtd.pxi":382
  *         try:
  *             with self._error_log:
  *                 c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node)             # <<<<<<<<<<<<<<
  *                 ret = dtdvalid.xmlValidateDtd(valid_ctxt, c_doc, self._c_dtd)
  *                 _destroyFakeDoc(doc._c_doc, c_doc)
  */
-            __pyx_t_8 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_doc->_c_doc, __pyx_v_root_node->_c_node); if (unlikely(__pyx_t_8 == ((xmlDoc *)NULL))) __PYX_ERR(20, 377, __pyx_L11_error)
+            __pyx_t_8 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_doc->_c_doc, __pyx_v_root_node->_c_node); if (unlikely(__pyx_t_8 == ((xmlDoc *)NULL))) __PYX_ERR(20, 382, __pyx_L11_error)
             __pyx_v_c_doc = __pyx_t_8;
 
-            /* "src/lxml/dtd.pxi":378
+            /* "src/lxml/dtd.pxi":383
  *             with self._error_log:
  *                 c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node)
  *                 ret = dtdvalid.xmlValidateDtd(valid_ctxt, c_doc, self._c_dtd)             # <<<<<<<<<<<<<<
@@ -215750,7 +215870,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
             __pyx_v_ret = xmlValidateDtd(__pyx_v_valid_ctxt, __pyx_v_c_doc, __pyx_v_self->_c_dtd);
 
-            /* "src/lxml/dtd.pxi":379
+            /* "src/lxml/dtd.pxi":384
  *                 c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node)
  *                 ret = dtdvalid.xmlValidateDtd(valid_ctxt, c_doc, self._c_dtd)
  *                 _destroyFakeDoc(doc._c_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -215759,7 +215879,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
             __pyx_f_4lxml_5etree__destroyFakeDoc(__pyx_v_doc->_c_doc, __pyx_v_c_doc);
 
-            /* "src/lxml/dtd.pxi":376
+            /* "src/lxml/dtd.pxi":381
  * 
  *         try:
  *             with self._error_log:             # <<<<<<<<<<<<<<
@@ -215775,20 +215895,20 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
           __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
           /*except:*/ {
             __Pyx_AddTraceback("lxml.etree.DTD.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(20, 376, __pyx_L13_except_error)
+            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(20, 381, __pyx_L13_except_error)
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_GOTREF(__pyx_t_9);
             __Pyx_GOTREF(__pyx_t_10);
-            __pyx_t_11 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(20, 376, __pyx_L13_except_error)
+            __pyx_t_11 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(20, 381, __pyx_L13_except_error)
             __Pyx_GOTREF(__pyx_t_11);
             __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-            if (unlikely(!__pyx_t_12)) __PYX_ERR(20, 376, __pyx_L13_except_error)
+            if (unlikely(!__pyx_t_12)) __PYX_ERR(20, 381, __pyx_L13_except_error)
             __Pyx_GOTREF(__pyx_t_12);
             __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_12);
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-            if (__pyx_t_2 < 0) __PYX_ERR(20, 376, __pyx_L13_except_error)
+            if (__pyx_t_2 < 0) __PYX_ERR(20, 381, __pyx_L13_except_error)
             __pyx_t_13 = ((!(__pyx_t_2 != 0)) != 0);
             if (__pyx_t_13) {
               __Pyx_GIVEREF(__pyx_t_1);
@@ -215796,7 +215916,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
               __Pyx_XGIVEREF(__pyx_t_10);
               __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_9, __pyx_t_10);
               __pyx_t_1 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; 
-              __PYX_ERR(20, 376, __pyx_L13_except_error)
+              __PYX_ERR(20, 381, __pyx_L13_except_error)
             }
             __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -215822,7 +215942,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
           if (__pyx_t_3) {
             __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 376, __pyx_L5_error)
+            if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 381, __pyx_L5_error)
             __Pyx_GOTREF(__pyx_t_7);
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           }
@@ -215838,7 +215958,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
     }
   }
 
-  /* "src/lxml/dtd.pxi":381
+  /* "src/lxml/dtd.pxi":386
  *                 _destroyFakeDoc(doc._c_doc, c_doc)
  *         finally:
  *             dtdvalid.xmlFreeValidCtxt(valid_ctxt)             # <<<<<<<<<<<<<<
@@ -215888,7 +216008,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
     __pyx_L6:;
   }
 
-  /* "src/lxml/dtd.pxi":383
+  /* "src/lxml/dtd.pxi":388
  *             dtdvalid.xmlFreeValidCtxt(valid_ctxt)
  * 
  *         if ret == -1:             # <<<<<<<<<<<<<<
@@ -215898,14 +216018,14 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
   __pyx_t_13 = ((__pyx_v_ret == -1L) != 0);
   if (unlikely(__pyx_t_13)) {
 
-    /* "src/lxml/dtd.pxi":384
+    /* "src/lxml/dtd.pxi":389
  * 
  *         if ret == -1:
  *             raise DTDValidateError(u"Internal error in DTD validation",             # <<<<<<<<<<<<<<
  *                                    self._error_log)
  *         return ret == 1
  */
-    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 384, __pyx_L1_error)
+    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 389, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_INCREF(__pyx_kp_u_Internal_error_in_DTD_validation);
     __Pyx_GIVEREF(__pyx_kp_u_Internal_error_in_DTD_validation);
@@ -215913,14 +216033,14 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
     __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     PyTuple_SET_ITEM(__pyx_t_10, 1, ((PyObject *)__pyx_v_self->__pyx_base._error_log));
-    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDValidateError), __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 384, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDValidateError), __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 389, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_Raise(__pyx_t_9, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __PYX_ERR(20, 384, __pyx_L1_error)
+    __PYX_ERR(20, 389, __pyx_L1_error)
 
-    /* "src/lxml/dtd.pxi":383
+    /* "src/lxml/dtd.pxi":388
  *             dtdvalid.xmlFreeValidCtxt(valid_ctxt)
  * 
  *         if ret == -1:             # <<<<<<<<<<<<<<
@@ -215929,7 +216049,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/dtd.pxi":386
+  /* "src/lxml/dtd.pxi":391
  *             raise DTDValidateError(u"Internal error in DTD validation",
  *                                    self._error_log)
  *         return ret == 1             # <<<<<<<<<<<<<<
@@ -215937,13 +216057,13 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_9 = __Pyx_PyBool_FromLong((__pyx_v_ret == 1)); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 386, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyBool_FromLong((__pyx_v_ret == 1)); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 391, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __pyx_r = __pyx_t_9;
   __pyx_t_9 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":349
+  /* "src/lxml/dtd.pxi":354
  *         tree.xmlFreeDtd(self._c_dtd)
  * 
  *     def __call__(self, etree):             # <<<<<<<<<<<<<<
@@ -215967,7 +216087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":389
+/* "src/lxml/dtd.pxi":394
  * 
  * 
  * cdef tree.xmlDtd* _parseDtdFromFilelike(file) except NULL:             # <<<<<<<<<<<<<<
@@ -215995,7 +216115,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDtdFromFilelike", 0);
 
-  /* "src/lxml/dtd.pxi":393
+  /* "src/lxml/dtd.pxi":398
  *     cdef _FileReaderContext dtd_parser
  *     cdef _ErrorLog error_log
  *     cdef tree.xmlDtd* c_dtd = NULL             # <<<<<<<<<<<<<<
@@ -216004,26 +216124,26 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
  */
   __pyx_v_c_dtd = NULL;
 
-  /* "src/lxml/dtd.pxi":394
+  /* "src/lxml/dtd.pxi":399
  *     cdef _ErrorLog error_log
  *     cdef tree.xmlDtd* c_dtd = NULL
  *     exc_context = _ExceptionContext()             # <<<<<<<<<<<<<<
  *     dtd_parser = _FileReaderContext(file, exc_context, None)
  *     error_log = _ErrorLog()
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ExceptionContext)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 394, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ExceptionContext)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 399, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/dtd.pxi":395
+  /* "src/lxml/dtd.pxi":400
  *     cdef tree.xmlDtd* c_dtd = NULL
  *     exc_context = _ExceptionContext()
  *     dtd_parser = _FileReaderContext(file, exc_context, None)             # <<<<<<<<<<<<<<
  *     error_log = _ErrorLog()
  * 
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 395, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 400, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_file);
   __Pyx_GIVEREF(__pyx_v_file);
@@ -216034,25 +216154,25 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
   PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FileReaderContext), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 395, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FileReaderContext), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 400, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_dtd_parser = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/dtd.pxi":396
+  /* "src/lxml/dtd.pxi":401
  *     exc_context = _ExceptionContext()
  *     dtd_parser = _FileReaderContext(file, exc_context, None)
  *     error_log = _ErrorLog()             # <<<<<<<<<<<<<<
  * 
  *     with error_log:
  */
-  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 396, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 401, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/dtd.pxi":398
+  /* "src/lxml/dtd.pxi":403
  *     error_log = _ErrorLog()
  * 
  *     with error_log:             # <<<<<<<<<<<<<<
@@ -216060,15 +216180,15 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
  * 
  */
   /*with:*/ {
-    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 398, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 403, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_error_log); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(20, 398, __pyx_L3_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_error_log); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(20, 403, __pyx_L3_error)
     /*try:*/ {
       {
         (void)__pyx_t_5; (void)__pyx_t_6; (void)__pyx_t_7; /* mark used */
         /*try:*/ {
 
-          /* "src/lxml/dtd.pxi":399
+          /* "src/lxml/dtd.pxi":404
  * 
  *     with error_log:
  *         c_dtd = dtd_parser._readDtd()             # <<<<<<<<<<<<<<
@@ -216077,7 +216197,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
  */
           __pyx_v_c_dtd = __pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(__pyx_v_dtd_parser);
 
-          /* "src/lxml/dtd.pxi":398
+          /* "src/lxml/dtd.pxi":403
  *     error_log = _ErrorLog()
  * 
  *     with error_log:             # <<<<<<<<<<<<<<
@@ -216092,7 +216212,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
         if (__pyx_t_3) {
           __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 398, __pyx_L1_error)
+          if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 403, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
@@ -216107,16 +216227,16 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
     __pyx_L13:;
   }
 
-  /* "src/lxml/dtd.pxi":401
+  /* "src/lxml/dtd.pxi":406
  *         c_dtd = dtd_parser._readDtd()
  * 
  *     exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
  *     if c_dtd is NULL:
  *         raise DTDParseError(u"error parsing DTD", error_log)
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_exc_context); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(20, 401, __pyx_L1_error)
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_exc_context); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(20, 406, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":402
+  /* "src/lxml/dtd.pxi":407
  * 
  *     exc_context._raise_if_stored()
  *     if c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -216126,14 +216246,14 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
   __pyx_t_8 = ((__pyx_v_c_dtd == NULL) != 0);
   if (unlikely(__pyx_t_8)) {
 
-    /* "src/lxml/dtd.pxi":403
+    /* "src/lxml/dtd.pxi":408
  *     exc_context._raise_if_stored()
  *     if c_dtd is NULL:
  *         raise DTDParseError(u"error parsing DTD", error_log)             # <<<<<<<<<<<<<<
  *     return c_dtd
  * 
  */
-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 403, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 408, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_kp_u_error_parsing_DTD);
     __Pyx_GIVEREF(__pyx_kp_u_error_parsing_DTD);
@@ -216141,14 +216261,14 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
     __Pyx_INCREF(((PyObject *)__pyx_v_error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_error_log));
     PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_error_log));
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDParseError), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 403, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DTDParseError), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 408, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(20, 403, __pyx_L1_error)
+    __PYX_ERR(20, 408, __pyx_L1_error)
 
-    /* "src/lxml/dtd.pxi":402
+    /* "src/lxml/dtd.pxi":407
  * 
  *     exc_context._raise_if_stored()
  *     if c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -216157,7 +216277,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
  */
   }
 
-  /* "src/lxml/dtd.pxi":404
+  /* "src/lxml/dtd.pxi":409
  *     if c_dtd is NULL:
  *         raise DTDParseError(u"error parsing DTD", error_log)
  *     return c_dtd             # <<<<<<<<<<<<<<
@@ -216167,7 +216287,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
   __pyx_r = __pyx_v_c_dtd;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":389
+  /* "src/lxml/dtd.pxi":394
  * 
  * 
  * cdef tree.xmlDtd* _parseDtdFromFilelike(file) except NULL:             # <<<<<<<<<<<<<<
@@ -216189,7 +216309,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":406
+/* "src/lxml/dtd.pxi":411
  *     return c_dtd
  * 
  * cdef DTD _dtdFactory(tree.xmlDtd* c_dtd):             # <<<<<<<<<<<<<<
@@ -216211,7 +216331,7 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_dtdFactory", 0);
 
-  /* "src/lxml/dtd.pxi":409
+  /* "src/lxml/dtd.pxi":414
  *     # do not run through DTD.__init__()!
  *     cdef DTD dtd
  *     if c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -216221,7 +216341,7 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
   __pyx_t_1 = ((__pyx_v_c_dtd == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":410
+    /* "src/lxml/dtd.pxi":415
  *     cdef DTD dtd
  *     if c_dtd is NULL:
  *         return None             # <<<<<<<<<<<<<<
@@ -216232,7 +216352,7 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
     __pyx_r = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":409
+    /* "src/lxml/dtd.pxi":414
  *     # do not run through DTD.__init__()!
  *     cdef DTD dtd
  *     if c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -216241,36 +216361,36 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
  */
   }
 
-  /* "src/lxml/dtd.pxi":411
+  /* "src/lxml/dtd.pxi":416
  *     if c_dtd is NULL:
  *         return None
  *     dtd = DTD.__new__(DTD)             # <<<<<<<<<<<<<<
  *     dtd._c_dtd = _copyDtd(c_dtd)
  *     _Validator.__init__(dtd)
  */
-  __pyx_t_2 = ((PyObject *)__pyx_tp_new_4lxml_5etree_DTD(((PyTypeObject *)__pyx_ptype_4lxml_5etree_DTD), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 411, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_tp_new_4lxml_5etree_DTD(((PyTypeObject *)__pyx_ptype_4lxml_5etree_DTD), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 416, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __pyx_v_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/dtd.pxi":412
+  /* "src/lxml/dtd.pxi":417
  *         return None
  *     dtd = DTD.__new__(DTD)
  *     dtd._c_dtd = _copyDtd(c_dtd)             # <<<<<<<<<<<<<<
  *     _Validator.__init__(dtd)
  *     return dtd
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree__copyDtd(__pyx_v_c_dtd); if (unlikely(__pyx_t_3 == ((xmlDtd *)NULL))) __PYX_ERR(20, 412, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__copyDtd(__pyx_v_c_dtd); if (unlikely(__pyx_t_3 == ((xmlDtd *)NULL))) __PYX_ERR(20, 417, __pyx_L1_error)
   __pyx_v_dtd->_c_dtd = __pyx_t_3;
 
-  /* "src/lxml/dtd.pxi":413
+  /* "src/lxml/dtd.pxi":418
  *     dtd = DTD.__new__(DTD)
  *     dtd._c_dtd = _copyDtd(c_dtd)
  *     _Validator.__init__(dtd)             # <<<<<<<<<<<<<<
  *     return dtd
  * 
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__Validator), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 413, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__Validator), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 418, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -216284,12 +216404,12 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
   }
   __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, ((PyObject *)__pyx_v_dtd)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_dtd));
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 413, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 418, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/dtd.pxi":414
+  /* "src/lxml/dtd.pxi":419
  *     dtd._c_dtd = _copyDtd(c_dtd)
  *     _Validator.__init__(dtd)
  *     return dtd             # <<<<<<<<<<<<<<
@@ -216301,7 +216421,7 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
   __pyx_r = __pyx_v_dtd;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":406
+  /* "src/lxml/dtd.pxi":411
  *     return c_dtd
  * 
  * cdef DTD _dtdFactory(tree.xmlDtd* c_dtd):             # <<<<<<<<<<<<<<
@@ -216323,7 +216443,7 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":417
+/* "src/lxml/dtd.pxi":422
  * 
  * 
  * cdef tree.xmlDtd* _copyDtd(tree.xmlDtd* c_orig_dtd) except NULL:             # <<<<<<<<<<<<<<
@@ -216343,7 +216463,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyDtd", 0);
 
-  /* "src/lxml/dtd.pxi":422
+  /* "src/lxml/dtd.pxi":427
  *     links when copying DTDs, so we have to rebuild them here.
  *     """
  *     c_dtd = tree.xmlCopyDtd(c_orig_dtd)             # <<<<<<<<<<<<<<
@@ -216352,7 +216472,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
  */
   __pyx_v_c_dtd = xmlCopyDtd(__pyx_v_c_orig_dtd);
 
-  /* "src/lxml/dtd.pxi":423
+  /* "src/lxml/dtd.pxi":428
  *     """
  *     c_dtd = tree.xmlCopyDtd(c_orig_dtd)
  *     if not c_dtd:             # <<<<<<<<<<<<<<
@@ -216362,16 +216482,16 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
   __pyx_t_1 = ((!(__pyx_v_c_dtd != 0)) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/dtd.pxi":424
+    /* "src/lxml/dtd.pxi":429
  *     c_dtd = tree.xmlCopyDtd(c_orig_dtd)
  *     if not c_dtd:
  *         raise MemoryError             # <<<<<<<<<<<<<<
  *     cdef tree.xmlNode* c_node = c_dtd.children
  *     while c_node:
  */
-    PyErr_NoMemory(); __PYX_ERR(20, 424, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(20, 429, __pyx_L1_error)
 
-    /* "src/lxml/dtd.pxi":423
+    /* "src/lxml/dtd.pxi":428
  *     """
  *     c_dtd = tree.xmlCopyDtd(c_orig_dtd)
  *     if not c_dtd:             # <<<<<<<<<<<<<<
@@ -216380,7 +216500,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
  */
   }
 
-  /* "src/lxml/dtd.pxi":425
+  /* "src/lxml/dtd.pxi":430
  *     if not c_dtd:
  *         raise MemoryError
  *     cdef tree.xmlNode* c_node = c_dtd.children             # <<<<<<<<<<<<<<
@@ -216390,7 +216510,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
   __pyx_t_2 = __pyx_v_c_dtd->children;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "src/lxml/dtd.pxi":426
+  /* "src/lxml/dtd.pxi":431
  *         raise MemoryError
  *     cdef tree.xmlNode* c_node = c_dtd.children
  *     while c_node:             # <<<<<<<<<<<<<<
@@ -216401,7 +216521,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
     __pyx_t_1 = (__pyx_v_c_node != 0);
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/dtd.pxi":427
+    /* "src/lxml/dtd.pxi":432
  *     cdef tree.xmlNode* c_node = c_dtd.children
  *     while c_node:
  *         if c_node.type == tree.XML_ATTRIBUTE_DECL:             # <<<<<<<<<<<<<<
@@ -216411,7 +216531,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
     __pyx_t_1 = ((__pyx_v_c_node->type == XML_ATTRIBUTE_DECL) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/dtd.pxi":428
+      /* "src/lxml/dtd.pxi":433
  *     while c_node:
  *         if c_node.type == tree.XML_ATTRIBUTE_DECL:
  *             _linkDtdAttribute(c_dtd, <tree.xmlAttribute*>c_node)             # <<<<<<<<<<<<<<
@@ -216420,7 +216540,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
  */
       __pyx_f_4lxml_5etree__linkDtdAttribute(__pyx_v_c_dtd, ((xmlAttribute *)__pyx_v_c_node));
 
-      /* "src/lxml/dtd.pxi":427
+      /* "src/lxml/dtd.pxi":432
  *     cdef tree.xmlNode* c_node = c_dtd.children
  *     while c_node:
  *         if c_node.type == tree.XML_ATTRIBUTE_DECL:             # <<<<<<<<<<<<<<
@@ -216429,7 +216549,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
  */
     }
 
-    /* "src/lxml/dtd.pxi":429
+    /* "src/lxml/dtd.pxi":434
  *         if c_node.type == tree.XML_ATTRIBUTE_DECL:
  *             _linkDtdAttribute(c_dtd, <tree.xmlAttribute*>c_node)
  *         c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -216440,7 +216560,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
     __pyx_v_c_node = __pyx_t_2;
   }
 
-  /* "src/lxml/dtd.pxi":430
+  /* "src/lxml/dtd.pxi":435
  *             _linkDtdAttribute(c_dtd, <tree.xmlAttribute*>c_node)
  *         c_node = c_node.next
  *     return c_dtd             # <<<<<<<<<<<<<<
@@ -216450,7 +216570,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
   __pyx_r = __pyx_v_c_dtd;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":417
+  /* "src/lxml/dtd.pxi":422
  * 
  * 
  * cdef tree.xmlDtd* _copyDtd(tree.xmlDtd* c_orig_dtd) except NULL:             # <<<<<<<<<<<<<<
@@ -216467,7 +216587,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__copyDtd(xmlDtd *__pyx_v_c_orig_dtd) {
   return __pyx_r;
 }
 
-/* "src/lxml/dtd.pxi":433
+/* "src/lxml/dtd.pxi":438
  * 
  * 
  * cdef void _linkDtdAttribute(tree.xmlDtd* c_dtd, tree.xmlAttribute* c_attr):             # <<<<<<<<<<<<<<
@@ -216484,7 +216604,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_linkDtdAttribute", 0);
 
-  /* "src/lxml/dtd.pxi":438
+  /* "src/lxml/dtd.pxi":443
  *     element declaration.
  *     """
  *     c_elem = dtdvalid.xmlGetDtdElementDesc(c_dtd, c_attr.elem)             # <<<<<<<<<<<<<<
@@ -216493,7 +216613,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
   __pyx_v_c_elem = xmlGetDtdElementDesc(__pyx_v_c_dtd, __pyx_v_c_attr->elem);
 
-  /* "src/lxml/dtd.pxi":439
+  /* "src/lxml/dtd.pxi":444
  *     """
  *     c_elem = dtdvalid.xmlGetDtdElementDesc(c_dtd, c_attr.elem)
  *     if not c_elem:             # <<<<<<<<<<<<<<
@@ -216503,7 +216623,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __pyx_t_1 = ((!(__pyx_v_c_elem != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":441
+    /* "src/lxml/dtd.pxi":446
  *     if not c_elem:
  *         # no such element? something is wrong with the DTD ...
  *         return             # <<<<<<<<<<<<<<
@@ -216512,7 +216632,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":439
+    /* "src/lxml/dtd.pxi":444
  *     """
  *     c_elem = dtdvalid.xmlGetDtdElementDesc(c_dtd, c_attr.elem)
  *     if not c_elem:             # <<<<<<<<<<<<<<
@@ -216521,7 +216641,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
   }
 
-  /* "src/lxml/dtd.pxi":442
+  /* "src/lxml/dtd.pxi":447
  *         # no such element? something is wrong with the DTD ...
  *         return
  *     c_pos = c_elem.attributes             # <<<<<<<<<<<<<<
@@ -216531,7 +216651,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __pyx_t_2 = __pyx_v_c_elem->attributes;
   __pyx_v_c_pos = __pyx_t_2;
 
-  /* "src/lxml/dtd.pxi":443
+  /* "src/lxml/dtd.pxi":448
  *         return
  *     c_pos = c_elem.attributes
  *     if not c_pos:             # <<<<<<<<<<<<<<
@@ -216541,7 +216661,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __pyx_t_1 = ((!(__pyx_v_c_pos != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":444
+    /* "src/lxml/dtd.pxi":449
  *     c_pos = c_elem.attributes
  *     if not c_pos:
  *         c_elem.attributes = c_attr             # <<<<<<<<<<<<<<
@@ -216550,7 +216670,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
     __pyx_v_c_elem->attributes = __pyx_v_c_attr;
 
-    /* "src/lxml/dtd.pxi":445
+    /* "src/lxml/dtd.pxi":450
  *     if not c_pos:
  *         c_elem.attributes = c_attr
  *         c_attr.nexth = NULL             # <<<<<<<<<<<<<<
@@ -216559,7 +216679,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
     __pyx_v_c_attr->nexth = NULL;
 
-    /* "src/lxml/dtd.pxi":446
+    /* "src/lxml/dtd.pxi":451
  *         c_elem.attributes = c_attr
  *         c_attr.nexth = NULL
  *         return             # <<<<<<<<<<<<<<
@@ -216568,7 +216688,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":443
+    /* "src/lxml/dtd.pxi":448
  *         return
  *     c_pos = c_elem.attributes
  *     if not c_pos:             # <<<<<<<<<<<<<<
@@ -216577,7 +216697,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
   }
 
-  /* "src/lxml/dtd.pxi":449
+  /* "src/lxml/dtd.pxi":454
  *     # libxml2 keeps namespace declarations first, and we need to make
  *     # sure we don't re-insert attributes that are already there
  *     if _isDtdNsDecl(c_attr):             # <<<<<<<<<<<<<<
@@ -216587,7 +216707,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __pyx_t_1 = (__pyx_f_4lxml_5etree__isDtdNsDecl(__pyx_v_c_attr) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":450
+    /* "src/lxml/dtd.pxi":455
  *     # sure we don't re-insert attributes that are already there
  *     if _isDtdNsDecl(c_attr):
  *         if not _isDtdNsDecl(c_pos):             # <<<<<<<<<<<<<<
@@ -216597,7 +216717,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
     __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__isDtdNsDecl(__pyx_v_c_pos) != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/dtd.pxi":451
+      /* "src/lxml/dtd.pxi":456
  *     if _isDtdNsDecl(c_attr):
  *         if not _isDtdNsDecl(c_pos):
  *             c_elem.attributes = c_attr             # <<<<<<<<<<<<<<
@@ -216606,7 +216726,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
       __pyx_v_c_elem->attributes = __pyx_v_c_attr;
 
-      /* "src/lxml/dtd.pxi":452
+      /* "src/lxml/dtd.pxi":457
  *         if not _isDtdNsDecl(c_pos):
  *             c_elem.attributes = c_attr
  *             c_attr.nexth = c_pos             # <<<<<<<<<<<<<<
@@ -216615,7 +216735,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
       __pyx_v_c_attr->nexth = __pyx_v_c_pos;
 
-      /* "src/lxml/dtd.pxi":453
+      /* "src/lxml/dtd.pxi":458
  *             c_elem.attributes = c_attr
  *             c_attr.nexth = c_pos
  *             return             # <<<<<<<<<<<<<<
@@ -216624,7 +216744,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
       goto __pyx_L0;
 
-      /* "src/lxml/dtd.pxi":450
+      /* "src/lxml/dtd.pxi":455
  *     # sure we don't re-insert attributes that are already there
  *     if _isDtdNsDecl(c_attr):
  *         if not _isDtdNsDecl(c_pos):             # <<<<<<<<<<<<<<
@@ -216633,7 +216753,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
     }
 
-    /* "src/lxml/dtd.pxi":454
+    /* "src/lxml/dtd.pxi":459
  *             c_attr.nexth = c_pos
  *             return
  *         while c_pos != c_attr and c_pos.nexth and _isDtdNsDecl(c_pos.nexth):             # <<<<<<<<<<<<<<
@@ -216658,7 +216778,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
       __pyx_L9_bool_binop_done:;
       if (!__pyx_t_1) break;
 
-      /* "src/lxml/dtd.pxi":455
+      /* "src/lxml/dtd.pxi":460
  *             return
  *         while c_pos != c_attr and c_pos.nexth and _isDtdNsDecl(c_pos.nexth):
  *             c_pos = c_pos.nexth             # <<<<<<<<<<<<<<
@@ -216669,7 +216789,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
       __pyx_v_c_pos = __pyx_t_2;
     }
 
-    /* "src/lxml/dtd.pxi":449
+    /* "src/lxml/dtd.pxi":454
  *     # libxml2 keeps namespace declarations first, and we need to make
  *     # sure we don't re-insert attributes that are already there
  *     if _isDtdNsDecl(c_attr):             # <<<<<<<<<<<<<<
@@ -216679,7 +216799,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
     goto __pyx_L5;
   }
 
-  /* "src/lxml/dtd.pxi":458
+  /* "src/lxml/dtd.pxi":463
  *     else:
  *         # append at end
  *         while c_pos != c_attr and c_pos.nexth:             # <<<<<<<<<<<<<<
@@ -216699,7 +216819,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
       __pyx_L14_bool_binop_done:;
       if (!__pyx_t_1) break;
 
-      /* "src/lxml/dtd.pxi":459
+      /* "src/lxml/dtd.pxi":464
  *         # append at end
  *         while c_pos != c_attr and c_pos.nexth:
  *             c_pos = c_pos.nexth             # <<<<<<<<<<<<<<
@@ -216712,7 +216832,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   }
   __pyx_L5:;
 
-  /* "src/lxml/dtd.pxi":460
+  /* "src/lxml/dtd.pxi":465
  *         while c_pos != c_attr and c_pos.nexth:
  *             c_pos = c_pos.nexth
  *     if c_pos == c_attr:             # <<<<<<<<<<<<<<
@@ -216722,7 +216842,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __pyx_t_1 = ((__pyx_v_c_pos == __pyx_v_c_attr) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":461
+    /* "src/lxml/dtd.pxi":466
  *             c_pos = c_pos.nexth
  *     if c_pos == c_attr:
  *         return             # <<<<<<<<<<<<<<
@@ -216731,7 +216851,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":460
+    /* "src/lxml/dtd.pxi":465
  *         while c_pos != c_attr and c_pos.nexth:
  *             c_pos = c_pos.nexth
  *     if c_pos == c_attr:             # <<<<<<<<<<<<<<
@@ -216740,7 +216860,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
   }
 
-  /* "src/lxml/dtd.pxi":462
+  /* "src/lxml/dtd.pxi":467
  *     if c_pos == c_attr:
  *         return
  *     c_attr.nexth = c_pos.nexth             # <<<<<<<<<<<<<<
@@ -216750,7 +216870,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __pyx_t_2 = __pyx_v_c_pos->nexth;
   __pyx_v_c_attr->nexth = __pyx_t_2;
 
-  /* "src/lxml/dtd.pxi":463
+  /* "src/lxml/dtd.pxi":468
  *         return
  *     c_attr.nexth = c_pos.nexth
  *     c_pos.nexth = c_attr             # <<<<<<<<<<<<<<
@@ -216759,7 +216879,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
  */
   __pyx_v_c_pos->nexth = __pyx_v_c_attr;
 
-  /* "src/lxml/dtd.pxi":433
+  /* "src/lxml/dtd.pxi":438
  * 
  * 
  * cdef void _linkDtdAttribute(tree.xmlDtd* c_dtd, tree.xmlAttribute* c_attr):             # <<<<<<<<<<<<<<
@@ -216772,7 +216892,7 @@ static void __pyx_f_4lxml_5etree__linkDtdAttribute(xmlDtd *__pyx_v_c_dtd, xmlAtt
   __Pyx_RefNannyFinishContext();
 }
 
-/* "src/lxml/dtd.pxi":466
+/* "src/lxml/dtd.pxi":471
  * 
  * 
  * cdef bint _isDtdNsDecl(tree.xmlAttribute* c_attr):             # <<<<<<<<<<<<<<
@@ -216787,7 +216907,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("_isDtdNsDecl", 0);
 
-  /* "src/lxml/dtd.pxi":467
+  /* "src/lxml/dtd.pxi":472
  * 
  * cdef bint _isDtdNsDecl(tree.xmlAttribute* c_attr):
  *     if cstring_h.strcmp(<const_char*>c_attr.name, "xmlns") == 0:             # <<<<<<<<<<<<<<
@@ -216797,7 +216917,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
   __pyx_t_1 = ((strcmp(((const char *)__pyx_v_c_attr->name), ((char const *)"xmlns")) == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":468
+    /* "src/lxml/dtd.pxi":473
  * cdef bint _isDtdNsDecl(tree.xmlAttribute* c_attr):
  *     if cstring_h.strcmp(<const_char*>c_attr.name, "xmlns") == 0:
  *         return True             # <<<<<<<<<<<<<<
@@ -216807,7 +216927,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":467
+    /* "src/lxml/dtd.pxi":472
  * 
  * cdef bint _isDtdNsDecl(tree.xmlAttribute* c_attr):
  *     if cstring_h.strcmp(<const_char*>c_attr.name, "xmlns") == 0:             # <<<<<<<<<<<<<<
@@ -216816,7 +216936,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
  */
   }
 
-  /* "src/lxml/dtd.pxi":469
+  /* "src/lxml/dtd.pxi":474
  *     if cstring_h.strcmp(<const_char*>c_attr.name, "xmlns") == 0:
  *         return True
  *     if (c_attr.prefix is not NULL and             # <<<<<<<<<<<<<<
@@ -216830,7 +216950,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
     goto __pyx_L5_bool_binop_done;
   }
 
-  /* "src/lxml/dtd.pxi":470
+  /* "src/lxml/dtd.pxi":475
  *         return True
  *     if (c_attr.prefix is not NULL and
  *             cstring_h.strcmp(<const_char*>c_attr.prefix, "xmlns") == 0):             # <<<<<<<<<<<<<<
@@ -216841,7 +216961,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
   __pyx_t_1 = __pyx_t_2;
   __pyx_L5_bool_binop_done:;
 
-  /* "src/lxml/dtd.pxi":469
+  /* "src/lxml/dtd.pxi":474
  *     if cstring_h.strcmp(<const_char*>c_attr.name, "xmlns") == 0:
  *         return True
  *     if (c_attr.prefix is not NULL and             # <<<<<<<<<<<<<<
@@ -216850,7 +216970,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
  */
   if (__pyx_t_1) {
 
-    /* "src/lxml/dtd.pxi":471
+    /* "src/lxml/dtd.pxi":476
  *     if (c_attr.prefix is not NULL and
  *             cstring_h.strcmp(<const_char*>c_attr.prefix, "xmlns") == 0):
  *         return True             # <<<<<<<<<<<<<<
@@ -216859,7 +216979,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "src/lxml/dtd.pxi":469
+    /* "src/lxml/dtd.pxi":474
  *     if cstring_h.strcmp(<const_char*>c_attr.name, "xmlns") == 0:
  *         return True
  *     if (c_attr.prefix is not NULL and             # <<<<<<<<<<<<<<
@@ -216868,7 +216988,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
  */
   }
 
-  /* "src/lxml/dtd.pxi":472
+  /* "src/lxml/dtd.pxi":477
  *             cstring_h.strcmp(<const_char*>c_attr.prefix, "xmlns") == 0):
  *         return True
  *     return False             # <<<<<<<<<<<<<<
@@ -216876,7 +216996,7 @@ static int __pyx_f_4lxml_5etree__isDtdNsDecl(xmlAttribute *__pyx_v_c_attr) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/dtd.pxi":466
+  /* "src/lxml/dtd.pxi":471
  * 
  * 
  * cdef bint _isDtdNsDecl(tree.xmlAttribute* c_attr):             # <<<<<<<<<<<<<<
@@ -240982,6 +241102,10 @@ static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_content(PyObject *o
   return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_7content_1__get__(o);
 }
 
+static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_system_url(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_10system_url_1__get__(o);
+}
+
 static PyMethodDef __pyx_methods_4lxml_5etree__DTDEntityDecl[] = {
   {0, 0, 0, 0}
 };
@@ -240990,6 +241114,7 @@ static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDEntityDecl[] = {
   {(char *)"name", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_name, 0, (char *)0, 0},
   {(char *)"orig", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_orig, 0, (char *)0, 0},
   {(char *)"content", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_content, 0, (char *)0, 0},
+  {(char *)"system_url", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_system_url, 0, (char *)0, 0},
   {0, 0, 0, 0, 0}
 };
 
@@ -245918,7 +246043,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) __PYX_ERR(2, 652, __pyx_L1_error)
   __pyx_builtin_LookupError = __Pyx_GetBuiltinName(__pyx_n_s_LookupError); if (!__pyx_builtin_LookupError) __PYX_ERR(2, 837, __pyx_L1_error)
   __pyx_builtin_reversed = __Pyx_GetBuiltinName(__pyx_n_s_reversed); if (!__pyx_builtin_reversed) __PYX_ERR(3, 540, __pyx_L1_error)
-  __pyx_builtin_sorted = __Pyx_GetBuiltinName(__pyx_n_s_sorted); if (!__pyx_builtin_sorted) __PYX_ERR(9, 1156, __pyx_L1_error)
+  __pyx_builtin_sorted = __Pyx_GetBuiltinName(__pyx_n_s_sorted); if (!__pyx_builtin_sorted) __PYX_ERR(9, 1155, __pyx_L1_error)
   __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(10, 632, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
@@ -246262,105 +246387,105 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__59);
   __Pyx_GIVEREF(__pyx_tuple__59);
 
-  /* "src/lxml/serializer.pxi":910
+  /* "src/lxml/serializer.pxi":909
  *     """
  *     if xml_data is None and from_file is None:
  *         raise ValueError("Either 'xml_data' or 'from_file' must be provided as input")             # <<<<<<<<<<<<<<
  * 
  *     sio = None
  */
-  __pyx_tuple__63 = PyTuple_Pack(1, __pyx_kp_s_Either_xml_data_or_from_file_mus); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(9, 910, __pyx_L1_error)
+  __pyx_tuple__63 = PyTuple_Pack(1, __pyx_kp_s_Either_xml_data_or_from_file_mus); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(9, 909, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__63);
   __Pyx_GIVEREF(__pyx_tuple__63);
 
-  /* "src/lxml/serializer.pxi":941
+  /* "src/lxml/serializer.pxi":940
  * 
  * cdef _tree_to_target(element, target):
  *     for event, elem in iterwalk(element, events=('start', 'end', 'start-ns', 'comment', 'pi')):             # <<<<<<<<<<<<<<
  *         text = None
  *         if event == 'start':
  */
-  __pyx_tuple__64 = PyTuple_Pack(5, __pyx_n_s_start, __pyx_n_s_end, __pyx_kp_s_start_ns, __pyx_n_s_comment, __pyx_n_s_pi); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(9, 941, __pyx_L1_error)
+  __pyx_tuple__64 = PyTuple_Pack(5, __pyx_n_s_start, __pyx_n_s_end, __pyx_kp_s_start_ns, __pyx_n_s_comment, __pyx_n_s_pi); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(9, 940, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__64);
   __Pyx_GIVEREF(__pyx_tuple__64);
 
-  /* "src/lxml/serializer.pxi":1025
+  /* "src/lxml/serializer.pxi":1024
  *         # Stack with globally and newly declared namespaces as (uri, prefix) pairs.
  *         self._declared_ns_stack = [[
  *             ("http://www.w3.org/XML/1998/namespace", "xml"),             # <<<<<<<<<<<<<<
  *         ]]
  *         # Stack with user declared namespace prefixes as (uri, prefix) pairs.
  */
-  __pyx_tuple__65 = PyTuple_Pack(2, __pyx_kp_s_http_www_w3_org_XML_1998_namespa, __pyx_n_s_xml); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(9, 1025, __pyx_L1_error)
+  __pyx_tuple__65 = PyTuple_Pack(2, __pyx_kp_s_http_www_w3_org_XML_1998_namespa, __pyx_n_s_xml); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(9, 1024, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__65);
   __Pyx_GIVEREF(__pyx_tuple__65);
 
-  /* "src/lxml/serializer.pxi":1045
+  /* "src/lxml/serializer.pxi":1044
  * 
  *     cdef _resolve_prefix_name(self, prefixed_name):
  *         prefix, name = prefixed_name.split(':', 1)             # <<<<<<<<<<<<<<
  *         for uri, p in self._iter_namespaces(self._ns_stack):
  *             if p == prefix:
  */
-  __pyx_tuple__67 = PyTuple_Pack(2, __pyx_kp_s__17, __pyx_int_1); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(9, 1045, __pyx_L1_error)
+  __pyx_tuple__67 = PyTuple_Pack(2, __pyx_kp_s__17, __pyx_int_1); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(9, 1044, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__67);
   __Pyx_GIVEREF(__pyx_tuple__67);
 
-  /* "src/lxml/serializer.pxi":1053
+  /* "src/lxml/serializer.pxi":1052
  *     cdef _qname(self, qname, uri=None):
  *         if uri is None:
  *             uri, tag = qname[1:].rsplit('}', 1) if qname[:1] == '{' else ('', qname)             # <<<<<<<<<<<<<<
  *         else:
  *             tag = qname
  */
-  __pyx_slice__68 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__68)) __PYX_ERR(9, 1053, __pyx_L1_error)
+  __pyx_slice__68 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__68)) __PYX_ERR(9, 1052, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__68);
   __Pyx_GIVEREF(__pyx_slice__68);
-  __pyx_tuple__69 = PyTuple_Pack(2, __pyx_kp_s__32, __pyx_int_1); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(9, 1053, __pyx_L1_error)
+  __pyx_tuple__69 = PyTuple_Pack(2, __pyx_kp_s__32, __pyx_int_1); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(9, 1052, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__69);
   __Pyx_GIVEREF(__pyx_tuple__69);
 
-  /* "src/lxml/serializer.pxi":1361
+  /* "src/lxml/serializer.pxi":1360
  *         assert self.output_file is not None
  *         if isinstance(self.output_file, basestring):
  *             raise TypeError("Cannot asynchronously write to a plain file")             # <<<<<<<<<<<<<<
  *         if not hasattr(self.output_file, 'write'):
  *             raise TypeError("Output file needs an async .write() method")
  */
-  __pyx_tuple__79 = PyTuple_Pack(1, __pyx_kp_s_Cannot_asynchronously_write_to_a); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(9, 1361, __pyx_L1_error)
+  __pyx_tuple__79 = PyTuple_Pack(1, __pyx_kp_s_Cannot_asynchronously_write_to_a); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(9, 1360, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__79);
   __Pyx_GIVEREF(__pyx_tuple__79);
 
-  /* "src/lxml/serializer.pxi":1363
+  /* "src/lxml/serializer.pxi":1362
  *             raise TypeError("Cannot asynchronously write to a plain file")
  *         if not hasattr(self.output_file, 'write'):
  *             raise TypeError("Output file needs an async .write() method")             # <<<<<<<<<<<<<<
  *         self.async_writer = _AsyncIncrementalFileWriter(
  *             self.output_file, self.encoding, self.compresslevel,
  */
-  __pyx_tuple__80 = PyTuple_Pack(1, __pyx_kp_s_Output_file_needs_an_async_write); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(9, 1363, __pyx_L1_error)
+  __pyx_tuple__80 = PyTuple_Pack(1, __pyx_kp_s_Output_file_needs_an_async_write); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(9, 1362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__80);
   __Pyx_GIVEREF(__pyx_tuple__80);
 
-  /* "src/lxml/serializer.pxi":1564
+  /* "src/lxml/serializer.pxi":1563
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:             # <<<<<<<<<<<<<<
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  * 
  */
-  __pyx_slice__82 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__82)) __PYX_ERR(9, 1564, __pyx_L1_error)
+  __pyx_slice__82 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__82)) __PYX_ERR(9, 1563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__82);
   __Pyx_GIVEREF(__pyx_slice__82);
 
-  /* "src/lxml/serializer.pxi":1572
+  /* "src/lxml/serializer.pxi":1571
  *         ok_to_write = self._c_out.error == xmlerror.XML_ERR_OK
  * 
  *         name, prefix = self._element_stack.pop()[1:3]             # <<<<<<<<<<<<<<
  *         if ok_to_write:
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  */
-  __pyx_slice__83 = PySlice_New(__pyx_int_1, __pyx_int_3, Py_None); if (unlikely(!__pyx_slice__83)) __PYX_ERR(9, 1572, __pyx_L1_error)
+  __pyx_slice__83 = PySlice_New(__pyx_int_1, __pyx_int_3, Py_None); if (unlikely(!__pyx_slice__83)) __PYX_ERR(9, 1571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__83);
   __Pyx_GIVEREF(__pyx_slice__83);
 
@@ -246452,14 +246577,14 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__102);
   __Pyx_GIVEREF(__pyx_tuple__102);
 
-  /* "src/lxml/dtd.pxi":368
+  /* "src/lxml/dtd.pxi":373
  *         valid_ctxt = dtdvalid.xmlNewValidCtxt()
  *         if valid_ctxt is NULL:
  *             raise DTDError(u"Failed to create validation context")             # <<<<<<<<<<<<<<
  * 
  *         # work around error reporting bug in libxml2 <= 2.9.1 (and later?)
  */
-  __pyx_tuple__107 = PyTuple_Pack(1, __pyx_kp_u_Failed_to_create_validation_cont); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(20, 368, __pyx_L1_error)
+  __pyx_tuple__107 = PyTuple_Pack(1, __pyx_kp_u_Failed_to_create_validation_cont); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(20, 373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__107);
   __Pyx_GIVEREF(__pyx_tuple__107);
 
@@ -248772,466 +248897,466 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__489);
   __pyx_codeobj__490 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__489, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parsertarget_pxi, __pyx_n_s_init, 14, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__490)) __PYX_ERR(13, 14, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":622
+  /* "src/lxml/serializer.pxi":621
  * cdef object getwriter
  * from codecs import getwriter
  * cdef object utf8_writer = getwriter('utf8')             # <<<<<<<<<<<<<<
  * 
  * cdef object contextmanager
  */
-  __pyx_tuple__491 = PyTuple_Pack(1, __pyx_n_s_utf8); if (unlikely(!__pyx_tuple__491)) __PYX_ERR(9, 622, __pyx_L1_error)
+  __pyx_tuple__491 = PyTuple_Pack(1, __pyx_n_s_utf8); if (unlikely(!__pyx_tuple__491)) __PYX_ERR(9, 621, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__491);
   __Pyx_GIVEREF(__pyx_tuple__491);
 
-  /* "src/lxml/serializer.pxi":630
+  /* "src/lxml/serializer.pxi":629
  * 
  * @contextmanager
  * def _open_utf8_file(file, compression=0):             # <<<<<<<<<<<<<<
  *     if _isString(file):
  *         if compression:
  */
-  __pyx_tuple__492 = PyTuple_Pack(4, __pyx_n_s_file, __pyx_n_s_compression, __pyx_n_s_zf, __pyx_n_s_f); if (unlikely(!__pyx_tuple__492)) __PYX_ERR(9, 630, __pyx_L1_error)
+  __pyx_tuple__492 = PyTuple_Pack(4, __pyx_n_s_file, __pyx_n_s_compression, __pyx_n_s_zf, __pyx_n_s_f); if (unlikely(!__pyx_tuple__492)) __PYX_ERR(9, 629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__492);
   __Pyx_GIVEREF(__pyx_tuple__492);
-  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__492, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_open_utf8_file, 630, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(9, 630, __pyx_L1_error)
-  __pyx_tuple__493 = PyTuple_Pack(1, ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_tuple__493)) __PYX_ERR(9, 630, __pyx_L1_error)
+  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__492, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_open_utf8_file, 629, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(9, 629, __pyx_L1_error)
+  __pyx_tuple__493 = PyTuple_Pack(1, ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_tuple__493)) __PYX_ERR(9, 629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__493);
   __Pyx_GIVEREF(__pyx_tuple__493);
 
-  /* "src/lxml/serializer.pxi":896
+  /* "src/lxml/serializer.pxi":895
  * # C14N 2.0
  * 
  * def canonicalize(xml_data=None, *, out=None, from_file=None, **options):             # <<<<<<<<<<<<<<
  *     """Convert XML to its C14N 2.0 serialised form.
  * 
  */
-  __pyx_tuple__494 = PyTuple_Pack(7, __pyx_n_s_xml_data, __pyx_n_s_out, __pyx_n_s_from_file, __pyx_n_s_options, __pyx_n_s_sio, __pyx_n_s_target, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__494)) __PYX_ERR(9, 896, __pyx_L1_error)
+  __pyx_tuple__494 = PyTuple_Pack(7, __pyx_n_s_xml_data, __pyx_n_s_out, __pyx_n_s_from_file, __pyx_n_s_options, __pyx_n_s_sio, __pyx_n_s_target, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__494)) __PYX_ERR(9, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__494);
   __Pyx_GIVEREF(__pyx_tuple__494);
-  __pyx_codeobj__495 = (PyObject*)__Pyx_PyCode_New(1, 2, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__494, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_canonicalize, 896, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__495)) __PYX_ERR(9, 896, __pyx_L1_error)
-  __pyx_tuple__496 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__496)) __PYX_ERR(9, 896, __pyx_L1_error)
+  __pyx_codeobj__495 = (PyObject*)__Pyx_PyCode_New(1, 2, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__494, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_canonicalize, 895, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__495)) __PYX_ERR(9, 895, __pyx_L1_error)
+  __pyx_tuple__496 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__496)) __PYX_ERR(9, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__496);
   __Pyx_GIVEREF(__pyx_tuple__496);
 
-  /* "src/lxml/serializer.pxi":1039
+  /* "src/lxml/serializer.pxi":1038
  *         self._root_done = False
  * 
  *     def _iter_namespaces(self, ns_stack):             # <<<<<<<<<<<<<<
  *         for namespaces in reversed(ns_stack):
  *             if namespaces:  # almost no element declares new namespaces
  */
-  __pyx_tuple__497 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ns_stack, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__497)) __PYX_ERR(9, 1039, __pyx_L1_error)
+  __pyx_tuple__497 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ns_stack, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__497)) __PYX_ERR(9, 1038, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__497);
   __Pyx_GIVEREF(__pyx_tuple__497);
-  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__497, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_iter_namespaces, 1039, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(9, 1039, __pyx_L1_error)
+  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__497, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_iter_namespaces, 1038, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(9, 1038, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1088
+  /* "src/lxml/serializer.pxi":1087
  *         raise ValueError(f'Namespace "{uri}" of name "{tag}" is not declared in scope')
  * 
  *     def data(self, data):             # <<<<<<<<<<<<<<
  *         if not self._ignored_depth:
  *             self._data.append(data)
  */
-  __pyx_tuple__498 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__498)) __PYX_ERR(9, 1088, __pyx_L1_error)
+  __pyx_tuple__498 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__498)) __PYX_ERR(9, 1087, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__498);
   __Pyx_GIVEREF(__pyx_tuple__498);
-  __pyx_codeobj__499 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__498, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_data, 1088, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__499)) __PYX_ERR(9, 1088, __pyx_L1_error)
+  __pyx_codeobj__499 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__498, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_data, 1087, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__499)) __PYX_ERR(9, 1087, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1106
+  /* "src/lxml/serializer.pxi":1105
  *             self._write(_escape_cdata_c14n(data))
  * 
  *     def start_ns(self, prefix, uri):             # <<<<<<<<<<<<<<
  *         if self._ignored_depth:
  *             return
  */
-  __pyx_tuple__500 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_prefix, __pyx_n_s_uri); if (unlikely(!__pyx_tuple__500)) __PYX_ERR(9, 1106, __pyx_L1_error)
+  __pyx_tuple__500 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_prefix, __pyx_n_s_uri); if (unlikely(!__pyx_tuple__500)) __PYX_ERR(9, 1105, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__500);
   __Pyx_GIVEREF(__pyx_tuple__500);
-  __pyx_codeobj__501 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__500, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_start_ns_2, 1106, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__501)) __PYX_ERR(9, 1106, __pyx_L1_error)
+  __pyx_codeobj__501 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__500, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_start_ns_2, 1105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__501)) __PYX_ERR(9, 1105, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1114
+  /* "src/lxml/serializer.pxi":1113
  *         self._ns_stack[-1].append((uri, prefix))
  * 
  *     def start(self, tag, attrs):             # <<<<<<<<<<<<<<
  *         if self._exclude_tags is not None and (
  *                 self._ignored_depth or tag in self._exclude_tags):
  */
-  __pyx_tuple__502 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_attrs, __pyx_n_s_new_namespaces); if (unlikely(!__pyx_tuple__502)) __PYX_ERR(9, 1114, __pyx_L1_error)
+  __pyx_tuple__502 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_attrs, __pyx_n_s_new_namespaces); if (unlikely(!__pyx_tuple__502)) __PYX_ERR(9, 1113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__502);
   __Pyx_GIVEREF(__pyx_tuple__502);
-  __pyx_codeobj__503 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__502, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_start, 1114, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__503)) __PYX_ERR(9, 1114, __pyx_L1_error)
+  __pyx_codeobj__503 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__502, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_start, 1113, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__503)) __PYX_ERR(9, 1113, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1199
+  /* "src/lxml/serializer.pxi":1198
  *         self._ns_stack.append([])
  * 
  *     def end(self, tag):             # <<<<<<<<<<<<<<
  *         if self._ignored_depth:
  *             self._ignored_depth -= 1
  */
-  __pyx_tuple__504 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_tag); if (unlikely(!__pyx_tuple__504)) __PYX_ERR(9, 1199, __pyx_L1_error)
+  __pyx_tuple__504 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_tag); if (unlikely(!__pyx_tuple__504)) __PYX_ERR(9, 1198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__504);
   __Pyx_GIVEREF(__pyx_tuple__504);
-  __pyx_codeobj__505 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__504, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_end, 1199, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__505)) __PYX_ERR(9, 1199, __pyx_L1_error)
+  __pyx_codeobj__505 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__504, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_end, 1198, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__505)) __PYX_ERR(9, 1198, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1211
+  /* "src/lxml/serializer.pxi":1210
  *         self._ns_stack.pop()
  * 
  *     def comment(self, text):             # <<<<<<<<<<<<<<
  *         if not self._with_comments:
  *             return
  */
-  __pyx_tuple__506 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_text); if (unlikely(!__pyx_tuple__506)) __PYX_ERR(9, 1211, __pyx_L1_error)
+  __pyx_tuple__506 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_text); if (unlikely(!__pyx_tuple__506)) __PYX_ERR(9, 1210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__506);
   __Pyx_GIVEREF(__pyx_tuple__506);
-  __pyx_codeobj__507 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__506, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_comment, 1211, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__507)) __PYX_ERR(9, 1211, __pyx_L1_error)
+  __pyx_codeobj__507 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__506, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_comment, 1210, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__507)) __PYX_ERR(9, 1210, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1224
+  /* "src/lxml/serializer.pxi":1223
  *             self._write(u'\n')
  * 
  *     def pi(self, target, data):             # <<<<<<<<<<<<<<
  *         if self._ignored_depth:
  *             return
  */
-  __pyx_tuple__508 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_target, __pyx_n_s_data); if (unlikely(!__pyx_tuple__508)) __PYX_ERR(9, 1224, __pyx_L1_error)
+  __pyx_tuple__508 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_target, __pyx_n_s_data); if (unlikely(!__pyx_tuple__508)) __PYX_ERR(9, 1223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__508);
   __Pyx_GIVEREF(__pyx_tuple__508);
-  __pyx_codeobj__509 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__508, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_pi, 1224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__509)) __PYX_ERR(9, 1224, __pyx_L1_error)
+  __pyx_codeobj__509 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__508, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_pi, 1223, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__509)) __PYX_ERR(9, 1223, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1236
+  /* "src/lxml/serializer.pxi":1235
  *             self._write(u'\n')
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
  *         return None
  * 
  */
-  __pyx_tuple__510 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__510)) __PYX_ERR(9, 1236, __pyx_L1_error)
+  __pyx_tuple__510 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__510)) __PYX_ERR(9, 1235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__510);
   __Pyx_GIVEREF(__pyx_tuple__510);
-  __pyx_codeobj__511 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_close, 1236, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__511)) __PYX_ERR(9, 1236, __pyx_L1_error)
+  __pyx_codeobj__511 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_close, 1235, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__511)) __PYX_ERR(9, 1235, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1343
+  /* "src/lxml/serializer.pxi":1342
  *         self.method = OUTPUT_METHOD_XML
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
  *         assert self.output_file is not None
  *         self.writer = _IncrementalFileWriter(
  */
-  __pyx_tuple__512 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__512)) __PYX_ERR(9, 1343, __pyx_L1_error)
+  __pyx_tuple__512 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__512)) __PYX_ERR(9, 1342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__512);
   __Pyx_GIVEREF(__pyx_tuple__512);
-  __pyx_codeobj__513 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__512, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_enter, 1343, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__513)) __PYX_ERR(9, 1343, __pyx_L1_error)
+  __pyx_codeobj__513 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__512, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_enter, 1342, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__513)) __PYX_ERR(9, 1342, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1350
+  /* "src/lxml/serializer.pxi":1349
  *         return self.writer
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         if self.writer is not None:
  *             old_writer, self.writer = self.writer, None
  */
-  __pyx_tuple__514 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb, __pyx_n_s_old_writer, __pyx_n_s_raise_on_error); if (unlikely(!__pyx_tuple__514)) __PYX_ERR(9, 1350, __pyx_L1_error)
+  __pyx_tuple__514 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb, __pyx_n_s_old_writer, __pyx_n_s_raise_on_error); if (unlikely(!__pyx_tuple__514)) __PYX_ERR(9, 1349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__514);
   __Pyx_GIVEREF(__pyx_tuple__514);
-  __pyx_codeobj__515 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__514, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_exit, 1350, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__515)) __PYX_ERR(9, 1350, __pyx_L1_error)
+  __pyx_codeobj__515 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__514, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_exit, 1349, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__515)) __PYX_ERR(9, 1349, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1358
+  /* "src/lxml/serializer.pxi":1357
  *                 self.output_file = None
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
  *         assert self.output_file is not None
  *         if isinstance(self.output_file, basestring):
  */
-  __pyx_tuple__516 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__516)) __PYX_ERR(9, 1358, __pyx_L1_error)
+  __pyx_tuple__516 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__516)) __PYX_ERR(9, 1357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__516);
   __Pyx_GIVEREF(__pyx_tuple__516);
-  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__516, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aenter, 1358, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(9, 1358, __pyx_L1_error)
+  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__516, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aenter, 1357, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(9, 1357, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1369
+  /* "src/lxml/serializer.pxi":1368
  *         return self.async_writer
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         if self.async_writer is not None:
  *             old_writer, self.async_writer = self.async_writer, None
  */
-  __pyx_tuple__517 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb, __pyx_n_s_old_writer, __pyx_n_s_raise_on_error); if (unlikely(!__pyx_tuple__517)) __PYX_ERR(9, 1369, __pyx_L1_error)
+  __pyx_tuple__517 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb, __pyx_n_s_old_writer, __pyx_n_s_raise_on_error); if (unlikely(!__pyx_tuple__517)) __PYX_ERR(9, 1368, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__517);
   __Pyx_GIVEREF(__pyx_tuple__517);
-  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__517, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aexit, 1369, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(9, 1369, __pyx_L1_error)
+  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__517, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aexit, 1368, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(9, 1368, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1426
+  /* "src/lxml/serializer.pxi":1425
  *             tree.xmlOutputBufferClose(self._c_out)
  * 
  *     def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
  *         """write_declaration(self, version=None, standalone=None, doctype=None)
  * 
  */
-  __pyx_tuple__518 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_version, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_c_version, __pyx_n_s_c_standalone); if (unlikely(!__pyx_tuple__518)) __PYX_ERR(9, 1426, __pyx_L1_error)
+  __pyx_tuple__518 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_version, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_c_version, __pyx_n_s_c_standalone); if (unlikely(!__pyx_tuple__518)) __PYX_ERR(9, 1425, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__518);
   __Pyx_GIVEREF(__pyx_tuple__518);
-  __pyx_codeobj__519 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__518, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_declaration, 1426, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__519)) __PYX_ERR(9, 1426, __pyx_L1_error)
+  __pyx_codeobj__519 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__518, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_declaration, 1425, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__519)) __PYX_ERR(9, 1425, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1455
+  /* "src/lxml/serializer.pxi":1454
  *         self._handle_error(self._c_out.error)
  * 
  *     def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
  *         """write_doctype(self, doctype)
  * 
  */
-  __pyx_tuple__520 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_doctype); if (unlikely(!__pyx_tuple__520)) __PYX_ERR(9, 1455, __pyx_L1_error)
+  __pyx_tuple__520 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_doctype); if (unlikely(!__pyx_tuple__520)) __PYX_ERR(9, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__520);
   __Pyx_GIVEREF(__pyx_tuple__520);
-  __pyx_codeobj__521 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__520, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_doctype, 1455, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__521)) __PYX_ERR(9, 1455, __pyx_L1_error)
+  __pyx_codeobj__521 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__520, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_doctype, 1454, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__521)) __PYX_ERR(9, 1454, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1472
+  /* "src/lxml/serializer.pxi":1471
  *         self._handle_error(self._c_out.error)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
  *         """method(self, method)
  * 
  */
-  __pyx_tuple__522 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_method, __pyx_n_s_c_method); if (unlikely(!__pyx_tuple__522)) __PYX_ERR(9, 1472, __pyx_L1_error)
+  __pyx_tuple__522 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_method, __pyx_n_s_c_method); if (unlikely(!__pyx_tuple__522)) __PYX_ERR(9, 1471, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__522);
   __Pyx_GIVEREF(__pyx_tuple__522);
-  __pyx_codeobj__523 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__522, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_method, 1472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__523)) __PYX_ERR(9, 1472, __pyx_L1_error)
+  __pyx_codeobj__523 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__522, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_method, 1471, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__523)) __PYX_ERR(9, 1471, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1482
+  /* "src/lxml/serializer.pxi":1481
  *         return _MethodChanger(self, c_method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
  *         """element(self, tag, attrib=None, nsmap=None, method, **_extra)
  * 
  */
-  __pyx_tuple__524 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_method, __pyx_n_s_extra, __pyx_n_s_attributes, __pyx_n_s_name_2, __pyx_n_s_value, __pyx_n_s_ns, __pyx_n_s_reversed_nsmap, __pyx_n_s_prefix, __pyx_n_s_c_method); if (unlikely(!__pyx_tuple__524)) __PYX_ERR(9, 1482, __pyx_L1_error)
+  __pyx_tuple__524 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_method, __pyx_n_s_extra, __pyx_n_s_attributes, __pyx_n_s_name_2, __pyx_n_s_value, __pyx_n_s_ns, __pyx_n_s_reversed_nsmap, __pyx_n_s_prefix, __pyx_n_s_c_method); if (unlikely(!__pyx_tuple__524)) __PYX_ERR(9, 1481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__524);
   __Pyx_GIVEREF(__pyx_tuple__524);
-  __pyx_codeobj__525 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__524, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_element, 1482, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__525)) __PYX_ERR(9, 1482, __pyx_L1_error)
+  __pyx_codeobj__525 = (PyObject*)__Pyx_PyCode_New(5, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__524, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_element, 1481, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__525)) __PYX_ERR(9, 1481, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1619
+  /* "src/lxml/serializer.pxi":1618
  *         return flat_namespaces_map, new_namespaces
  * 
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False, method=None):             # <<<<<<<<<<<<<<
  *         """write(self, *args, with_tail=True, pretty_print=False, method=None)
  * 
  */
-  __pyx_tuple__526 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_with_tail, __pyx_n_s_pretty_print, __pyx_n_s_method, __pyx_n_s_args, __pyx_n_s_c_method, __pyx_n_s_content, __pyx_n_s_bstring, __pyx_n_s_ns, __pyx_n_s_name_2, __pyx_n_s__55); if (unlikely(!__pyx_tuple__526)) __PYX_ERR(9, 1619, __pyx_L1_error)
+  __pyx_tuple__526 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_with_tail, __pyx_n_s_pretty_print, __pyx_n_s_method, __pyx_n_s_args, __pyx_n_s_c_method, __pyx_n_s_content, __pyx_n_s_bstring, __pyx_n_s_ns, __pyx_n_s_name_2, __pyx_n_s__55); if (unlikely(!__pyx_tuple__526)) __PYX_ERR(9, 1618, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__526);
   __Pyx_GIVEREF(__pyx_tuple__526);
-  __pyx_codeobj__527 = (PyObject*)__Pyx_PyCode_New(1, 3, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__526, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write, 1619, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__527)) __PYX_ERR(9, 1619, __pyx_L1_error)
+  __pyx_codeobj__527 = (PyObject*)__Pyx_PyCode_New(1, 3, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__526, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write, 1618, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__527)) __PYX_ERR(9, 1618, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1666
+  /* "src/lxml/serializer.pxi":1665
  *             self._handle_error(self._c_out.error)
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
  *         """flush(self)
  * 
  */
-  __pyx_tuple__528 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__528)) __PYX_ERR(9, 1666, __pyx_L1_error)
+  __pyx_tuple__528 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__528)) __PYX_ERR(9, 1665, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__528);
   __Pyx_GIVEREF(__pyx_tuple__528);
-  __pyx_codeobj__529 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__528, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_flush, 1666, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__529)) __PYX_ERR(9, 1666, __pyx_L1_error)
+  __pyx_codeobj__529 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__528, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_flush, 1665, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__529)) __PYX_ERR(9, 1665, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1713
+  /* "src/lxml/serializer.pxi":1712
  *         return data
  * 
  *     def write(self, data):             # <<<<<<<<<<<<<<
  *         self._data.append(data)
  * 
  */
-  __pyx_tuple__530 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__530)) __PYX_ERR(9, 1713, __pyx_L1_error)
+  __pyx_tuple__530 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__530)) __PYX_ERR(9, 1712, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__530);
   __Pyx_GIVEREF(__pyx_tuple__530);
-  __pyx_codeobj__531 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__530, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write, 1713, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__531)) __PYX_ERR(9, 1713, __pyx_L1_error)
+  __pyx_codeobj__531 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__530, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write, 1712, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__531)) __PYX_ERR(9, 1712, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1716
+  /* "src/lxml/serializer.pxi":1715
  *         self._data.append(data)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
  *         pass
  * 
  */
-  __pyx_tuple__532 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__532)) __PYX_ERR(9, 1716, __pyx_L1_error)
+  __pyx_tuple__532 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__532)) __PYX_ERR(9, 1715, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__532);
   __Pyx_GIVEREF(__pyx_tuple__532);
-  __pyx_codeobj__533 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__532, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_close, 1716, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__533)) __PYX_ERR(9, 1716, __pyx_L1_error)
+  __pyx_codeobj__533 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__532, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_close, 1715, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__533)) __PYX_ERR(9, 1715, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1745
+  /* "src/lxml/serializer.pxi":1744
  *         return None
  * 
  *     async def flush(self):             # <<<<<<<<<<<<<<
  *         self._writer.flush()
  *         data = self._buffer.collect()
  */
-  __pyx_tuple__534 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__534)) __PYX_ERR(9, 1745, __pyx_L1_error)
+  __pyx_tuple__534 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__534)) __PYX_ERR(9, 1744, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__534);
   __Pyx_GIVEREF(__pyx_tuple__534);
-  __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__534, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_flush, 1745, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) __PYX_ERR(9, 1745, __pyx_L1_error)
+  __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__534, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_flush, 1744, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) __PYX_ERR(9, 1744, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1751
+  /* "src/lxml/serializer.pxi":1750
  *             await self._async_outfile.write(data)
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
  *         self._writer.write_declaration(version, standalone, doctype)
  *         data = self._flush()
  */
-  __pyx_tuple__535 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_version, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_data); if (unlikely(!__pyx_tuple__535)) __PYX_ERR(9, 1751, __pyx_L1_error)
+  __pyx_tuple__535 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_version, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_data); if (unlikely(!__pyx_tuple__535)) __PYX_ERR(9, 1750, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__535);
   __Pyx_GIVEREF(__pyx_tuple__535);
-  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__535, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_declaration, 1751, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(9, 1751, __pyx_L1_error)
+  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__535, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_declaration, 1750, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(9, 1750, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1757
+  /* "src/lxml/serializer.pxi":1756
  *             await self._async_outfile.write(data)
  * 
  *     async def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
  *         self._writer.write_doctype(doctype)
  *         data = self._flush()
  */
-  __pyx_tuple__536 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_doctype, __pyx_n_s_data); if (unlikely(!__pyx_tuple__536)) __PYX_ERR(9, 1757, __pyx_L1_error)
+  __pyx_tuple__536 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_doctype, __pyx_n_s_data); if (unlikely(!__pyx_tuple__536)) __PYX_ERR(9, 1756, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__536);
   __Pyx_GIVEREF(__pyx_tuple__536);
-  __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__536, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_doctype, 1757, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) __PYX_ERR(9, 1757, __pyx_L1_error)
+  __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__536, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write_doctype, 1756, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) __PYX_ERR(9, 1756, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1763
+  /* "src/lxml/serializer.pxi":1762
  *             await self._async_outfile.write(data)
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):             # <<<<<<<<<<<<<<
  *         self._writer.write(*args, with_tail=with_tail, pretty_print=pretty_print, method=method)
  *         data = self._flush()
  */
-  __pyx_tuple__537 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_with_tail, __pyx_n_s_pretty_print, __pyx_n_s_method, __pyx_n_s_args, __pyx_n_s_data); if (unlikely(!__pyx_tuple__537)) __PYX_ERR(9, 1763, __pyx_L1_error)
+  __pyx_tuple__537 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_with_tail, __pyx_n_s_pretty_print, __pyx_n_s_method, __pyx_n_s_args, __pyx_n_s_data); if (unlikely(!__pyx_tuple__537)) __PYX_ERR(9, 1762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__537);
   __Pyx_GIVEREF(__pyx_tuple__537);
-  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(1, 3, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__537, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write, 1763, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(9, 1763, __pyx_L1_error)
+  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(1, 3, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__537, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_write, 1762, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(9, 1762, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1769
+  /* "src/lxml/serializer.pxi":1768
  *             await self._async_outfile.write(data)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
  *         return self._writer.method(method)
  * 
  */
-  __pyx_tuple__538 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_method); if (unlikely(!__pyx_tuple__538)) __PYX_ERR(9, 1769, __pyx_L1_error)
+  __pyx_tuple__538 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_method); if (unlikely(!__pyx_tuple__538)) __PYX_ERR(9, 1768, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__538);
   __Pyx_GIVEREF(__pyx_tuple__538);
-  __pyx_codeobj__539 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__538, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_method, 1769, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__539)) __PYX_ERR(9, 1769, __pyx_L1_error)
+  __pyx_codeobj__539 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__538, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_method, 1768, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__539)) __PYX_ERR(9, 1768, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1772
+  /* "src/lxml/serializer.pxi":1771
  *         return self._writer.method(method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
  *         element_writer = self._writer.element(tag, attrib, nsmap, method, **_extra)
  *         return _AsyncFileWriterElement(element_writer, self)
  */
-  __pyx_tuple__540 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_method, __pyx_n_s_extra, __pyx_n_s_element_writer); if (unlikely(!__pyx_tuple__540)) __PYX_ERR(9, 1772, __pyx_L1_error)
+  __pyx_tuple__540 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_method, __pyx_n_s_extra, __pyx_n_s_element_writer); if (unlikely(!__pyx_tuple__540)) __PYX_ERR(9, 1771, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__540);
   __Pyx_GIVEREF(__pyx_tuple__540);
-  __pyx_codeobj__541 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__540, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_element, 1772, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__541)) __PYX_ERR(9, 1772, __pyx_L1_error)
+  __pyx_codeobj__541 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__540, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_element, 1771, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__541)) __PYX_ERR(9, 1771, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1776
+  /* "src/lxml/serializer.pxi":1775
  *         return _AsyncFileWriterElement(element_writer, self)
  * 
  *     async def _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
  *         self._writer._close(raise_on_error)
  *         data = self._buffer.collect()
  */
-  __pyx_tuple__542 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_raise_on_error, __pyx_n_s_raise_on_error, __pyx_n_s_data); if (unlikely(!__pyx_tuple__542)) __PYX_ERR(9, 1776, __pyx_L1_error)
+  __pyx_tuple__542 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_raise_on_error, __pyx_n_s_raise_on_error, __pyx_n_s_data); if (unlikely(!__pyx_tuple__542)) __PYX_ERR(9, 1775, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__542);
   __Pyx_GIVEREF(__pyx_tuple__542);
-  __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__542, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_close_2, 1776, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) __PYX_ERR(9, 1776, __pyx_L1_error)
+  __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__542, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_close_2, 1775, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) __PYX_ERR(9, 1775, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1796
+  /* "src/lxml/serializer.pxi":1795
  *         self._writer = writer
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
  *         self._element_writer.__enter__()
  *         data = self._writer._flush()
  */
-  __pyx_tuple__543 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__543)) __PYX_ERR(9, 1796, __pyx_L1_error)
+  __pyx_tuple__543 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__543)) __PYX_ERR(9, 1795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__543);
   __Pyx_GIVEREF(__pyx_tuple__543);
-  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__543, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aenter, 1796, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(9, 1796, __pyx_L1_error)
+  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__543, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aenter, 1795, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(9, 1795, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1802
+  /* "src/lxml/serializer.pxi":1801
  *             await self._writer._async_outfile.write(data)
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
  *         self._element_writer.__exit__(*args)
  *         data = self._writer._flush()
  */
-  __pyx_tuple__544 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_data); if (unlikely(!__pyx_tuple__544)) __PYX_ERR(9, 1802, __pyx_L1_error)
+  __pyx_tuple__544 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_data); if (unlikely(!__pyx_tuple__544)) __PYX_ERR(9, 1801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__544);
   __Pyx_GIVEREF(__pyx_tuple__544);
-  __pyx_codeobj__90 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__544, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aexit, 1802, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__90)) __PYX_ERR(9, 1802, __pyx_L1_error)
+  __pyx_codeobj__90 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__544, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aexit, 1801, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__90)) __PYX_ERR(9, 1801, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1824
+  /* "src/lxml/serializer.pxi":1823
  *         self._old_method = writer._method
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
  *         self._writer._method = self._new_method
  *         self._writer._write_start_element(self._element)
  */
-  __pyx_tuple__545 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__545)) __PYX_ERR(9, 1824, __pyx_L1_error)
+  __pyx_tuple__545 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__545)) __PYX_ERR(9, 1823, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__545);
   __Pyx_GIVEREF(__pyx_tuple__545);
-  __pyx_codeobj__546 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__545, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_enter, 1824, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__546)) __PYX_ERR(9, 1824, __pyx_L1_error)
+  __pyx_codeobj__546 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__545, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_enter, 1823, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__546)) __PYX_ERR(9, 1823, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1828
+  /* "src/lxml/serializer.pxi":1827
  *         self._writer._write_start_element(self._element)
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         self._writer._write_end_element(self._element)
  *         self._writer._method = self._old_method
  */
-  __pyx_tuple__547 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb); if (unlikely(!__pyx_tuple__547)) __PYX_ERR(9, 1828, __pyx_L1_error)
+  __pyx_tuple__547 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb); if (unlikely(!__pyx_tuple__547)) __PYX_ERR(9, 1827, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__547);
   __Pyx_GIVEREF(__pyx_tuple__547);
-  __pyx_codeobj__548 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__547, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_exit, 1828, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__548)) __PYX_ERR(9, 1828, __pyx_L1_error)
+  __pyx_codeobj__548 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__547, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_exit, 1827, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__548)) __PYX_ERR(9, 1827, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1850
+  /* "src/lxml/serializer.pxi":1849
  *         self._exited = False
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
  *         if self._entered:
  *             raise LxmlSyntaxError("Inconsistent enter action in context manager")
  */
-  __pyx_tuple__549 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__549)) __PYX_ERR(9, 1850, __pyx_L1_error)
+  __pyx_tuple__549 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__549)) __PYX_ERR(9, 1849, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__549);
   __Pyx_GIVEREF(__pyx_tuple__549);
-  __pyx_codeobj__550 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__549, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_enter, 1850, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__550)) __PYX_ERR(9, 1850, __pyx_L1_error)
+  __pyx_codeobj__550 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__549, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_enter, 1849, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__550)) __PYX_ERR(9, 1849, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1856
+  /* "src/lxml/serializer.pxi":1855
  *         self._entered = True
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         if self._exited:
  *             raise LxmlSyntaxError("Inconsistent exit action in context manager")
  */
-  __pyx_tuple__551 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb); if (unlikely(!__pyx_tuple__551)) __PYX_ERR(9, 1856, __pyx_L1_error)
+  __pyx_tuple__551 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_exc_type, __pyx_n_s_exc_val, __pyx_n_s_exc_tb); if (unlikely(!__pyx_tuple__551)) __PYX_ERR(9, 1855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__551);
   __Pyx_GIVEREF(__pyx_tuple__551);
-  __pyx_codeobj__552 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__551, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_exit, 1856, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__552)) __PYX_ERR(9, 1856, __pyx_L1_error)
+  __pyx_codeobj__552 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__551, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_exit, 1855, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__552)) __PYX_ERR(9, 1855, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1864
+  /* "src/lxml/serializer.pxi":1863
  *         self._exited = True
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
  *         # for your async convenience
  *         return self.__enter__()
  */
-  __pyx_tuple__553 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__553)) __PYX_ERR(9, 1864, __pyx_L1_error)
+  __pyx_tuple__553 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__553)) __PYX_ERR(9, 1863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__553);
   __Pyx_GIVEREF(__pyx_tuple__553);
-  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__553, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aenter, 1864, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(9, 1864, __pyx_L1_error)
+  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__553, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aenter, 1863, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(9, 1863, __pyx_L1_error)
 
-  /* "src/lxml/serializer.pxi":1868
+  /* "src/lxml/serializer.pxi":1867
  *         return self.__enter__()
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
  *         # for your async convenience
  *         return self.__exit__(*args)
  */
-  __pyx_tuple__554 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_args); if (unlikely(!__pyx_tuple__554)) __PYX_ERR(9, 1868, __pyx_L1_error)
+  __pyx_tuple__554 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_args); if (unlikely(!__pyx_tuple__554)) __PYX_ERR(9, 1867, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__554);
   __Pyx_GIVEREF(__pyx_tuple__554);
-  __pyx_codeobj__92 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__554, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aexit, 1868, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__92)) __PYX_ERR(9, 1868, __pyx_L1_error)
+  __pyx_codeobj__92 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__554, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_serializer_pxi, __pyx_n_s_aexit, 1867, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__92)) __PYX_ERR(9, 1867, __pyx_L1_error)
 
   /* "src/lxml/iterparse.pxi":148
  *         return self._parser.version
@@ -249916,53 +250041,53 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__666);
   __pyx_codeobj__667 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__666, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_attributes, 233, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__667)) __PYX_ERR(20, 233, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":320
+  /* "src/lxml/dtd.pxi":325
  *        return funicodeOrNone(self._c_dtd.SystemID)
  * 
  *     def iterelements(self):             # <<<<<<<<<<<<<<
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  */
-  __pyx_tuple__668 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_c_node, __pyx_n_s_node); if (unlikely(!__pyx_tuple__668)) __PYX_ERR(20, 320, __pyx_L1_error)
+  __pyx_tuple__668 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_c_node, __pyx_n_s_node); if (unlikely(!__pyx_tuple__668)) __PYX_ERR(20, 325, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__668);
   __Pyx_GIVEREF(__pyx_tuple__668);
-  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__668, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_iterelements, 320, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(20, 320, __pyx_L1_error)
+  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__668, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_iterelements, 325, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(20, 325, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":330
+  /* "src/lxml/dtd.pxi":335
  *             c_node = c_node.next
  * 
  *     def elements(self):             # <<<<<<<<<<<<<<
  *         return list(self.iterelements())
  * 
  */
-  __pyx_tuple__669 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__669)) __PYX_ERR(20, 330, __pyx_L1_error)
+  __pyx_tuple__669 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__669)) __PYX_ERR(20, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__669);
   __Pyx_GIVEREF(__pyx_tuple__669);
-  __pyx_codeobj__670 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__669, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_elements, 330, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__670)) __PYX_ERR(20, 330, __pyx_L1_error)
+  __pyx_codeobj__670 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__669, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_elements, 335, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__670)) __PYX_ERR(20, 335, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":333
+  /* "src/lxml/dtd.pxi":338
  *         return list(self.iterelements())
  * 
  *     def iterentities(self):             # <<<<<<<<<<<<<<
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  */
-  __pyx_tuple__671 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_c_node, __pyx_n_s_node); if (unlikely(!__pyx_tuple__671)) __PYX_ERR(20, 333, __pyx_L1_error)
+  __pyx_tuple__671 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_c_node, __pyx_n_s_node); if (unlikely(!__pyx_tuple__671)) __PYX_ERR(20, 338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__671);
   __Pyx_GIVEREF(__pyx_tuple__671);
-  __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__671, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_iterentities, 333, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) __PYX_ERR(20, 333, __pyx_L1_error)
+  __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__671, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_iterentities, 338, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) __PYX_ERR(20, 338, __pyx_L1_error)
 
-  /* "src/lxml/dtd.pxi":343
+  /* "src/lxml/dtd.pxi":348
  *             c_node = c_node.next
  * 
  *     def entities(self):             # <<<<<<<<<<<<<<
  *         return list(self.iterentities())
  * 
  */
-  __pyx_tuple__672 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__672)) __PYX_ERR(20, 343, __pyx_L1_error)
+  __pyx_tuple__672 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__672)) __PYX_ERR(20, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__672);
   __Pyx_GIVEREF(__pyx_tuple__672);
-  __pyx_codeobj__673 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__672, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_entities, 343, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__673)) __PYX_ERR(20, 343, __pyx_L1_error)
+  __pyx_codeobj__673 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__672, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_dtd_pxi, __pyx_n_s_entities, 348, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__673)) __PYX_ERR(20, 348, __pyx_L1_error)
 
   /* "src/lxml/relaxng.pxi":153
  * 
@@ -251456,48 +251581,48 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__FilelikeWriter._createOutputBuffer = (xmlOutputBuffer *(*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *))__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer;
   __pyx_vtable_4lxml_5etree__FilelikeWriter.write = (int (*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int))__pyx_f_4lxml_5etree_15_FilelikeWriter_write;
   __pyx_vtable_4lxml_5etree__FilelikeWriter.close = (int (*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *))__pyx_f_4lxml_5etree_15_FilelikeWriter_close;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FilelikeWriter) < 0) __PYX_ERR(9, 648, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FilelikeWriter) < 0) __PYX_ERR(9, 647, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__FilelikeWriter.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__FilelikeWriter.tp_dictoffset && __pyx_type_4lxml_5etree__FilelikeWriter.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__FilelikeWriter.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FilelikeWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__FilelikeWriter) < 0) __PYX_ERR(9, 648, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FilelikeWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__FilelikeWriter) < 0) __PYX_ERR(9, 647, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__FilelikeWriter = &__pyx_type_4lxml_5etree__FilelikeWriter;
   __pyx_vtabptr_4lxml_5etree_C14NWriterTarget = &__pyx_vtable_4lxml_5etree_C14NWriterTarget;
   __pyx_vtable_4lxml_5etree_C14NWriterTarget._resolve_prefix_name = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_C14NWriterTarget *, PyObject *))__pyx_f_4lxml_5etree_16C14NWriterTarget__resolve_prefix_name;
   __pyx_vtable_4lxml_5etree_C14NWriterTarget._qname = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_C14NWriterTarget *, PyObject *, struct __pyx_opt_args_4lxml_5etree_16C14NWriterTarget__qname *__pyx_optional_args))__pyx_f_4lxml_5etree_16C14NWriterTarget__qname;
   __pyx_vtable_4lxml_5etree_C14NWriterTarget._flush = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_C14NWriterTarget *))__pyx_f_4lxml_5etree_16C14NWriterTarget__flush;
   __pyx_vtable_4lxml_5etree_C14NWriterTarget._start = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_C14NWriterTarget *, PyObject *, PyObject *, PyObject *, struct __pyx_opt_args_4lxml_5etree_16C14NWriterTarget__start *__pyx_optional_args))__pyx_f_4lxml_5etree_16C14NWriterTarget__start;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_C14NWriterTarget) < 0) __PYX_ERR(9, 966, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_C14NWriterTarget) < 0) __PYX_ERR(9, 965, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_C14NWriterTarget.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_C14NWriterTarget.tp_dictoffset && __pyx_type_4lxml_5etree_C14NWriterTarget.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_C14NWriterTarget.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_C14NWriterTarget.tp_dict, __pyx_vtabptr_4lxml_5etree_C14NWriterTarget) < 0) __PYX_ERR(9, 966, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_C14NWriterTarget, (PyObject *)&__pyx_type_4lxml_5etree_C14NWriterTarget) < 0) __PYX_ERR(9, 966, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_C14NWriterTarget.tp_dict, __pyx_vtabptr_4lxml_5etree_C14NWriterTarget) < 0) __PYX_ERR(9, 965, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_C14NWriterTarget, (PyObject *)&__pyx_type_4lxml_5etree_C14NWriterTarget) < 0) __PYX_ERR(9, 965, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_C14NWriterTarget = &__pyx_type_4lxml_5etree_C14NWriterTarget;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_xmlfile) < 0) __PYX_ERR(9, 1289, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_xmlfile) < 0) __PYX_ERR(9, 1288, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_xmlfile.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_xmlfile.tp_dictoffset && __pyx_type_4lxml_5etree_xmlfile.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_xmlfile.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_xmlfile, (PyObject *)&__pyx_type_4lxml_5etree_xmlfile) < 0) __PYX_ERR(9, 1289, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_xmlfile, (PyObject *)&__pyx_type_4lxml_5etree_xmlfile) < 0) __PYX_ERR(9, 1288, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_xmlfile = &__pyx_type_4lxml_5etree_xmlfile;
   __pyx_type_4lxml_5etree_htmlfile.tp_base = __pyx_ptype_4lxml_5etree_xmlfile;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_htmlfile) < 0) __PYX_ERR(9, 1378, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_htmlfile) < 0) __PYX_ERR(9, 1377, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_htmlfile.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_htmlfile.tp_dictoffset && __pyx_type_4lxml_5etree_htmlfile.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_htmlfile.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_htmlfile, (PyObject *)&__pyx_type_4lxml_5etree_htmlfile) < 0) __PYX_ERR(9, 1378, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_htmlfile, (PyObject *)&__pyx_type_4lxml_5etree_htmlfile) < 0) __PYX_ERR(9, 1377, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_htmlfile = &__pyx_type_4lxml_5etree_htmlfile;
   __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter = &__pyx_vtable_4lxml_5etree__IncrementalFileWriter;
   __pyx_vtable_4lxml_5etree__IncrementalFileWriter._write_qname = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname;
@@ -251509,38 +251634,38 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__IncrementalFileWriter._collect_namespaces = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *))__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces;
   __pyx_vtable_4lxml_5etree__IncrementalFileWriter._close = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int))__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close;
   __pyx_vtable_4lxml_5etree__IncrementalFileWriter._handle_error = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int))__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__IncrementalFileWriter) < 0) __PYX_ERR(9, 1399, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__IncrementalFileWriter) < 0) __PYX_ERR(9, 1398, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__IncrementalFileWriter.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__IncrementalFileWriter.tp_dictoffset && __pyx_type_4lxml_5etree__IncrementalFileWriter.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__IncrementalFileWriter.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__IncrementalFileWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter) < 0) __PYX_ERR(9, 1399, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__IncrementalFileWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter) < 0) __PYX_ERR(9, 1398, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__IncrementalFileWriter = &__pyx_type_4lxml_5etree__IncrementalFileWriter;
   __pyx_vtabptr_4lxml_5etree__AsyncDataWriter = &__pyx_vtable_4lxml_5etree__AsyncDataWriter;
   __pyx_vtable_4lxml_5etree__AsyncDataWriter.collect = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__AsyncDataWriter *))__pyx_f_4lxml_5etree_16_AsyncDataWriter_collect;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__AsyncDataWriter) < 0) __PYX_ERR(9, 1703, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__AsyncDataWriter) < 0) __PYX_ERR(9, 1702, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__AsyncDataWriter.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__AsyncDataWriter.tp_dictoffset && __pyx_type_4lxml_5etree__AsyncDataWriter.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__AsyncDataWriter.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__AsyncDataWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__AsyncDataWriter) < 0) __PYX_ERR(9, 1703, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__AsyncDataWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__AsyncDataWriter) < 0) __PYX_ERR(9, 1702, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__AsyncDataWriter = &__pyx_type_4lxml_5etree__AsyncDataWriter;
   __pyx_vtabptr_4lxml_5etree__AsyncIncrementalFileWriter = &__pyx_vtable_4lxml_5etree__AsyncIncrementalFileWriter;
   __pyx_vtable_4lxml_5etree__AsyncIncrementalFileWriter._flush = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__AsyncIncrementalFileWriter *))__pyx_f_4lxml_5etree_27_AsyncIncrementalFileWriter__flush;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__AsyncIncrementalFileWriter) < 0) __PYX_ERR(9, 1722, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__AsyncIncrementalFileWriter) < 0) __PYX_ERR(9, 1721, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__AsyncIncrementalFileWriter.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__AsyncIncrementalFileWriter.tp_dictoffset && __pyx_type_4lxml_5etree__AsyncIncrementalFileWriter.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__AsyncIncrementalFileWriter.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__AsyncIncrementalFileWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__AsyncIncrementalFileWriter) < 0) __PYX_ERR(9, 1722, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__AsyncIncrementalFileWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__AsyncIncrementalFileWriter) < 0) __PYX_ERR(9, 1721, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter = &__pyx_type_4lxml_5etree__AsyncIncrementalFileWriter;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__AsyncFileWriterElement) < 0) __PYX_ERR(9, 1787, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__AsyncFileWriterElement) < 0) __PYX_ERR(9, 1786, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__AsyncFileWriterElement.tp_print = 0;
   #endif
@@ -251548,7 +251673,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree__AsyncFileWriterElement.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree__AsyncFileWriterElement = &__pyx_type_4lxml_5etree__AsyncFileWriterElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileWriterElement) < 0) __PYX_ERR(9, 1812, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileWriterElement) < 0) __PYX_ERR(9, 1811, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__FileWriterElement.tp_print = 0;
   #endif
@@ -251556,7 +251681,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree__FileWriterElement.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree__FileWriterElement = &__pyx_type_4lxml_5etree__FileWriterElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__MethodChanger) < 0) __PYX_ERR(9, 1836, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__MethodChanger) < 0) __PYX_ERR(9, 1835, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__MethodChanger.tp_print = 0;
   #endif
@@ -252086,7 +252211,7 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtabptr_4lxml_5etree_DTD = &__pyx_vtable_4lxml_5etree_DTD;
   __pyx_vtable_4lxml_5etree_DTD.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
   __pyx_type_4lxml_5etree_DTD.tp_base = __pyx_ptype_4lxml_5etree__Validator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_DTD) < 0) __PYX_ERR(20, 265, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_DTD) < 0) __PYX_ERR(20, 270, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_DTD.tp_print = 0;
   #endif
@@ -252095,7 +252220,7 @@ static int __Pyx_modinit_type_init_code(void) {
   }
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_DTD, "__call__"); if (unlikely(!wrapper)) __PYX_ERR(20, 265, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_DTD, "__call__"); if (unlikely(!wrapper)) __PYX_ERR(20, 270, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_3DTD_14__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_3DTD_14__call__.doc = __pyx_doc_4lxml_5etree_3DTD_14__call__;
@@ -252103,8 +252228,8 @@ static int __Pyx_modinit_type_init_code(void) {
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_DTD.tp_dict, __pyx_vtabptr_4lxml_5etree_DTD) < 0) __PYX_ERR(20, 265, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DTD, (PyObject *)&__pyx_type_4lxml_5etree_DTD) < 0) __PYX_ERR(20, 265, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_DTD.tp_dict, __pyx_vtabptr_4lxml_5etree_DTD) < 0) __PYX_ERR(20, 270, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DTD, (PyObject *)&__pyx_type_4lxml_5etree_DTD) < 0) __PYX_ERR(20, 270, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_DTD = &__pyx_type_4lxml_5etree_DTD;
   __pyx_type_4lxml_5etree_RelaxNGError.tp_base = __pyx_ptype_4lxml_5etree_LxmlError;
   if (PyType_Ready(&__pyx_type_4lxml_5etree_RelaxNGError) < 0) __PYX_ERR(21, 18, __pyx_L1_error)
@@ -252289,7 +252414,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree__MemDebug.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree__MemDebug = &__pyx_type_4lxml_5etree__MemDebug;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct___open_utf8_file) < 0) __PYX_ERR(9, 630, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct___open_utf8_file) < 0) __PYX_ERR(9, 629, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct___open_utf8_file.tp_print = 0;
   #endif
@@ -252297,7 +252422,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct___open_utf8_file.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct___open_utf8_file = &__pyx_type_4lxml_5etree___pyx_scope_struct___open_utf8_file;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_1__iter_namespaces) < 0) __PYX_ERR(9, 1039, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_1__iter_namespaces) < 0) __PYX_ERR(9, 1038, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_1__iter_namespaces.tp_print = 0;
   #endif
@@ -252305,7 +252430,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_1__iter_namespaces.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_1__iter_namespaces = &__pyx_type_4lxml_5etree___pyx_scope_struct_1__iter_namespaces;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_2___aenter__) < 0) __PYX_ERR(9, 1358, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_2___aenter__) < 0) __PYX_ERR(9, 1357, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_2___aenter__.tp_print = 0;
   #endif
@@ -252313,7 +252438,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_2___aenter__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_2___aenter__ = &__pyx_type_4lxml_5etree___pyx_scope_struct_2___aenter__;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_3___aexit__) < 0) __PYX_ERR(9, 1369, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_3___aexit__) < 0) __PYX_ERR(9, 1368, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_3___aexit__.tp_print = 0;
   #endif
@@ -252321,7 +252446,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_3___aexit__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_3___aexit__ = &__pyx_type_4lxml_5etree___pyx_scope_struct_3___aexit__;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_4_flush) < 0) __PYX_ERR(9, 1745, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_4_flush) < 0) __PYX_ERR(9, 1744, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_4_flush.tp_print = 0;
   #endif
@@ -252329,7 +252454,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_4_flush.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_4_flush = &__pyx_type_4lxml_5etree___pyx_scope_struct_4_flush;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_5_write_declaration) < 0) __PYX_ERR(9, 1751, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_5_write_declaration) < 0) __PYX_ERR(9, 1750, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_5_write_declaration.tp_print = 0;
   #endif
@@ -252337,7 +252462,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_5_write_declaration.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_5_write_declaration = &__pyx_type_4lxml_5etree___pyx_scope_struct_5_write_declaration;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_6_write_doctype) < 0) __PYX_ERR(9, 1757, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_6_write_doctype) < 0) __PYX_ERR(9, 1756, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_6_write_doctype.tp_print = 0;
   #endif
@@ -252345,7 +252470,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_6_write_doctype.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_6_write_doctype = &__pyx_type_4lxml_5etree___pyx_scope_struct_6_write_doctype;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_7_write) < 0) __PYX_ERR(9, 1763, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_7_write) < 0) __PYX_ERR(9, 1762, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_7_write.tp_print = 0;
   #endif
@@ -252353,7 +252478,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_7_write.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_7_write = &__pyx_type_4lxml_5etree___pyx_scope_struct_7_write;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_8__close) < 0) __PYX_ERR(9, 1776, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_8__close) < 0) __PYX_ERR(9, 1775, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_8__close.tp_print = 0;
   #endif
@@ -252361,7 +252486,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_8__close.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_8__close = &__pyx_type_4lxml_5etree___pyx_scope_struct_8__close;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_9___aenter__) < 0) __PYX_ERR(9, 1796, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_9___aenter__) < 0) __PYX_ERR(9, 1795, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_9___aenter__.tp_print = 0;
   #endif
@@ -252369,7 +252494,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_9___aenter__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_9___aenter__ = &__pyx_type_4lxml_5etree___pyx_scope_struct_9___aenter__;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_10___aexit__) < 0) __PYX_ERR(9, 1802, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_10___aexit__) < 0) __PYX_ERR(9, 1801, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_10___aexit__.tp_print = 0;
   #endif
@@ -252377,7 +252502,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_10___aexit__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_10___aexit__ = &__pyx_type_4lxml_5etree___pyx_scope_struct_10___aexit__;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_11___aenter__) < 0) __PYX_ERR(9, 1864, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_11___aenter__) < 0) __PYX_ERR(9, 1863, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_11___aenter__.tp_print = 0;
   #endif
@@ -252385,7 +252510,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_11___aenter__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_11___aenter__ = &__pyx_type_4lxml_5etree___pyx_scope_struct_11___aenter__;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_12___aexit__) < 0) __PYX_ERR(9, 1868, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_12___aexit__) < 0) __PYX_ERR(9, 1867, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_12___aexit__.tp_print = 0;
   #endif
@@ -252409,7 +252534,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_14_iterattributes.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_14_iterattributes = &__pyx_type_4lxml_5etree___pyx_scope_struct_14_iterattributes;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_15_iterelements) < 0) __PYX_ERR(20, 320, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_15_iterelements) < 0) __PYX_ERR(20, 325, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_15_iterelements.tp_print = 0;
   #endif
@@ -252417,7 +252542,7 @@ static int __Pyx_modinit_type_init_code(void) {
     __pyx_type_4lxml_5etree___pyx_scope_struct_15_iterelements.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
   __pyx_ptype_4lxml_5etree___pyx_scope_struct_15_iterelements = &__pyx_type_4lxml_5etree___pyx_scope_struct_15_iterelements;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_16_iterentities) < 0) __PYX_ERR(20, 333, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_16_iterentities) < 0) __PYX_ERR(20, 338, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___pyx_scope_struct_16_iterentities.tp_print = 0;
   #endif
@@ -252634,11 +252759,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -257085,57 +257208,57 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":615
+  /* "src/lxml/serializer.pxi":614
  * 
  * cdef object io_open
  * from io import open             # <<<<<<<<<<<<<<
  * 
  * cdef object gzip
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 615, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_open);
   __Pyx_GIVEREF(__pyx_n_s_open);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_open);
-  __pyx_t_7 = __Pyx_Import(__pyx_n_s_io, __pyx_t_2, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 615, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_Import(__pyx_n_s_io, __pyx_t_2, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 615, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_open, __pyx_t_2) < 0) __PYX_ERR(9, 615, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_open, __pyx_t_2) < 0) __PYX_ERR(9, 614, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":618
+  /* "src/lxml/serializer.pxi":617
  * 
  * cdef object gzip
  * import gzip             # <<<<<<<<<<<<<<
  * 
  * cdef object getwriter
  */
-  __pyx_t_7 = __Pyx_Import(__pyx_n_s_gzip, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 618, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_Import(__pyx_n_s_gzip, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 617, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_gzip);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_gzip, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":621
+  /* "src/lxml/serializer.pxi":620
  * 
  * cdef object getwriter
  * from codecs import getwriter             # <<<<<<<<<<<<<<
  * cdef object utf8_writer = getwriter('utf8')
  * 
  */
-  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 621, __pyx_L1_error)
+  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_n_s_getwriter);
   __Pyx_GIVEREF(__pyx_n_s_getwriter);
   PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_getwriter);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_codecs, __pyx_t_7, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 621, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_codecs, __pyx_t_7, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_getwriter); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 621, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_getwriter); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_t_7);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_getwriter);
@@ -257144,36 +257267,36 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":622
+  /* "src/lxml/serializer.pxi":621
  * cdef object getwriter
  * from codecs import getwriter
  * cdef object utf8_writer = getwriter('utf8')             # <<<<<<<<<<<<<<
  * 
  * cdef object contextmanager
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_getwriter, __pyx_tuple__491, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 622, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_getwriter, __pyx_tuple__491, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 621, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_utf8_writer);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_utf8_writer, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":625
+  /* "src/lxml/serializer.pxi":624
  * 
  * cdef object contextmanager
  * from contextlib import contextmanager             # <<<<<<<<<<<<<<
  * 
  * cdef object _open_utf8_file
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 625, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 624, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_contextmanager);
   __Pyx_GIVEREF(__pyx_n_s_contextmanager);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_contextmanager);
-  __pyx_t_7 = __Pyx_Import(__pyx_n_s_contextlib, __pyx_t_2, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 625, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_Import(__pyx_n_s_contextlib, __pyx_t_2, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 624, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 625, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 624, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_contextmanager);
@@ -257182,25 +257305,25 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":630
+  /* "src/lxml/serializer.pxi":629
  * 
  * @contextmanager
  * def _open_utf8_file(file, compression=0):             # <<<<<<<<<<<<<<
  *     if _isString(file):
  *         if compression:
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_51_open_utf8_file, 0, __pyx_n_s_open_utf8_file, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 630, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_51_open_utf8_file, 0, __pyx_n_s_open_utf8_file, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__493);
 
-  /* "src/lxml/serializer.pxi":629
+  /* "src/lxml/serializer.pxi":628
  * cdef object _open_utf8_file
  * 
  * @contextmanager             # <<<<<<<<<<<<<<
  * def _open_utf8_file(file, compression=0):
  *     if _isString(file):
  */
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_v_4lxml_5etree_contextmanager, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 629, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_v_4lxml_5etree_contextmanager, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__open_utf8_file);
@@ -257208,37 +257331,37 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/serializer.pxi":896
+  /* "src/lxml/serializer.pxi":895
  * # C14N 2.0
  * 
  * def canonicalize(xml_data=None, *, out=None, from_file=None, **options):             # <<<<<<<<<<<<<<
  *     """Convert XML to its C14N 2.0 serialised form.
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 896, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_out, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 896, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_file, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 896, __pyx_L1_error)
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_54canonicalize, 0, __pyx_n_s_canonicalize, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__495)); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 896, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_out, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 895, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_file, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 895, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_54canonicalize, 0, __pyx_n_s_canonicalize, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__495)); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__496);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_7, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_canonicalize, __pyx_t_7) < 0) __PYX_ERR(9, 896, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_canonicalize, __pyx_t_7) < 0) __PYX_ERR(9, 895, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "src/lxml/serializer.pxi":963
+  /* "src/lxml/serializer.pxi":962
  * 
  * 
  * cdef object _looks_like_prefix_name = re.compile('^\w+:\w+$', re.UNICODE).match             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 963, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 962, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_UNICODE); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 963, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_UNICODE); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 962, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 963, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 962, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_kp_s_w_w);
   __Pyx_GIVEREF(__pyx_kp_s_w_w);
@@ -257246,11 +257369,11 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 963, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 962, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_match); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 963, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_match); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 962, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__looks_like_prefix_name);
@@ -257258,458 +257381,458 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/serializer.pxi":1039
+  /* "src/lxml/serializer.pxi":1038
  *         self._root_done = False
  * 
  *     def _iter_namespaces(self, ns_stack):             # <<<<<<<<<<<<<<
  *         for namespaces in reversed(ns_stack):
  *             if namespaces:  # almost no element declares new namespaces
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_3_iter_namespaces, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget__iter_namespace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1039, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_3_iter_namespaces, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget__iter_namespace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1038, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_iter_namespaces, __pyx_t_1) < 0) __PYX_ERR(9, 1039, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_iter_namespaces, __pyx_t_1) < 0) __PYX_ERR(9, 1038, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1088
+  /* "src/lxml/serializer.pxi":1087
  *         raise ValueError(f'Namespace "{uri}" of name "{tag}" is not declared in scope')
  * 
  *     def data(self, data):             # <<<<<<<<<<<<<<
  *         if not self._ignored_depth:
  *             self._data.append(data)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_6data, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_data, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__499)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1088, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_6data, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_data, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__499)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1087, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_data, __pyx_t_1) < 0) __PYX_ERR(9, 1088, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_data, __pyx_t_1) < 0) __PYX_ERR(9, 1087, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1106
+  /* "src/lxml/serializer.pxi":1105
  *             self._write(_escape_cdata_c14n(data))
  * 
  *     def start_ns(self, prefix, uri):             # <<<<<<<<<<<<<<
  *         if self._ignored_depth:
  *             return
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_8start_ns, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_start_ns, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__501)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1106, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_8start_ns, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_start_ns, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__501)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1105, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_start_ns_2, __pyx_t_1) < 0) __PYX_ERR(9, 1106, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_start_ns_2, __pyx_t_1) < 0) __PYX_ERR(9, 1105, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1114
+  /* "src/lxml/serializer.pxi":1113
  *         self._ns_stack[-1].append((uri, prefix))
  * 
  *     def start(self, tag, attrs):             # <<<<<<<<<<<<<<
  *         if self._exclude_tags is not None and (
  *                 self._ignored_depth or tag in self._exclude_tags):
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_10start, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_start, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__503)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1114, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_10start, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_start, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__503)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_start, __pyx_t_1) < 0) __PYX_ERR(9, 1114, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_start, __pyx_t_1) < 0) __PYX_ERR(9, 1113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1199
+  /* "src/lxml/serializer.pxi":1198
  *         self._ns_stack.append([])
  * 
  *     def end(self, tag):             # <<<<<<<<<<<<<<
  *         if self._ignored_depth:
  *             self._ignored_depth -= 1
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_12end, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_end, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__505)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1199, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_12end, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_end, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__505)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_end, __pyx_t_1) < 0) __PYX_ERR(9, 1199, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_end, __pyx_t_1) < 0) __PYX_ERR(9, 1198, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1211
+  /* "src/lxml/serializer.pxi":1210
  *         self._ns_stack.pop()
  * 
  *     def comment(self, text):             # <<<<<<<<<<<<<<
  *         if not self._with_comments:
  *             return
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_14comment, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_comment, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__507)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1211, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_14comment, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_comment, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__507)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_comment, __pyx_t_1) < 0) __PYX_ERR(9, 1211, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_comment, __pyx_t_1) < 0) __PYX_ERR(9, 1210, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1224
+  /* "src/lxml/serializer.pxi":1223
  *             self._write(u'\n')
  * 
  *     def pi(self, target, data):             # <<<<<<<<<<<<<<
  *         if self._ignored_depth:
  *             return
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_16pi, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_pi, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__509)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1224, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_16pi, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_pi, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__509)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_pi, __pyx_t_1) < 0) __PYX_ERR(9, 1224, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_pi, __pyx_t_1) < 0) __PYX_ERR(9, 1223, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1236
+  /* "src/lxml/serializer.pxi":1235
  *             self._write(u'\n')
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
  *         return None
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_18close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__511)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1236, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16C14NWriterTarget_18close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_C14NWriterTarget_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__511)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_close, __pyx_t_1) < 0) __PYX_ERR(9, 1236, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_close, __pyx_t_1) < 0) __PYX_ERR(9, 1235, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
-  /* "src/lxml/serializer.pxi":1343
+  /* "src/lxml/serializer.pxi":1342
  *         self.method = OUTPUT_METHOD_XML
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
  *         assert self.output_file is not None
  *         self.writer = _IncrementalFileWriter(
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___enter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__513)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1343, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___enter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__513)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_enter, __pyx_t_1) < 0) __PYX_ERR(9, 1343, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_enter, __pyx_t_1) < 0) __PYX_ERR(9, 1342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
-  /* "src/lxml/serializer.pxi":1350
+  /* "src/lxml/serializer.pxi":1349
  *         return self.writer
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         if self.writer is not None:
  *             old_writer, self.writer = self.writer, None
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__515)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1350, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__515)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(9, 1350, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(9, 1349, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
-  /* "src/lxml/serializer.pxi":1358
+  /* "src/lxml/serializer.pxi":1357
  *                 self.output_file = None
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
  *         assert self.output_file is not None
  *         if isinstance(self.output_file, basestring):
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_7__aenter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___aenter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1358, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_7__aenter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___aenter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_aenter, __pyx_t_1) < 0) __PYX_ERR(9, 1358, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_aenter, __pyx_t_1) < 0) __PYX_ERR(9, 1357, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
-  /* "src/lxml/serializer.pxi":1369
+  /* "src/lxml/serializer.pxi":1368
  *         return self.async_writer
  * 
  *     async def __aexit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         if self.async_writer is not None:
  *             old_writer, self.async_writer = self.async_writer, None
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_10__aexit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___aexit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1369, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7xmlfile_10__aexit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_xmlfile___aexit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1368, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_aexit, __pyx_t_1) < 0) __PYX_ERR(9, 1369, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_aexit, __pyx_t_1) < 0) __PYX_ERR(9, 1368, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
-  /* "src/lxml/serializer.pxi":1426
+  /* "src/lxml/serializer.pxi":1425
  *             tree.xmlOutputBufferClose(self._c_out)
  * 
  *     def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
  *         """write_declaration(self, version=None, standalone=None, doctype=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_5write_declaration, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_write_dec, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__519)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1426, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_5write_declaration, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_write_dec, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__519)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1425, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write_declaration, __pyx_t_1) < 0) __PYX_ERR(9, 1426, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write_declaration, __pyx_t_1) < 0) __PYX_ERR(9, 1425, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1455
+  /* "src/lxml/serializer.pxi":1454
  *         self._handle_error(self._c_out.error)
  * 
  *     def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
  *         """write_doctype(self, doctype)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_7write_doctype, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_write_doc, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__521)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1455, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_7write_doctype, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_write_doc, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__521)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write_doctype, __pyx_t_1) < 0) __PYX_ERR(9, 1455, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write_doctype, __pyx_t_1) < 0) __PYX_ERR(9, 1454, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1472
+  /* "src/lxml/serializer.pxi":1471
  *         self._handle_error(self._c_out.error)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
  *         """method(self, method)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_9method, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_method, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__523)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1472, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_9method, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_method, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__523)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1471, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_method, __pyx_t_1) < 0) __PYX_ERR(9, 1472, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_method, __pyx_t_1) < 0) __PYX_ERR(9, 1471, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1482
+  /* "src/lxml/serializer.pxi":1481
  *         return _MethodChanger(self, c_method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
  *         """element(self, tag, attrib=None, nsmap=None, method, **_extra)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_11element, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_element, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__525)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1482, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_11element, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_element, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__525)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_element, __pyx_t_1) < 0) __PYX_ERR(9, 1482, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_element, __pyx_t_1) < 0) __PYX_ERR(9, 1481, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1619
+  /* "src/lxml/serializer.pxi":1618
  *         return flat_namespaces_map, new_namespaces
  * 
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False, method=None):             # <<<<<<<<<<<<<<
  *         """write(self, *args, with_tail=True, pretty_print=False, method=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_13write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_write, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__527)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1619, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_13write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_write, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__527)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1618, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(9, 1619, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(9, 1618, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1666
+  /* "src/lxml/serializer.pxi":1665
  *             self._handle_error(self._c_out.error)
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
  *         """flush(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_15flush, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_flush, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__529)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1666, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_IncrementalFileWriter_15flush, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IncrementalFileWriter_flush, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__529)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1665, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_flush, __pyx_t_1) < 0) __PYX_ERR(9, 1666, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_flush, __pyx_t_1) < 0) __PYX_ERR(9, 1665, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1713
+  /* "src/lxml/serializer.pxi":1712
  *         return data
  * 
  *     def write(self, data):             # <<<<<<<<<<<<<<
  *         self._data.append(data)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16_AsyncDataWriter_3write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncDataWriter_write, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__531)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1713, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16_AsyncDataWriter_3write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncDataWriter_write, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__531)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1712, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(9, 1713, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(9, 1712, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncDataWriter);
 
-  /* "src/lxml/serializer.pxi":1716
+  /* "src/lxml/serializer.pxi":1715
  *         self._data.append(data)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
  *         pass
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16_AsyncDataWriter_5close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncDataWriter_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__533)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1716, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_16_AsyncDataWriter_5close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncDataWriter_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__533)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1715, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter->tp_dict, __pyx_n_s_close, __pyx_t_1) < 0) __PYX_ERR(9, 1716, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter->tp_dict, __pyx_n_s_close, __pyx_t_1) < 0) __PYX_ERR(9, 1715, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncDataWriter);
 
-  /* "src/lxml/serializer.pxi":1745
+  /* "src/lxml/serializer.pxi":1744
  *         return None
  * 
  *     async def flush(self):             # <<<<<<<<<<<<<<
  *         self._writer.flush()
  *         data = self._buffer.collect()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_3flush, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_flus, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__84)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1745, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_3flush, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_flus, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__84)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1744, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_flush, __pyx_t_1) < 0) __PYX_ERR(9, 1745, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_flush, __pyx_t_1) < 0) __PYX_ERR(9, 1744, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1751
+  /* "src/lxml/serializer.pxi":1750
  *             await self._async_outfile.write(data)
  * 
  *     async def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
  *         self._writer.write_declaration(version, standalone, doctype)
  *         data = self._flush()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_6write_declaration, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_writ, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1751, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_6write_declaration, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_writ, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1750, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write_declaration, __pyx_t_1) < 0) __PYX_ERR(9, 1751, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write_declaration, __pyx_t_1) < 0) __PYX_ERR(9, 1750, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1757
+  /* "src/lxml/serializer.pxi":1756
  *             await self._async_outfile.write(data)
  * 
  *     async def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
  *         self._writer.write_doctype(doctype)
  *         data = self._flush()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_9write_doctype, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_writ_2, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__86)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1757, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_9write_doctype, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_writ_2, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__86)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1756, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write_doctype, __pyx_t_1) < 0) __PYX_ERR(9, 1757, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write_doctype, __pyx_t_1) < 0) __PYX_ERR(9, 1756, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1763
+  /* "src/lxml/serializer.pxi":1762
  *             await self._async_outfile.write(data)
  * 
  *     async def write(self, *args, with_tail=True, pretty_print=False, method=None):             # <<<<<<<<<<<<<<
  *         self._writer.write(*args, with_tail=with_tail, pretty_print=pretty_print, method=method)
  *         data = self._flush()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_12write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_writ_3, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1763, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_12write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_writ_3, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(9, 1763, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(9, 1762, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1769
+  /* "src/lxml/serializer.pxi":1768
  *             await self._async_outfile.write(data)
  * 
  *     def method(self, method):             # <<<<<<<<<<<<<<
  *         return self._writer.method(method)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_15method, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_meth, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__539)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1769, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_15method, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_meth, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__539)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1768, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_method, __pyx_t_1) < 0) __PYX_ERR(9, 1769, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_method, __pyx_t_1) < 0) __PYX_ERR(9, 1768, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1772
+  /* "src/lxml/serializer.pxi":1771
  *         return self._writer.method(method)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, method=None, **_extra):             # <<<<<<<<<<<<<<
  *         element_writer = self._writer.element(tag, attrib, nsmap, method, **_extra)
  *         return _AsyncFileWriterElement(element_writer, self)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_17element, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_elem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__541)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1772, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_17element, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter_elem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__541)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1771, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_element, __pyx_t_1) < 0) __PYX_ERR(9, 1772, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_element, __pyx_t_1) < 0) __PYX_ERR(9, 1771, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1776
+  /* "src/lxml/serializer.pxi":1775
  *         return _AsyncFileWriterElement(element_writer, self)
  * 
  *     async def _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
  *         self._writer._close(raise_on_error)
  *         data = self._buffer.collect()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_19_close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter__clo, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__88)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1776, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27_AsyncIncrementalFileWriter_19_close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncIncrementalFileWriter__clo, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__88)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1775, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_close_2, __pyx_t_1) < 0) __PYX_ERR(9, 1776, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_close_2, __pyx_t_1) < 0) __PYX_ERR(9, 1775, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
-  /* "src/lxml/serializer.pxi":1796
+  /* "src/lxml/serializer.pxi":1795
  *         self._writer = writer
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
  *         self._element_writer.__enter__()
  *         data = self._writer._flush()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AsyncFileWriterElement_3__aenter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncFileWriterElement___aenter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1796, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AsyncFileWriterElement_3__aenter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncFileWriterElement___aenter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement->tp_dict, __pyx_n_s_aenter, __pyx_t_1) < 0) __PYX_ERR(9, 1796, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement->tp_dict, __pyx_n_s_aenter, __pyx_t_1) < 0) __PYX_ERR(9, 1795, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncFileWriterElement);
 
-  /* "src/lxml/serializer.pxi":1802
+  /* "src/lxml/serializer.pxi":1801
  *             await self._writer._async_outfile.write(data)
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
  *         self._element_writer.__exit__(*args)
  *         data = self._writer._flush()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AsyncFileWriterElement_6__aexit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncFileWriterElement___aexit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__90)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1802, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AsyncFileWriterElement_6__aexit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AsyncFileWriterElement___aexit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__90)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement->tp_dict, __pyx_n_s_aexit, __pyx_t_1) < 0) __PYX_ERR(9, 1802, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement->tp_dict, __pyx_n_s_aexit, __pyx_t_1) < 0) __PYX_ERR(9, 1801, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncFileWriterElement);
 
-  /* "src/lxml/serializer.pxi":1824
+  /* "src/lxml/serializer.pxi":1823
  *         self._old_method = writer._method
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
  *         self._writer._method = self._new_method
  *         self._writer._write_start_element(self._element)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_FileWriterElement_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FileWriterElement___enter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__546)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1824, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_FileWriterElement_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FileWriterElement___enter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__546)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1823, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement->tp_dict, __pyx_n_s_enter, __pyx_t_1) < 0) __PYX_ERR(9, 1824, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement->tp_dict, __pyx_n_s_enter, __pyx_t_1) < 0) __PYX_ERR(9, 1823, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__FileWriterElement);
 
-  /* "src/lxml/serializer.pxi":1828
+  /* "src/lxml/serializer.pxi":1827
  *         self._writer._write_start_element(self._element)
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         self._writer._write_end_element(self._element)
  *         self._writer._method = self._old_method
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_FileWriterElement_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FileWriterElement___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__548)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1828, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_FileWriterElement_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FileWriterElement___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__548)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1827, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(9, 1828, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(9, 1827, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__FileWriterElement);
 
-  /* "src/lxml/serializer.pxi":1850
+  /* "src/lxml/serializer.pxi":1849
  *         self._exited = False
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
  *         if self._entered:
  *             raise LxmlSyntaxError("Inconsistent enter action in context manager")
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___enter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__550)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1850, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___enter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__550)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1849, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_enter, __pyx_t_1) < 0) __PYX_ERR(9, 1850, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_enter, __pyx_t_1) < 0) __PYX_ERR(9, 1849, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
-  /* "src/lxml/serializer.pxi":1856
+  /* "src/lxml/serializer.pxi":1855
  *         self._entered = True
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
  *         if self._exited:
  *             raise LxmlSyntaxError("Inconsistent exit action in context manager")
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__552)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1856, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__552)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(9, 1856, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(9, 1855, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
-  /* "src/lxml/serializer.pxi":1864
+  /* "src/lxml/serializer.pxi":1863
  *         self._exited = True
  * 
  *     async def __aenter__(self):             # <<<<<<<<<<<<<<
  *         # for your async convenience
  *         return self.__enter__()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_7__aenter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___aenter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1864, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_7__aenter__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___aenter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_aenter, __pyx_t_1) < 0) __PYX_ERR(9, 1864, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_aenter, __pyx_t_1) < 0) __PYX_ERR(9, 1863, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
-  /* "src/lxml/serializer.pxi":1868
+  /* "src/lxml/serializer.pxi":1867
  *         return self.__enter__()
  * 
  *     async def __aexit__(self, *args):             # <<<<<<<<<<<<<<
  *         # for your async convenience
  *         return self.__exit__(*args)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_10__aexit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___aexit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__92)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1868, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_MethodChanger_10__aexit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MethodChanger___aexit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__92)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 1867, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_aexit, __pyx_t_1) < 0) __PYX_ERR(9, 1868, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_aexit, __pyx_t_1) < 0) __PYX_ERR(9, 1867, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
@@ -259059,55 +259182,55 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__DTDElementDecl);
 
-  /* "src/lxml/dtd.pxi":320
+  /* "src/lxml/dtd.pxi":325
  *        return funicodeOrNone(self._c_dtd.SystemID)
  * 
  *     def iterelements(self):             # <<<<<<<<<<<<<<
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_3iterelements, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_iterelements, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__105)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 320, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_3iterelements, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_iterelements, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__105)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 325, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_iterelements, __pyx_t_15) < 0) __PYX_ERR(20, 320, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_iterelements, __pyx_t_15) < 0) __PYX_ERR(20, 325, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_DTD);
 
-  /* "src/lxml/dtd.pxi":330
+  /* "src/lxml/dtd.pxi":335
  *             c_node = c_node.next
  * 
  *     def elements(self):             # <<<<<<<<<<<<<<
  *         return list(self.iterelements())
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_6elements, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_elements, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__670)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 330, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_6elements, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_elements, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__670)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_elements, __pyx_t_15) < 0) __PYX_ERR(20, 330, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_elements, __pyx_t_15) < 0) __PYX_ERR(20, 335, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_DTD);
 
-  /* "src/lxml/dtd.pxi":333
+  /* "src/lxml/dtd.pxi":338
  *         return list(self.iterelements())
  * 
  *     def iterentities(self):             # <<<<<<<<<<<<<<
  *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
  *         while c_node is not NULL:
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_8iterentities, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_iterentities, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__106)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 333, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_8iterentities, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_iterentities, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__106)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_iterentities, __pyx_t_15) < 0) __PYX_ERR(20, 333, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_iterentities, __pyx_t_15) < 0) __PYX_ERR(20, 338, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_DTD);
 
-  /* "src/lxml/dtd.pxi":343
+  /* "src/lxml/dtd.pxi":348
  *             c_node = c_node.next
  * 
  *     def entities(self):             # <<<<<<<<<<<<<<
  *         return list(self.iterentities())
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_11entities, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_entities, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__673)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 343, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3DTD_11entities, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DTD_entities, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__673)); if (unlikely(!__pyx_t_15)) __PYX_ERR(20, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_entities, __pyx_t_15) < 0) __PYX_ERR(20, 343, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DTD->tp_dict, __pyx_n_s_entities, __pyx_t_15) < 0) __PYX_ERR(20, 348, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_DTD);
 
@@ -260794,7 +260917,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -262168,7 +262291,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
         result = PyFrozenSet_New(it);
         if (unlikely(!result))
             return NULL;
-        if (likely(PySet_GET_SIZE(result)))
+        if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result)))
             return result;
         Py_DECREF(result);
 #endif
@@ -264191,6 +264314,7 @@ static int __Pyx_Coroutine_clear(PyObject *self) {
     }
 #endif
     Py_CLEAR(gen->gi_code);
+    Py_CLEAR(gen->gi_frame);
     Py_CLEAR(gen->gi_name);
     Py_CLEAR(gen->gi_qualname);
     Py_CLEAR(gen->gi_modulename);
@@ -264207,7 +264331,7 @@ static void __Pyx_Coroutine_dealloc(PyObject *self) {
         if (PyObject_CallFinalizerFromDealloc(self))
 #else
         Py_TYPE(gen)->tp_del(self);
-        if (self->ob_refcnt > 0)
+        if (Py_REFCNT(self) > 0)
 #endif
         {
             return;
@@ -264301,17 +264425,17 @@ static void __Pyx_Coroutine_del(PyObject *self) {
     }
     __Pyx_ErrRestore(error_type, error_value, error_traceback);
 #if !CYTHON_USE_TP_FINALIZE
-    assert(self->ob_refcnt > 0);
+    assert(Py_REFCNT(self) > 0);
     if (--self->ob_refcnt == 0) {
         return;
     }
     {
-        Py_ssize_t refcnt = self->ob_refcnt;
+        Py_ssize_t refcnt = Py_REFCNT(self);
         _Py_NewReference(self);
         __Pyx_SET_REFCNT(self, refcnt);
     }
 #if CYTHON_COMPILING_IN_CPYTHON
-    assert(PyType_IS_GC(self->ob_type) &&
+    assert(PyType_IS_GC(Py_TYPE(self)) &&
            _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
     _Py_DEC_REFTOTAL;
 #endif
@@ -264377,6 +264501,27 @@ __Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHO
     Py_XDECREF(tmp);
     return 0;
 }
+static PyObject *
+__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
+{
+    PyObject *frame = self->gi_frame;
+    if (!frame) {
+        if (unlikely(!self->gi_code)) {
+            Py_RETURN_NONE;
+        }
+        frame = (PyObject *) PyFrame_New(
+            PyThreadState_Get(),            /*PyThreadState *tstate,*/
+            (PyCodeObject*) self->gi_code,  /*PyCodeObject *code,*/
+            __pyx_d,                 /*PyObject *globals,*/
+            0                               /*PyObject *locals*/
+        );
+        if (unlikely(!frame))
+            return NULL;
+        self->gi_frame = frame;
+    }
+    Py_INCREF(frame);
+    return frame;
+}
 static __pyx_CoroutineObject *__Pyx__Coroutine_New(
             PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
             PyObject *name, PyObject *qualname, PyObject *module_name) {
@@ -264410,6 +264555,7 @@ static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
     gen->gi_modulename = module_name;
     Py_XINCREF(code);
     gen->gi_code = code;
+    gen->gi_frame = NULL;
     PyObject_GC_Track(gen);
     return gen;
 }
@@ -264573,6 +264719,8 @@ static PyGetSetDef __pyx_Generator_getsets[] = {
      (char*) PyDoc_STR("name of the generator"), 0},
     {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
      (char*) PyDoc_STR("qualified name of the generator"), 0},
+    {(char *) "gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
+     (char*) PyDoc_STR("Frame of the generator"), 0},
     {0, 0, 0, 0, 0}
 };
 static PyTypeObject __pyx_GeneratorType_type = {
@@ -265025,7 +265173,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
@@ -265522,11 +265671,6 @@ static PyObject *__Pyx_Coroutine_await(PyObject *coroutine) {
     return __Pyx__Coroutine_await(coroutine);
 }
 #endif
-static PyObject *
-__Pyx_Coroutine_get_frame(CYTHON_UNUSED __pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
-{
-    Py_RETURN_NONE;
-}
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 && PY_VERSION_HEX < 0x030500B1
 static PyObject *__Pyx_Coroutine_compare(PyObject *obj, PyObject *other, int op) {
     PyObject* result;
@@ -267005,6 +267149,44 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_xmlParserErrors(xmlParserErrors
     }
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#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
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
@@ -267201,44 +267383,6 @@ raise_neg_overflow:
     return (size_t) -1;
 }
 
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wconversion"
-#endif
-    const long neg_one = (long) -1, const_zero = (long) 0;
-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
-#pragma GCC diagnostic pop
-#endif
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(long) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(long) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#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
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(long),
-                                     little, !is_unsigned);
-    }
-}
-
 /* CIntFromPy */
 static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
index 21509d0f61b4c259f8ae45338efdd4d8e210a6c4..b332881a153a59946943781f9a2be7ff8bfcc8c0 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 #ifndef __PYX_HAVE__lxml__etree
 #define __PYX_HAVE__lxml__etree
index d837e8645bda7e8ef9b0f0cc0e3687e3c4f97500..604ad115a571d438d3c45f2ee000f8a8107a8f33 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 #ifndef __PYX_HAVE_API__lxml__etree
 #define __PYX_HAVE_API__lxml__etree
index cceb9bcf3e01b421c294244f6516a7a11073aff1..10097192038a5bd2e19812e65c1f245f70c9fd98 100644 (file)
@@ -1,40 +1,39 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "/usr/include/libxml2", 
-            "src", 
+            "/usr/include/libxml2",
+            "src",
             "src/lxml/includes"
-        ], 
-        "name": "lxml.html.clean", 
+        ],
+        "name": "lxml.html.clean",
         "sources": [
             "src/lxml/html/clean.py"
         ]
-    }, 
+    },
     "module_name": "lxml.html.clean"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -452,8 +451,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -462,7 +465,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -11613,8 +11620,8 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_7;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -11731,11 +11738,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   __pyx_t_4 = PyNumber_Add(__pyx_t_5, __pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 693, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_v_kw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 693, __pyx_L1_error)
+  __pyx_t_5 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 693, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
   /* "lxml/html/clean.py":694
  *         doc = copy.deepcopy(html)
@@ -11745,55 +11755,55 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
  * autolink_html.__doc__ = autolink.__doc__
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_1 = NULL;
-  __pyx_t_6 = 0;
-  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
-    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
-    if (likely(__pyx_t_1)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-      __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_4 = NULL;
+  __pyx_t_7 = 0;
+  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);
+      __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_4, function);
-      __pyx_t_6 = 1;
+      __Pyx_DECREF_SET(__pyx_t_5, function);
+      __pyx_t_7 = 1;
     }
   }
   #if CYTHON_FAST_PYCALL
-  if (PyFunction_Check(__pyx_t_4)) {
-    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
-    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error)
-    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_GOTREF(__pyx_t_5);
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
+    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_6);
   } else
   #endif
   #if CYTHON_FAST_PYCCALL
-  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
-    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
-    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error)
-    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_GOTREF(__pyx_t_5);
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
+    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_6);
   } else
   #endif
   {
-    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 694, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_7);
-    if (__pyx_t_1) {
-      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __pyx_t_1 = NULL;
+    __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    if (__pyx_t_4) {
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
     }
     __Pyx_INCREF(((PyObject *)__pyx_v_result_type));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_result_type));
-    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_result_type));
+    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_7, ((PyObject *)__pyx_v_result_type));
     __Pyx_INCREF(__pyx_v_doc);
     __Pyx_GIVEREF(__pyx_v_doc);
-    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_doc);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_7, __pyx_v_doc);
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = __pyx_t_6;
+  __pyx_t_6 = 0;
   goto __pyx_L0;
 
   /* "lxml/html/clean.py":687
@@ -11809,7 +11819,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("lxml.html.clean.autolink_html", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -12665,8 +12675,8 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -12726,11 +12736,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 749, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_v_kw); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 749, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 749, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 749, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "lxml/html/clean.py":750
  *     doc = fromstring(html)
@@ -12740,55 +12753,55 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
  * def _break_text(text, max_width, break_character):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 750, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = NULL;
-  __pyx_t_4 = 0;
-  if (CYTHON_UNPACK_METHODS && unlikely(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);
-      __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  __pyx_t_5 = 0;
+  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);
+      __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_3, function);
-      __pyx_t_4 = 1;
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+      __pyx_t_5 = 1;
     }
   }
   #if CYTHON_FAST_PYCALL
-  if (PyFunction_Check(__pyx_t_3)) {
-    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
-    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_GOTREF(__pyx_t_2);
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
+    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_1, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
-    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_GOTREF(__pyx_t_2);
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
+    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_4);
   } else
   #endif
   {
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 750, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    if (__pyx_t_1) {
-      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
+    __pyx_t_1 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    if (__pyx_t_3) {
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;
     }
     __Pyx_INCREF(((PyObject *)__pyx_v_result_type));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_result_type));
-    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_result_type));
+    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_5, ((PyObject *)__pyx_v_result_type));
     __Pyx_INCREF(__pyx_v_doc);
     __Pyx_GIVEREF(__pyx_v_doc);
-    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_doc);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_5, __pyx_v_doc);
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
   /* "lxml/html/clean.py":746
@@ -12804,7 +12817,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.html.clean.word_break_html", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -14704,11 +14717,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -17214,7 +17225,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -18320,7 +18331,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
         result = PyFrozenSet_New(it);
         if (unlikely(!result))
             return NULL;
-        if (likely(PySet_GET_SIZE(result)))
+        if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result)))
             return result;
         Py_DECREF(result);
 #endif
@@ -19009,7 +19020,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
index af74e462e857aee7554bbd4a0967a949db2da951..e9e814ed13f0b4842ac91fa2492b3d9ad789cc29 100644 (file)
@@ -1,40 +1,39 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "/usr/include/libxml2", 
-            "src", 
+            "/usr/include/libxml2",
+            "src",
             "src/lxml/includes"
-        ], 
-        "name": "lxml.html.diff", 
+        ],
+        "name": "lxml.html.diff",
         "sources": [
             "src/lxml/html/diff.py"
         ]
-    }, 
+    },
     "module_name": "lxml.html.diff"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -452,8 +451,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -462,7 +465,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -1651,6 +1658,7 @@ typedef struct {
     PyObject *gi_qualname;
     PyObject *gi_modulename;
     PyObject *gi_code;
+    PyObject *gi_frame;
     int resume_label;
     char is_running;
 } __pyx_CoroutineObject;
@@ -19856,11 +19864,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -21929,7 +21935,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -24498,7 +24504,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
@@ -26222,6 +26229,7 @@ static int __Pyx_Coroutine_clear(PyObject *self) {
     }
 #endif
     Py_CLEAR(gen->gi_code);
+    Py_CLEAR(gen->gi_frame);
     Py_CLEAR(gen->gi_name);
     Py_CLEAR(gen->gi_qualname);
     Py_CLEAR(gen->gi_modulename);
@@ -26238,7 +26246,7 @@ static void __Pyx_Coroutine_dealloc(PyObject *self) {
         if (PyObject_CallFinalizerFromDealloc(self))
 #else
         Py_TYPE(gen)->tp_del(self);
-        if (self->ob_refcnt > 0)
+        if (Py_REFCNT(self) > 0)
 #endif
         {
             return;
@@ -26332,17 +26340,17 @@ static void __Pyx_Coroutine_del(PyObject *self) {
     }
     __Pyx_ErrRestore(error_type, error_value, error_traceback);
 #if !CYTHON_USE_TP_FINALIZE
-    assert(self->ob_refcnt > 0);
+    assert(Py_REFCNT(self) > 0);
     if (--self->ob_refcnt == 0) {
         return;
     }
     {
-        Py_ssize_t refcnt = self->ob_refcnt;
+        Py_ssize_t refcnt = Py_REFCNT(self);
         _Py_NewReference(self);
         __Pyx_SET_REFCNT(self, refcnt);
     }
 #if CYTHON_COMPILING_IN_CPYTHON
-    assert(PyType_IS_GC(self->ob_type) &&
+    assert(PyType_IS_GC(Py_TYPE(self)) &&
            _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
     _Py_DEC_REFTOTAL;
 #endif
@@ -26408,6 +26416,27 @@ __Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHO
     Py_XDECREF(tmp);
     return 0;
 }
+static PyObject *
+__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
+{
+    PyObject *frame = self->gi_frame;
+    if (!frame) {
+        if (unlikely(!self->gi_code)) {
+            Py_RETURN_NONE;
+        }
+        frame = (PyObject *) PyFrame_New(
+            PyThreadState_Get(),            /*PyThreadState *tstate,*/
+            (PyCodeObject*) self->gi_code,  /*PyCodeObject *code,*/
+            __pyx_d,                 /*PyObject *globals,*/
+            0                               /*PyObject *locals*/
+        );
+        if (unlikely(!frame))
+            return NULL;
+        self->gi_frame = frame;
+    }
+    Py_INCREF(frame);
+    return frame;
+}
 static __pyx_CoroutineObject *__Pyx__Coroutine_New(
             PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
             PyObject *name, PyObject *qualname, PyObject *module_name) {
@@ -26441,6 +26470,7 @@ static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
     gen->gi_modulename = module_name;
     Py_XINCREF(code);
     gen->gi_code = code;
+    gen->gi_frame = NULL;
     PyObject_GC_Track(gen);
     return gen;
 }
@@ -26564,6 +26594,8 @@ static PyGetSetDef __pyx_Generator_getsets[] = {
      (char*) PyDoc_STR("name of the generator"), 0},
     {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
      (char*) PyDoc_STR("qualified name of the generator"), 0},
+    {(char *) "gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
+     (char*) PyDoc_STR("Frame of the generator"), 0},
     {0, 0, 0, 0, 0}
 };
 static PyTypeObject __pyx_GeneratorType_type = {
index e76907dc833f8de1789f04db653564c75c4ddfcf..7259432a9b9aab77a062384c81cfb8bd4edf1871 100644 (file)
@@ -1,3 +1,3 @@
 #ifndef LXML_VERSION_STRING
-#define LXML_VERSION_STRING "4.6.3"
+#define LXML_VERSION_STRING "4.6.4"
 #endif
index 21509d0f61b4c259f8ae45338efdd4d8e210a6c4..b332881a153a59946943781f9a2be7ff8bfcc8c0 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 #ifndef __PYX_HAVE__lxml__etree
 #define __PYX_HAVE__lxml__etree
index 3edaec5db4f60be148c7e4710d1466ecb90e37ea..1b80b8a26fb70d61d34abfeb8f41718d1a7f9b17 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 #ifndef __PYX_HAVE_API__lxml__etree
 #define __PYX_HAVE_API__lxml__etree
index d00f5ad0b0e11f31be4757266246b29f249c111d..e32a5a4258959d168a50b2b360c54cf9836804f1 100644 (file)
@@ -1,82 +1,81 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
+        ],
         "depends": [
-            "/usr/include/libxml2/libxml/HTMLtree.h", 
-            "/usr/include/libxml2/libxml/chvalid.h", 
-            "/usr/include/libxml2/libxml/encoding.h", 
-            "/usr/include/libxml2/libxml/globals.h", 
-            "/usr/include/libxml2/libxml/hash.h", 
-            "/usr/include/libxml2/libxml/tree.h", 
-            "/usr/include/libxml2/libxml/uri.h", 
-            "/usr/include/libxml2/libxml/valid.h", 
-            "/usr/include/libxml2/libxml/xmlIO.h", 
-            "/usr/include/libxml2/libxml/xmlmemory.h", 
-            "/usr/include/libxml2/libxml/xmlsave.h", 
-            "/usr/include/libxml2/libxml/xmlstring.h", 
-            "/usr/include/libxml2/libxml/xmlversion.h", 
-            "src/lxml/includes/__init__.pxd", 
-            "src/lxml/includes/c14n.pxd", 
-            "src/lxml/includes/config.pxd", 
-            "src/lxml/includes/dtdvalid.pxd", 
-            "src/lxml/includes/etree_defs.h", 
-            "src/lxml/includes/etreepublic.pxd", 
-            "src/lxml/includes/htmlparser.pxd", 
-            "src/lxml/includes/lxml-version.h", 
-            "src/lxml/includes/relaxng.pxd", 
-            "src/lxml/includes/schematron.pxd", 
-            "src/lxml/includes/tree.pxd", 
-            "src/lxml/includes/uri.pxd", 
-            "src/lxml/includes/xinclude.pxd", 
-            "src/lxml/includes/xmlerror.pxd", 
-            "src/lxml/includes/xmlparser.pxd", 
-            "src/lxml/includes/xmlschema.pxd", 
-            "src/lxml/includes/xpath.pxd", 
-            "src/lxml/includes/xslt.pxd", 
+            "/usr/include/libxml2/libxml/HTMLtree.h",
+            "/usr/include/libxml2/libxml/chvalid.h",
+            "/usr/include/libxml2/libxml/encoding.h",
+            "/usr/include/libxml2/libxml/globals.h",
+            "/usr/include/libxml2/libxml/hash.h",
+            "/usr/include/libxml2/libxml/tree.h",
+            "/usr/include/libxml2/libxml/uri.h",
+            "/usr/include/libxml2/libxml/valid.h",
+            "/usr/include/libxml2/libxml/xmlIO.h",
+            "/usr/include/libxml2/libxml/xmlmemory.h",
+            "/usr/include/libxml2/libxml/xmlsave.h",
+            "/usr/include/libxml2/libxml/xmlstring.h",
+            "/usr/include/libxml2/libxml/xmlversion.h",
+            "src/lxml/includes/__init__.pxd",
+            "src/lxml/includes/c14n.pxd",
+            "src/lxml/includes/config.pxd",
+            "src/lxml/includes/dtdvalid.pxd",
+            "src/lxml/includes/etree_defs.h",
+            "src/lxml/includes/etreepublic.pxd",
+            "src/lxml/includes/htmlparser.pxd",
+            "src/lxml/includes/lxml-version.h",
+            "src/lxml/includes/relaxng.pxd",
+            "src/lxml/includes/schematron.pxd",
+            "src/lxml/includes/tree.pxd",
+            "src/lxml/includes/uri.pxd",
+            "src/lxml/includes/xinclude.pxd",
+            "src/lxml/includes/xmlerror.pxd",
+            "src/lxml/includes/xmlparser.pxd",
+            "src/lxml/includes/xmlschema.pxd",
+            "src/lxml/includes/xpath.pxd",
+            "src/lxml/includes/xslt.pxd",
             "src/lxml/objectpath.pxi"
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "src/lxml/includes", 
-            "/usr/include/libxml2", 
+            "src/lxml/includes",
+            "/usr/include/libxml2",
             "src"
-        ], 
+        ],
         "libraries": [
-            "xslt", 
-            "exslt", 
-            "xml2", 
-            "rt", 
-            "z", 
+            "xslt",
+            "exslt",
+            "xml2",
+            "rt",
+            "z",
             "m"
-        ], 
-        "name": "lxml.objectify", 
+        ],
+        "name": "lxml.objectify",
         "sources": [
             "src/lxml/objectify.pyx"
         ]
-    }, 
+    },
     "module_name": "lxml.objectify"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -494,8 +493,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -504,7 +507,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -962,12 +969,12 @@ struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement {
 };
 
 
-/* "lxml/objectify.pyx":612
- *         cetree.setNodeText(self._c_node, s)
+/* "lxml/objectify.pyx":613
+ * 
  * 
  * cdef class NumberElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
  *     cdef object _parse_value
- *     def _setValueParser(self, function):
+ * 
  */
 struct __pyx_obj_4lxml_9objectify_NumberElement {
   struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement __pyx_base;
@@ -975,8 +982,8 @@ struct __pyx_obj_4lxml_9objectify_NumberElement {
 };
 
 
-/* "lxml/objectify.pyx":709
- *         return _numericValueOf(self) ^ _numericValueOf(other)
+/* "lxml/objectify.pyx":763
+ * 
  * 
  * cdef class IntElement(NumberElement):             # <<<<<<<<<<<<<<
  *     def _init(self):
@@ -987,8 +994,8 @@ struct __pyx_obj_4lxml_9objectify_IntElement {
 };
 
 
-/* "lxml/objectify.pyx":716
- *         return int(_parseNumber(self))
+/* "lxml/objectify.pyx":771
+ * 
  * 
  * cdef class LongElement(NumberElement):             # <<<<<<<<<<<<<<
  *     def _init(self):
@@ -999,8 +1006,8 @@ struct __pyx_obj_4lxml_9objectify_LongElement {
 };
 
 
-/* "lxml/objectify.pyx":723
- *         return int(_parseNumber(self))
+/* "lxml/objectify.pyx":779
+ * 
  * 
  * cdef class FloatElement(NumberElement):             # <<<<<<<<<<<<<<
  *     def _init(self):
@@ -1011,8 +1018,8 @@ struct __pyx_obj_4lxml_9objectify_FloatElement {
 };
 
 
-/* "lxml/objectify.pyx":727
- *         self._parse_value = float
+/* "lxml/objectify.pyx":784
+ * 
  * 
  * cdef class StringElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
  *     u"""String data class.
@@ -1023,8 +1030,8 @@ struct __pyx_obj_4lxml_9objectify_StringElement {
 };
 
 
-/* "lxml/objectify.pyx":789
- *         return complex(textOf(self._c_node))
+/* "lxml/objectify.pyx":851
+ * 
  * 
  * cdef class NoneElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
  *     def __str__(self):
@@ -1035,7 +1042,7 @@ struct __pyx_obj_4lxml_9objectify_NoneElement {
 };
 
 
-/* "lxml/objectify.pyx":815
+/* "lxml/objectify.pyx":877
  * 
  * 
  * cdef class BoolElement(IntElement):             # <<<<<<<<<<<<<<
@@ -1047,7 +1054,7 @@ struct __pyx_obj_4lxml_9objectify_BoolElement {
 };
 
 
-/* "lxml/objectify.pyx":901
+/* "lxml/objectify.pyx":976
  * # Python type registry
  * 
  * cdef class PyType:             # <<<<<<<<<<<<<<
@@ -1064,7 +1071,7 @@ struct __pyx_obj_4lxml_9objectify_PyType {
 };
 
 
-/* "lxml/objectify.pyx":1131
+/* "lxml/objectify.pyx":1206
  * @cython.final
  * @cython.internal
  * cdef class _ObjectifyElementMakerCaller:             # <<<<<<<<<<<<<<
@@ -1080,7 +1087,7 @@ struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller {
 };
 
 
-/* "lxml/objectify.pyx":1221
+/* "lxml/objectify.pyx":1296
  *         cetree.setNodeText(elem._c_node, text)
  * 
  * cdef class ElementMaker:             # <<<<<<<<<<<<<<
@@ -1098,7 +1105,7 @@ struct __pyx_obj_4lxml_9objectify_ElementMaker {
 };
 
 
-/* "lxml/objectify.pyx":1377
+/* "lxml/objectify.pyx":1452
  * # Element class lookup
  * 
  * cdef class ObjectifyElementClassLookup(ElementClassLookup):             # <<<<<<<<<<<<<<
@@ -1130,7 +1137,7 @@ struct __pyx_obj_4lxml_9objectify_ObjectPath {
 
 
 
-/* "lxml/objectify.pyx":1221
+/* "lxml/objectify.pyx":1296
  *         cetree.setNodeText(elem._c_node, text)
  * 
  * cdef class ElementMaker:             # <<<<<<<<<<<<<<
@@ -1624,7 +1631,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *
 
 /* CallableCheck.proto */
 #if CYTHON_USE_TYPE_SLOTS && PY_MAJOR_VERSION >= 3
-#define __Pyx_PyCallable_Check(obj)   ((obj)->ob_type->tp_call != NULL)
+#define __Pyx_PyCallable_Check(obj)   (Py_TYPE(obj)->tp_call != NULL)
 #else
 #define __Pyx_PyCallable_Check(obj)   PyCallable_Check(obj)
 #endif
@@ -2030,6 +2037,7 @@ static PyObject *__pyx_builtin_IndexError;
 static PyObject *__pyx_builtin_AttributeError;
 static PyObject *__pyx_builtin_oct;
 static PyObject *__pyx_builtin_hex;
+static PyObject *__pyx_builtin_NotImplemented;
 static PyObject *__pyx_builtin_enumerate;
 static PyObject *__pyx_builtin_map;
 static PyObject *__pyx_builtin_MemoryError;
@@ -2074,6 +2082,7 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_map[] = "map";
   static const char __pyx_k_obj[] = "obj";
   static const char __pyx_k_oct[] = "oct";
+  static const char __pyx_k_ror[] = "__ror__";
   static const char __pyx_k_s_2[] = "{%s}";
   static const char __pyx_k_s_3[] = "s";
   static const char __pyx_k_set[] = "__set__";
@@ -2101,8 +2110,16 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_none[] = "none";
   static const char __pyx_k_path[] = "path";
   static const char __pyx_k_py_2[] = "py";
+  static const char __pyx_k_radd[] = "__radd__";
+  static const char __pyx_k_rand[] = "__rand__";
+  static const char __pyx_k_rdiv[] = "__rdiv__";
   static const char __pyx_k_repr[] = "repr";
+  static const char __pyx_k_rmod[] = "__rmod__";
+  static const char __pyx_k_rmul[] = "__rmul__";
   static const char __pyx_k_root[] = "root";
+  static const char __pyx_k_rpow[] = "__rpow__";
+  static const char __pyx_k_rsub[] = "__rsub__";
+  static const char __pyx_k_rxor[] = "__rxor__";
   static const char __pyx_k_self[] = "self";
   static const char __pyx_k_tail[] = "tail";
   static const char __pyx_k_temp[] = "temp";
@@ -2120,6 +2137,7 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_known[] = "known";
   static const char __pyx_k_match[] = "match";
   static const char __pyx_k_nsmap[] = "nsmap";
+  static const char __pyx_k_other[] = "other";
   static const char __pyx_k_parse[] = "parse";
   static const char __pyx_k_pyval[] = "pyval";
   static const char __pyx_k_s_nil[] = "{%s}nil";
@@ -2143,6 +2161,7 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_encode[] = "encode";
   static const char __pyx_k_groups[] = "groups";
   static const char __pyx_k_import[] = "__import__";
+  static const char __pyx_k_modulo[] = "modulo";
   static const char __pyx_k_name_2[] = "__name__";
   static const char __pyx_k_object[] = "object";
   static const char __pyx_k_parser[] = "parser";
@@ -2172,7 +2191,10 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_hasattr[] = "hasattr";
   static const char __pyx_k_integer[] = "integer";
   static const char __pyx_k_py_type[] = "py_type";
+  static const char __pyx_k_rdivmod[] = "__rdivmod__";
   static const char __pyx_k_replace[] = "replace";
+  static const char __pyx_k_rlshift[] = "__rlshift__";
+  static const char __pyx_k_rrshift[] = "__rrshift__";
   static const char __pyx_k_setText[] = "_setText";
   static const char __pyx_k_setattr[] = "setattr";
   static const char __pyx_k_value_2[] = "_value";
@@ -2188,6 +2210,7 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_last_pos[] = "last_pos";
   static const char __pyx_k_pytype_2[] = "_pytype";
   static const char __pyx_k_register[] = "register";
+  static const char __pyx_k_rtruediv[] = "__rtruediv__";
   static const char __pyx_k_tostring[] = "tostring";
   static const char __pyx_k_TypeError[] = "TypeError";
   static const char __pyx_k_XMLParser[] = "XMLParser";
@@ -2198,6 +2221,7 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_getparent[] = "getparent";
   static const char __pyx_k_namespace[] = "namespace";
   static const char __pyx_k_parseBool[] = "__parseBool";
+  static const char __pyx_k_rfloordiv[] = "__rfloordiv__";
   static const char __pyx_k_stringify[] = "stringify";
   static const char __pyx_k_IndexError[] = "IndexError";
   static const char __pyx_k_IntElement[] = "IntElement";
@@ -2249,6 +2273,7 @@ static const char __pyx_k__9[] = "{";
   static const char __pyx_k_no_such_child[] = "no such child: ";
   static const char __pyx_k_unsignedShort[] = "unsignedShort";
   static const char __pyx_k_AttributeError[] = "AttributeError";
+  static const char __pyx_k_NotImplemented[] = "NotImplemented";
   static const char __pyx_k_lxml_objectify[] = "lxml.objectify";
   static const char __pyx_k_setValueParser[] = "_setValueParser";
   static const char __pyx_k_unicode_escape[] = "unicode-escape";
@@ -2281,27 +2306,42 @@ static const char __pyx_k_getRegisteredTypes[] = "getRegisteredTypes";
 static const char __pyx_k_nonNegativeInteger[] = "nonNegativeInteger";
 static const char __pyx_k_nonPositiveInteger[] = "nonPositiveInteger";
 static const char __pyx_k_set_default_parser[] = "set_default_parser";
+static const char __pyx_k_NumberElement___ror[] = "NumberElement.__ror__";
 static const char __pyx_k_unpickleElementTree[] = "__unpickleElementTree";
 static const char __pyx_k_ElementChildIterator[] = "ElementChildIterator";
+static const char __pyx_k_NumberElement___radd[] = "NumberElement.__radd__";
+static const char __pyx_k_NumberElement___rand[] = "NumberElement.__rand__";
+static const char __pyx_k_NumberElement___rdiv[] = "NumberElement.__rdiv__";
+static const char __pyx_k_NumberElement___rmod[] = "NumberElement.__rmod__";
+static const char __pyx_k_NumberElement___rmul[] = "NumberElement.__rmul__";
+static const char __pyx_k_NumberElement___rpow[] = "NumberElement.__rpow__";
+static const char __pyx_k_NumberElement___rsub[] = "NumberElement.__rsub__";
+static const char __pyx_k_NumberElement___rxor[] = "NumberElement.__rxor__";
+static const char __pyx_k_StringElement___radd[] = "StringElement.__radd__";
+static const char __pyx_k_StringElement___rmul[] = "StringElement.__rmul__";
 static const char __pyx_k_StringElement_strlen[] = "StringElement.strlen";
 static const char __pyx_k_enable_recursive_str[] = "enable_recursive_str";
 static const char __pyx_k_Invalid_boolean_value[] = "Invalid boolean value: '";
 static const char __pyx_k_ObjectifiedDataElement[] = "ObjectifiedDataElement";
 static const char __pyx_k_src_lxml_objectify_pyx[] = "src/lxml/objectify.pyx";
 static const char __pyx_k_NumberElement___complex[] = "NumberElement.__complex__";
+static const char __pyx_k_NumberElement___rdivmod[] = "NumberElement.__rdivmod__";
+static const char __pyx_k_NumberElement___rlshift[] = "NumberElement.__rlshift__";
+static const char __pyx_k_NumberElement___rrshift[] = "NumberElement.__rrshift__";
 static const char __pyx_k_StringElement___complex[] = "StringElement.__complex__";
 static const char __pyx_k_cannot_update_root_node[] = "cannot update root node";
 static const char __pyx_k_objects_is_not_writable[] = "' objects is not writable";
 static const char __pyx_k_pickleReduceElementTree[] = "pickleReduceElementTree";
 static const char __pyx_k_src_lxml_objectpath_pxi[] = "src/lxml/objectpath.pxi";
+static const char __pyx_k_NumberElement___rtruediv[] = "NumberElement.__rtruediv__";
 static const char __pyx_k_set_element_class_lookup[] = "set_element_class_lookup";
 static const char __pyx_k_set_pytype_attribute_tag[] = "set_pytype_attribute_tag";
 static const char __pyx_k_Cannot_register_tree_type[] = "Cannot register tree type";
+static const char __pyx_k_NumberElement___rfloordiv[] = "NumberElement.__rfloordiv__";
 static const char __pyx_k_index_must_be_enclosed_in[] = "index must be enclosed in []";
 static const char __pyx_k_to_extended_slice_of_size[] = " to extended slice of size ";
 static const char __pyx_k_ObjectifiedElement_addattr[] = "ObjectifiedElement.addattr";
 static const char __pyx_k_Type_name_must_be_a_string[] = "Type name must be a string";
-static const char __pyx_k_invalid_types_for_operator[] = "invalid types for * operator";
 static const char __pyx_k_ObjectifiedElement___reduce[] = "ObjectifiedElement.__reduce__";
 static const char __pyx_k_ObjectifyElementClassLookup[] = "ObjectifyElementClassLookup";
 static const char __pyx_k_NumberElement__setValueParser[] = "NumberElement._setValueParser";
@@ -2372,9 +2412,24 @@ static PyObject *__pyx_n_s_NoneElement;
 static PyObject *__pyx_n_u_NoneElement;
 static PyObject *__pyx_n_s_NoneType;
 static PyObject *__pyx_n_u_NoneType;
+static PyObject *__pyx_n_s_NotImplemented;
 static PyObject *__pyx_n_s_NumberElement;
 static PyObject *__pyx_n_u_NumberElement;
 static PyObject *__pyx_n_s_NumberElement___complex;
+static PyObject *__pyx_n_s_NumberElement___radd;
+static PyObject *__pyx_n_s_NumberElement___rand;
+static PyObject *__pyx_n_s_NumberElement___rdiv;
+static PyObject *__pyx_n_s_NumberElement___rdivmod;
+static PyObject *__pyx_n_s_NumberElement___rfloordiv;
+static PyObject *__pyx_n_s_NumberElement___rlshift;
+static PyObject *__pyx_n_s_NumberElement___rmod;
+static PyObject *__pyx_n_s_NumberElement___rmul;
+static PyObject *__pyx_n_s_NumberElement___ror;
+static PyObject *__pyx_n_s_NumberElement___rpow;
+static PyObject *__pyx_n_s_NumberElement___rrshift;
+static PyObject *__pyx_n_s_NumberElement___rsub;
+static PyObject *__pyx_n_s_NumberElement___rtruediv;
+static PyObject *__pyx_n_s_NumberElement___rxor;
 static PyObject *__pyx_n_s_NumberElement__setValueParser;
 static PyObject *__pyx_n_s_ObjectPath;
 static PyObject *__pyx_n_u_ObjectPath;
@@ -2403,6 +2458,8 @@ static PyObject *__pyx_n_s_PyType_unregister;
 static PyObject *__pyx_n_s_StringElement;
 static PyObject *__pyx_n_u_StringElement;
 static PyObject *__pyx_n_s_StringElement___complex;
+static PyObject *__pyx_n_s_StringElement___radd;
+static PyObject *__pyx_n_s_StringElement___rmul;
 static PyObject *__pyx_n_s_StringElement_strlen;
 static PyObject *__pyx_n_s_SubElement;
 static PyObject *__pyx_n_u_SubElement;
@@ -2525,7 +2582,6 @@ static PyObject *__pyx_n_u_int;
 static PyObject *__pyx_n_u_integer;
 static PyObject *__pyx_kp_u_invalid_number_of_arguments_need;
 static PyObject *__pyx_kp_u_invalid_path;
-static PyObject *__pyx_kp_u_invalid_types_for_operator;
 static PyObject *__pyx_n_s_item;
 static PyObject *__pyx_n_s_items;
 static PyObject *__pyx_n_s_iterchildren;
@@ -2543,6 +2599,7 @@ static PyObject *__pyx_n_s_makeparser;
 static PyObject *__pyx_n_u_makeparser;
 static PyObject *__pyx_n_s_map;
 static PyObject *__pyx_n_s_match;
+static PyObject *__pyx_n_s_modulo;
 static PyObject *__pyx_n_s_name;
 static PyObject *__pyx_n_s_name_2;
 static PyObject *__pyx_n_s_namespace;
@@ -2562,6 +2619,7 @@ static PyObject *__pyx_kp_u_objects_is_not_writable;
 static PyObject *__pyx_n_s_oct;
 static PyObject *__pyx_kp_u_of;
 static PyObject *__pyx_n_s_on;
+static PyObject *__pyx_n_s_other;
 static PyObject *__pyx_n_s_parse;
 static PyObject *__pyx_n_u_parse;
 static PyObject *__pyx_n_s_parseBool;
@@ -2585,6 +2643,10 @@ static PyObject *__pyx_n_u_pytypename;
 static PyObject *__pyx_n_s_pyval;
 static PyObject *__pyx_n_u_pyval;
 static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_radd;
+static PyObject *__pyx_n_s_rand;
+static PyObject *__pyx_n_s_rdiv;
+static PyObject *__pyx_n_s_rdivmod;
 static PyObject *__pyx_n_s_re;
 static PyObject *__pyx_n_s_reduce;
 static PyObject *__pyx_n_s_register;
@@ -2593,8 +2655,18 @@ static PyObject *__pyx_n_s_remove_blank_text;
 static PyObject *__pyx_n_s_replace;
 static PyObject *__pyx_n_s_repr;
 static PyObject *__pyx_n_s_result;
+static PyObject *__pyx_n_s_rfloordiv;
+static PyObject *__pyx_n_s_rlshift;
+static PyObject *__pyx_n_s_rmod;
+static PyObject *__pyx_n_s_rmul;
 static PyObject *__pyx_n_s_root;
 static PyObject *__pyx_kp_u_root_element_does_not_match_need;
+static PyObject *__pyx_n_s_ror;
+static PyObject *__pyx_n_s_rpow;
+static PyObject *__pyx_n_s_rrshift;
+static PyObject *__pyx_n_s_rsub;
+static PyObject *__pyx_n_s_rtruediv;
+static PyObject *__pyx_n_s_rxor;
 static PyObject *__pyx_kp_u_s;
 static PyObject *__pyx_kp_u_s_2;
 static PyObject *__pyx_n_s_s_3;
@@ -2703,24 +2775,40 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_16__hex__(struct __py
 static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_18__richcmp__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
 static Py_hash_t __pyx_pf_4lxml_9objectify_13NumberElement_20__hash__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_22__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__radd__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__rsub__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__rmul__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
 #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-#endif
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_40__abs__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
-static int __pyx_pf_4lxml_9objectify_13NumberElement_42__nonzero__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+#endif
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__rdiv__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_40__rtruediv__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_42__floordiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__rfloordiv__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rmod__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__divmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__rdivmod__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_56__rpow__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_58__neg__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_60__pos__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_62__abs__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
+static int __pyx_pf_4lxml_9objectify_13NumberElement_64__bool__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_66__invert__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_68__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_70__rlshift__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_72__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_74__rrshift__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_76__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_78__rand__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_80__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_82__ror__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_84__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_86__rxor__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_10IntElement__init(struct __pyx_obj_4lxml_9objectify_IntElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_10IntElement_2__index__(struct __pyx_obj_4lxml_9objectify_IntElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11LongElement__init(struct __pyx_obj_4lxml_9objectify_LongElement *__pyx_v_self); /* proto */
@@ -2729,30 +2817,34 @@ static PyObject *__pyx_pf_4lxml_9objectify_12FloatElement__init(struct __pyx_obj
 static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_5pyval___get__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_13StringElement___repr__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_2strlen(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
-static int __pyx_pf_4lxml_9objectify_13StringElement_4__nonzero__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
+static int __pyx_pf_4lxml_9objectify_13StringElement_4__bool__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_6__richcmp__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
 static Py_hash_t __pyx_pf_4lxml_9objectify_13StringElement_8__hash__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_10__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_14__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__int__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__radd__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_14__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__rmul__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__int__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 #if PY_MAJOR_VERSION < 3
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__long__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 #endif
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__float__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__complex__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_24__float__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_26__complex__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement___str__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_2__repr__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self); /* proto */
-static int __pyx_pf_4lxml_9objectify_11NoneElement_4__nonzero__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self); /* proto */
+static int __pyx_pf_4lxml_9objectify_11NoneElement_4__bool__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
 static Py_hash_t __pyx_pf_4lxml_9objectify_11NoneElement_8__hash__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_5pyval___get__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement__init(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
-static int __pyx_pf_4lxml_9objectify_11BoolElement_2__nonzero__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
-static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_6__hash__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_10__repr__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
+static int __pyx_pf_4lxml_9objectify_11BoolElement_2__bool__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__int__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_6__float__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__richcmp__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
+static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_10__hash__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_12__str__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_14__repr__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_5pyval___get__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_s); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_4__parseBool(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_s); /* proto */
@@ -2853,30 +2945,46 @@ static PyObject *__pyx_tuple__66;
 static PyObject *__pyx_tuple__68;
 static PyObject *__pyx_tuple__70;
 static PyObject *__pyx_tuple__72;
-static PyObject *__pyx_tuple__73;
-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__85;
-static PyObject *__pyx_tuple__87;
-static PyObject *__pyx_tuple__89;
+static PyObject *__pyx_tuple__74;
+static PyObject *__pyx_tuple__76;
+static PyObject *__pyx_tuple__78;
+static PyObject *__pyx_tuple__80;
+static PyObject *__pyx_tuple__82;
+static PyObject *__pyx_tuple__84;
+static PyObject *__pyx_tuple__86;
+static PyObject *__pyx_tuple__88;
 static PyObject *__pyx_tuple__90;
 static PyObject *__pyx_tuple__92;
 static PyObject *__pyx_tuple__94;
-static PyObject *__pyx_tuple__95;
-static PyObject *__pyx_tuple__97;
+static PyObject *__pyx_tuple__96;
 static PyObject *__pyx_tuple__98;
 static PyObject *__pyx_tuple__100;
-static PyObject *__pyx_tuple__101;
-static PyObject *__pyx_tuple__103;
+static PyObject *__pyx_tuple__102;
 static PyObject *__pyx_tuple__104;
-static PyObject *__pyx_tuple__106;
+static PyObject *__pyx_tuple__105;
 static PyObject *__pyx_tuple__107;
 static PyObject *__pyx_tuple__109;
 static PyObject *__pyx_tuple__111;
 static PyObject *__pyx_tuple__113;
+static PyObject *__pyx_tuple__115;
+static PyObject *__pyx_tuple__117;
+static PyObject *__pyx_tuple__119;
+static PyObject *__pyx_tuple__121;
+static PyObject *__pyx_tuple__122;
+static PyObject *__pyx_tuple__124;
+static PyObject *__pyx_tuple__126;
+static PyObject *__pyx_tuple__127;
+static PyObject *__pyx_tuple__129;
+static PyObject *__pyx_tuple__130;
+static PyObject *__pyx_tuple__132;
+static PyObject *__pyx_tuple__133;
+static PyObject *__pyx_tuple__135;
+static PyObject *__pyx_tuple__136;
+static PyObject *__pyx_tuple__138;
+static PyObject *__pyx_tuple__139;
+static PyObject *__pyx_tuple__141;
+static PyObject *__pyx_tuple__143;
+static PyObject *__pyx_tuple__145;
 static PyObject *__pyx_codeobj__26;
 static PyObject *__pyx_codeobj__29;
 static PyObject *__pyx_codeobj__31;
@@ -2900,23 +3008,39 @@ static PyObject *__pyx_codeobj__65;
 static PyObject *__pyx_codeobj__67;
 static PyObject *__pyx_codeobj__69;
 static PyObject *__pyx_codeobj__71;
-static PyObject *__pyx_codeobj__74;
-static PyObject *__pyx_codeobj__76;
-static PyObject *__pyx_codeobj__78;
-static PyObject *__pyx_codeobj__80;
-static PyObject *__pyx_codeobj__82;
-static PyObject *__pyx_codeobj__84;
-static PyObject *__pyx_codeobj__86;
-static PyObject *__pyx_codeobj__88;
+static PyObject *__pyx_codeobj__73;
+static PyObject *__pyx_codeobj__75;
+static PyObject *__pyx_codeobj__77;
+static PyObject *__pyx_codeobj__79;
+static PyObject *__pyx_codeobj__81;
+static PyObject *__pyx_codeobj__83;
+static PyObject *__pyx_codeobj__85;
+static PyObject *__pyx_codeobj__87;
+static PyObject *__pyx_codeobj__89;
 static PyObject *__pyx_codeobj__91;
 static PyObject *__pyx_codeobj__93;
-static PyObject *__pyx_codeobj__96;
+static PyObject *__pyx_codeobj__95;
+static PyObject *__pyx_codeobj__97;
 static PyObject *__pyx_codeobj__99;
-static PyObject *__pyx_codeobj__102;
-static PyObject *__pyx_codeobj__105;
+static PyObject *__pyx_codeobj__101;
+static PyObject *__pyx_codeobj__103;
+static PyObject *__pyx_codeobj__106;
 static PyObject *__pyx_codeobj__108;
 static PyObject *__pyx_codeobj__110;
 static PyObject *__pyx_codeobj__112;
+static PyObject *__pyx_codeobj__114;
+static PyObject *__pyx_codeobj__116;
+static PyObject *__pyx_codeobj__118;
+static PyObject *__pyx_codeobj__120;
+static PyObject *__pyx_codeobj__123;
+static PyObject *__pyx_codeobj__125;
+static PyObject *__pyx_codeobj__128;
+static PyObject *__pyx_codeobj__131;
+static PyObject *__pyx_codeobj__134;
+static PyObject *__pyx_codeobj__137;
+static PyObject *__pyx_codeobj__140;
+static PyObject *__pyx_codeobj__142;
+static PyObject *__pyx_codeobj__144;
 /* Late includes */
 
 /* "lxml/objectify.pyx":50
@@ -9687,7 +9811,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_22ObjectifiedDataElement_4_setText(st
  *         """
  *         cetree.setNodeText(self._c_node, s)             # <<<<<<<<<<<<<<
  * 
- * cdef class NumberElement(ObjectifiedDataElement):
+ * 
  */
   __pyx_t_1 = setNodeText(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base._c_node, __pyx_v_s); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 610, __pyx_L1_error)
 
@@ -9711,9 +9835,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_22ObjectifiedDataElement_4_setText(st
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":614
- * cdef class NumberElement(ObjectifiedDataElement):
+/* "lxml/objectify.pyx":616
  *     cdef object _parse_value
+ * 
  *     def _setValueParser(self, function):             # <<<<<<<<<<<<<<
  *         u"""Set the function that parses the Python value from a string.
  * 
@@ -9739,7 +9863,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement__setValueParser(struc
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_setValueParser", 0);
 
-  /* "lxml/objectify.pyx":619
+  /* "lxml/objectify.pyx":621
  *         Do not use this unless you know what you are doing.
  *         """
  *         self._parse_value = function             # <<<<<<<<<<<<<<
@@ -9752,9 +9876,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement__setValueParser(struc
   __Pyx_DECREF(__pyx_v_self->_parse_value);
   __pyx_v_self->_parse_value = __pyx_v_function;
 
-  /* "lxml/objectify.pyx":614
- * cdef class NumberElement(ObjectifiedDataElement):
+  /* "lxml/objectify.pyx":616
  *     cdef object _parse_value
+ * 
  *     def _setValueParser(self, function):             # <<<<<<<<<<<<<<
  *         u"""Set the function that parses the Python value from a string.
  * 
@@ -9767,7 +9891,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement__setValueParser(struc
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":622
+/* "lxml/objectify.pyx":624
  * 
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -9797,7 +9921,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_5pyval___get__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/objectify.pyx":623
+  /* "lxml/objectify.pyx":625
  *     @property
  *     def pyval(self):
  *         return _parseNumber(self)             # <<<<<<<<<<<<<<
@@ -9805,13 +9929,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_5pyval___get__(struct
  *     def __int__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 625, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":622
+  /* "lxml/objectify.pyx":624
  * 
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -9830,7 +9954,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_5pyval___get__(struct
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":625
+/* "lxml/objectify.pyx":627
  *         return _parseNumber(self)
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
@@ -9861,7 +9985,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_2__int__(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__int__", 0);
 
-  /* "lxml/objectify.pyx":626
+  /* "lxml/objectify.pyx":628
  * 
  *     def __int__(self):
  *         return int(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -9869,16 +9993,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_2__int__(struct __pyx
  *     def __long__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 626, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 626, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __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;
 
-  /* "lxml/objectify.pyx":625
+  /* "lxml/objectify.pyx":627
  *         return _parseNumber(self)
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
@@ -9898,7 +10022,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_2__int__(struct __pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":628
+/* "lxml/objectify.pyx":630
  *         return int(_parseNumber(self))
  * 
  *     def __long__(self):             # <<<<<<<<<<<<<<
@@ -9932,7 +10056,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_4__long__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__long__", 0);
 
-  /* "lxml/objectify.pyx":629
+  /* "lxml/objectify.pyx":631
  * 
  *     def __long__(self):
  *         return long(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -9940,16 +10064,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_4__long__(struct __py
  *     def __float__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 631, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyLong_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyLong_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 631, __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;
 
-  /* "lxml/objectify.pyx":628
+  /* "lxml/objectify.pyx":630
  *         return int(_parseNumber(self))
  * 
  *     def __long__(self):             # <<<<<<<<<<<<<<
@@ -9970,7 +10094,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_4__long__(struct __py
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "lxml/objectify.pyx":631
+/* "lxml/objectify.pyx":633
  *         return long(_parseNumber(self))
  * 
  *     def __float__(self):             # <<<<<<<<<<<<<<
@@ -10001,7 +10125,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_6__float__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__float__", 0);
 
-  /* "lxml/objectify.pyx":632
+  /* "lxml/objectify.pyx":634
  * 
  *     def __float__(self):
  *         return float(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -10009,16 +10133,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_6__float__(struct __p
  *     def __complex__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 632, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 634, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Float(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 632, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Float(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __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;
 
-  /* "lxml/objectify.pyx":631
+  /* "lxml/objectify.pyx":633
  *         return long(_parseNumber(self))
  * 
  *     def __float__(self):             # <<<<<<<<<<<<<<
@@ -10038,7 +10162,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_6__float__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":634
+/* "lxml/objectify.pyx":636
  *         return float(_parseNumber(self))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
@@ -10070,7 +10194,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_8__complex__(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__complex__", 0);
 
-  /* "lxml/objectify.pyx":635
+  /* "lxml/objectify.pyx":637
  * 
  *     def __complex__(self):
  *         return complex(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -10078,16 +10202,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_8__complex__(struct _
  *     def __str__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyComplex_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyComplex_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":634
+  /* "lxml/objectify.pyx":636
  *         return float(_parseNumber(self))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
@@ -10107,7 +10231,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_8__complex__(struct _
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":637
+/* "lxml/objectify.pyx":639
  *         return complex(_parseNumber(self))
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -10138,7 +10262,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_10__str__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__str__", 0);
 
-  /* "lxml/objectify.pyx":638
+  /* "lxml/objectify.pyx":640
  * 
  *     def __str__(self):
  *         return unicode(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -10146,16 +10270,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_10__str__(struct __py
  *     def __repr__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 640, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 640, __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;
 
-  /* "lxml/objectify.pyx":637
+  /* "lxml/objectify.pyx":639
  *         return complex(_parseNumber(self))
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -10175,7 +10299,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_10__str__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":640
+/* "lxml/objectify.pyx":642
  *         return unicode(_parseNumber(self))
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -10206,7 +10330,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_12__repr__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/objectify.pyx":641
+  /* "lxml/objectify.pyx":643
  * 
  *     def __repr__(self):
  *         return repr(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -10214,16 +10338,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_12__repr__(struct __p
  *     def __oct__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 641, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 641, __pyx_L1_error)
+  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":640
+  /* "lxml/objectify.pyx":642
  *         return unicode(_parseNumber(self))
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -10243,7 +10367,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_12__repr__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":643
+/* "lxml/objectify.pyx":645
  *         return repr(_parseNumber(self))
  * 
  *     def __oct__(self):             # <<<<<<<<<<<<<<
@@ -10277,7 +10401,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_14__oct__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__oct__", 0);
 
-  /* "lxml/objectify.pyx":644
+  /* "lxml/objectify.pyx":646
  * 
  *     def __oct__(self):
  *         return oct(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -10285,16 +10409,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_14__oct__(struct __py
  *     def __hex__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_oct, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 644, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_oct, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 646, __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;
 
-  /* "lxml/objectify.pyx":643
+  /* "lxml/objectify.pyx":645
  *         return repr(_parseNumber(self))
  * 
  *     def __oct__(self):             # <<<<<<<<<<<<<<
@@ -10315,7 +10439,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_14__oct__(struct __py
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-/* "lxml/objectify.pyx":646
+/* "lxml/objectify.pyx":648
  *         return oct(_parseNumber(self))
  * 
  *     def __hex__(self):             # <<<<<<<<<<<<<<
@@ -10349,7 +10473,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_16__hex__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__hex__", 0);
 
-  /* "lxml/objectify.pyx":647
+  /* "lxml/objectify.pyx":649
  * 
  *     def __hex__(self):
  *         return hex(_parseNumber(self))             # <<<<<<<<<<<<<<
@@ -10357,16 +10481,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_16__hex__(struct __py
  *     def __richcmp__(self, other, int op):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 647, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 649, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_hex, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 647, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_hex, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 649, __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;
 
-  /* "lxml/objectify.pyx":646
+  /* "lxml/objectify.pyx":648
  *         return oct(_parseNumber(self))
  * 
  *     def __hex__(self):             # <<<<<<<<<<<<<<
@@ -10387,7 +10511,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_16__hex__(struct __py
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-/* "lxml/objectify.pyx":649
+/* "lxml/objectify.pyx":651
  *         return hex(_parseNumber(self))
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -10417,7 +10541,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_18__richcmp__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__richcmp__", 0);
 
-  /* "lxml/objectify.pyx":650
+  /* "lxml/objectify.pyx":652
  * 
  *     def __richcmp__(self, other, int op):
  *         return _richcmpPyvals(self, other, op)             # <<<<<<<<<<<<<<
@@ -10425,13 +10549,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_18__richcmp__(struct
  *     def __hash__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__richcmpPyvals(((PyObject *)__pyx_v_self), __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__richcmpPyvals(((PyObject *)__pyx_v_self), __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":649
+  /* "lxml/objectify.pyx":651
  *         return hex(_parseNumber(self))
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -10450,7 +10574,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_18__richcmp__(struct
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":652
+/* "lxml/objectify.pyx":654
  *         return _richcmpPyvals(self, other, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -10481,21 +10605,21 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_13NumberElement_20__hash__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__hash__", 0);
 
-  /* "lxml/objectify.pyx":653
+  /* "lxml/objectify.pyx":655
  * 
  *     def __hash__(self):
  *         return hash(_parseNumber(self))             # <<<<<<<<<<<<<<
  * 
  *     def __add__(self, other):
  */
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 653, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 655, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 653, __pyx_L1_error)
+  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 655, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":652
+  /* "lxml/objectify.pyx":654
  *         return _richcmpPyvals(self, other, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -10514,7 +10638,7 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_13NumberElement_20__hash__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":655
+/* "lxml/objectify.pyx":657
  *         return hash(_parseNumber(self))
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -10546,19 +10670,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_22__add__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__add__", 0);
 
-  /* "lxml/objectify.pyx":656
+  /* "lxml/objectify.pyx":658
  * 
  *     def __add__(self, other):
  *         return _numericValueOf(self) + _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __sub__(self, other):
+ *     def __radd__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 658, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 658, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 658, __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;
@@ -10566,7 +10690,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_22__add__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":655
+  /* "lxml/objectify.pyx":657
  *         return hash(_parseNumber(self))
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -10587,28 +10711,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_22__add__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":658
+/* "lxml/objectify.pyx":660
  *         return _numericValueOf(self) + _numericValueOf(other)
  * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) + _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_25__radd__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_25__radd__ = {"__radd__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_25__radd__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_25__radd__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__radd__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_24__radd__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__radd__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__radd__", 0);
+
+  /* "lxml/objectify.pyx":661
+ * 
+ *     def __radd__(self, other):
+ *         return _numericValueOf(other) + _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __sub__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 661, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 661, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 661, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":660
+ *         return _numericValueOf(self) + _numericValueOf(other)
+ * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) + _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__radd__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":663
+ *         return _numericValueOf(other) + _numericValueOf(self)
+ * 
  *     def __sub__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) - _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_25__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_25__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_27__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_27__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__sub__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_24__sub__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_26__sub__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10619,19 +10817,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__sub__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__sub__", 0);
 
-  /* "lxml/objectify.pyx":659
+  /* "lxml/objectify.pyx":664
  * 
  *     def __sub__(self, other):
  *         return _numericValueOf(self) - _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __mul__(self, other):
+ *     def __rsub__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 659, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 659, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 659, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 664, __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;
@@ -10639,8 +10837,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__sub__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":658
- *         return _numericValueOf(self) + _numericValueOf(other)
+  /* "lxml/objectify.pyx":663
+ *         return _numericValueOf(other) + _numericValueOf(self)
  * 
  *     def __sub__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) - _numericValueOf(other)
@@ -10660,28 +10858,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_24__sub__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":661
+/* "lxml/objectify.pyx":666
  *         return _numericValueOf(self) - _numericValueOf(other)
  * 
+ *     def __rsub__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) - _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_29__rsub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_29__rsub__ = {"__rsub__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_29__rsub__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_29__rsub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rsub__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_28__rsub__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__rsub__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rsub__", 0);
+
+  /* "lxml/objectify.pyx":667
+ * 
+ *     def __rsub__(self, other):
+ *         return _numericValueOf(other) - _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __mul__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 667, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 667, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":666
+ *         return _numericValueOf(self) - _numericValueOf(other)
+ * 
+ *     def __rsub__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) - _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rsub__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":669
+ *         return _numericValueOf(other) - _numericValueOf(self)
+ * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) * _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_27__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_27__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_31__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_31__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_30__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10692,19 +10964,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__mul__", 0);
 
-  /* "lxml/objectify.pyx":662
+  /* "lxml/objectify.pyx":670
  * 
  *     def __mul__(self, other):
  *         return _numericValueOf(self) * _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __div__(self, other):
+ *     def __rmul__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 662, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 670, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 662, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 670, __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;
@@ -10712,8 +10984,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":661
- *         return _numericValueOf(self) - _numericValueOf(other)
+  /* "lxml/objectify.pyx":669
+ *         return _numericValueOf(other) - _numericValueOf(self)
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) * _numericValueOf(other)
@@ -10733,9 +11005,83 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":664
+/* "lxml/objectify.pyx":672
+ *         return _numericValueOf(self) * _numericValueOf(other)
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_33__rmul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_33__rmul__ = {"__rmul__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_33__rmul__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_33__rmul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rmul__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_32__rmul__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__rmul__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rmul__", 0);
+
+  /* "lxml/objectify.pyx":673
+ * 
+ *     def __rmul__(self, other):
+ *         return _numericValueOf(other) * _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __div__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 673, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 673, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 673, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":672
  *         return _numericValueOf(self) * _numericValueOf(other)
  * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rmul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":675
+ *         return _numericValueOf(other) * _numericValueOf(self)
+ * 
  *     def __div__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) / _numericValueOf(other)
  * 
@@ -10743,12 +11089,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_26__mul__(PyObject *_
 
 /* Python wrapper */
 #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_29__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_29__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_35__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_35__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__div__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_28__div__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_34__div__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
@@ -10757,7 +11103,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_29__div__(PyObject *_
 #endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
 #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10768,19 +11114,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__div__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__div__", 0);
 
-  /* "lxml/objectify.pyx":665
+  /* "lxml/objectify.pyx":676
  * 
  *     def __div__(self, other):
  *         return _numericValueOf(self) / _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __truediv__(self, other):
+ *     def __rdiv__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 676, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 676, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 665, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 676, __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;
@@ -10788,8 +11134,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__div__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":664
- *         return _numericValueOf(self) * _numericValueOf(other)
+  /* "lxml/objectify.pyx":675
+ *         return _numericValueOf(other) * _numericValueOf(self)
  * 
  *     def __div__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) / _numericValueOf(other)
@@ -10810,28 +11156,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_28__div__(PyObject *_
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-/* "lxml/objectify.pyx":667
+/* "lxml/objectify.pyx":678
+ *         return _numericValueOf(self) / _numericValueOf(other)
+ * 
+ *     def __rdiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_37__rdiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_37__rdiv__ = {"__rdiv__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_37__rdiv__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_37__rdiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rdiv__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_36__rdiv__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__rdiv__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rdiv__", 0);
+
+  /* "lxml/objectify.pyx":679
+ * 
+ *     def __rdiv__(self, other):
+ *         return _numericValueOf(other) / _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __truediv__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 679, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 679, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":678
  *         return _numericValueOf(self) / _numericValueOf(other)
  * 
+ *     def __rdiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rdiv__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":681
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
  *     def __truediv__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) / _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_31__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_31__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_39__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_39__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__truediv__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_30__truediv__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_38__truediv__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__truediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10842,19 +11262,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__truediv__(PyObjec
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__truediv__", 0);
 
-  /* "lxml/objectify.pyx":668
+  /* "lxml/objectify.pyx":682
  * 
  *     def __truediv__(self, other):
  *         return _numericValueOf(self) / _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __mod__(self, other):
+ *     def __rtruediv__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 682, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 668, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 682, __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;
@@ -10862,8 +11282,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__truediv__(PyObjec
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":667
- *         return _numericValueOf(self) / _numericValueOf(other)
+  /* "lxml/objectify.pyx":681
+ *         return _numericValueOf(other) / _numericValueOf(self)
  * 
  *     def __truediv__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) / _numericValueOf(other)
@@ -10883,28 +11303,249 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_30__truediv__(PyObjec
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":670
+/* "lxml/objectify.pyx":684
+ *         return _numericValueOf(self) / _numericValueOf(other)
+ * 
+ *     def __rtruediv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_41__rtruediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_41__rtruediv__ = {"__rtruediv__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_41__rtruediv__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_41__rtruediv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rtruediv__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_40__rtruediv__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_40__rtruediv__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rtruediv__", 0);
+
+  /* "lxml/objectify.pyx":685
+ * 
+ *     def __rtruediv__(self, other):
+ *         return _numericValueOf(other) / _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __floordiv__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 685, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 685, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":684
  *         return _numericValueOf(self) / _numericValueOf(other)
  * 
+ *     def __rtruediv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rtruediv__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":687
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ *     def __floordiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(self) // _numericValueOf(other)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_43__floordiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_43__floordiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__floordiv__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_42__floordiv__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_42__floordiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__floordiv__", 0);
+
+  /* "lxml/objectify.pyx":688
+ * 
+ *     def __floordiv__(self, other):
+ *         return _numericValueOf(self) // _numericValueOf(other)             # <<<<<<<<<<<<<<
+ * 
+ *     def __rfloordiv__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 688, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 688, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":687
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ *     def __floordiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(self) // _numericValueOf(other)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__floordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":690
+ *         return _numericValueOf(self) // _numericValueOf(other)
+ * 
+ *     def __rfloordiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) // _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_45__rfloordiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_45__rfloordiv__ = {"__rfloordiv__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_45__rfloordiv__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_45__rfloordiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rfloordiv__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_44__rfloordiv__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__rfloordiv__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rfloordiv__", 0);
+
+  /* "lxml/objectify.pyx":691
+ * 
+ *     def __rfloordiv__(self, other):
+ *         return _numericValueOf(other) // _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __mod__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 691, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 691, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 691, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":690
+ *         return _numericValueOf(self) // _numericValueOf(other)
+ * 
+ *     def __rfloordiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) // _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rfloordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":693
+ *         return _numericValueOf(other) // _numericValueOf(self)
+ * 
  *     def __mod__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) % _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_33__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_33__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_47__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_47__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__mod__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_32__mod__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_46__mod__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10915,19 +11556,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__mod__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__mod__", 0);
 
-  /* "lxml/objectify.pyx":671
+  /* "lxml/objectify.pyx":694
  * 
  *     def __mod__(self, other):
  *         return _numericValueOf(self) % _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __pow__(self, other, modulo):
+ *     def __rmod__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 671, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 671, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Remainder(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 671, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Remainder(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __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;
@@ -10935,8 +11576,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__mod__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":670
- *         return _numericValueOf(self) / _numericValueOf(other)
+  /* "lxml/objectify.pyx":693
+ *         return _numericValueOf(other) // _numericValueOf(self)
  * 
  *     def __mod__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) % _numericValueOf(other)
@@ -10956,28 +11597,249 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_32__mod__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":673
+/* "lxml/objectify.pyx":696
  *         return _numericValueOf(self) % _numericValueOf(other)
  * 
+ *     def __rmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) % _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_49__rmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_49__rmod__ = {"__rmod__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_49__rmod__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_49__rmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rmod__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_48__rmod__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rmod__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rmod__", 0);
+
+  /* "lxml/objectify.pyx":697
+ * 
+ *     def __rmod__(self, other):
+ *         return _numericValueOf(other) % _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __divmod__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 697, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 697, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Remainder(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 697, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":696
+ *         return _numericValueOf(self) % _numericValueOf(other)
+ * 
+ *     def __rmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) % _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rmod__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":699
+ *         return _numericValueOf(other) % _numericValueOf(self)
+ * 
+ *     def __divmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_51__divmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_51__divmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__divmod__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_50__divmod__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__divmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__divmod__", 0);
+
+  /* "lxml/objectify.pyx":700
+ * 
+ *     def __divmod__(self, other):
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))             # <<<<<<<<<<<<<<
+ * 
+ *     def __rdivmod__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 700, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Divmod(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":699
+ *         return _numericValueOf(other) % _numericValueOf(self)
+ * 
+ *     def __divmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__divmod__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":702
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))
+ * 
+ *     def __rdivmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_53__rdivmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_53__rdivmod__ = {"__rdivmod__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_53__rdivmod__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_53__rdivmod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rdivmod__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_52__rdivmod__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__rdivmod__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rdivmod__", 0);
+
+  /* "lxml/objectify.pyx":703
+ * 
+ *     def __rdivmod__(self, other):
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))             # <<<<<<<<<<<<<<
+ * 
+ *     def __pow__(self, other, modulo):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 703, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Divmod(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":702
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))
+ * 
+ *     def __rdivmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rdivmod__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":705
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))
+ * 
  *     def __pow__(self, other, modulo):             # <<<<<<<<<<<<<<
  *         if modulo is None:
  *             return _numericValueOf(self) ** _numericValueOf(other)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_35__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_35__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_55__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_55__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__pow__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_modulo));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_54__pow__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_modulo));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__pow__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -10990,7 +11852,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__pow__", 0);
 
-  /* "lxml/objectify.pyx":674
+  /* "lxml/objectify.pyx":706
  * 
  *     def __pow__(self, other, modulo):
  *         if modulo is None:             # <<<<<<<<<<<<<<
@@ -11001,7 +11863,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":675
+    /* "lxml/objectify.pyx":707
  *     def __pow__(self, other, modulo):
  *         if modulo is None:
  *             return _numericValueOf(self) ** _numericValueOf(other)             # <<<<<<<<<<<<<<
@@ -11009,11 +11871,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
  *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 675, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 675, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyNumber_Power(__pyx_t_3, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 675, __pyx_L1_error)
+    __pyx_t_5 = PyNumber_Power(__pyx_t_3, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -11021,7 +11883,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":674
+    /* "lxml/objectify.pyx":706
  * 
  *     def __pow__(self, other, modulo):
  *         if modulo is None:             # <<<<<<<<<<<<<<
@@ -11030,20 +11892,20 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
  */
   }
 
-  /* "lxml/objectify.pyx":677
+  /* "lxml/objectify.pyx":709
  *             return _numericValueOf(self) ** _numericValueOf(other)
  *         else:
  *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)             # <<<<<<<<<<<<<<
  * 
- *     def __neg__(self):
+ *     def __rpow__(self, other, modulo):
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 677, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 709, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 677, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyNumber_Power(__pyx_t_5, __pyx_t_4, __pyx_v_modulo); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 677, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Power(__pyx_t_5, __pyx_t_4, __pyx_v_modulo); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 709, __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;
@@ -11052,8 +11914,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
     goto __pyx_L0;
   }
 
-  /* "lxml/objectify.pyx":673
- *         return _numericValueOf(self) % _numericValueOf(other)
+  /* "lxml/objectify.pyx":705
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))
  * 
  *     def __pow__(self, other, modulo):             # <<<<<<<<<<<<<<
  *         if modulo is None:
@@ -11073,28 +11935,197 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_34__pow__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":679
+/* "lxml/objectify.pyx":711
  *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
  * 
+ *     def __rpow__(self, other, modulo):             # <<<<<<<<<<<<<<
+ *         if modulo is None:
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_57__rpow__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_57__rpow__ = {"__rpow__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4lxml_9objectify_13NumberElement_57__rpow__, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_57__rpow__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_other = 0;
+  PyObject *__pyx_v_modulo = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rpow__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_other,&__pyx_n_s_modulo,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] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_other)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_modulo)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__rpow__", 1, 2, 2, 1); __PYX_ERR(0, 711, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rpow__") < 0)) __PYX_ERR(0, 711, __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_other = values[0];
+    __pyx_v_modulo = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__rpow__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 711, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rpow__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_56__rpow__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), __pyx_v_other, __pyx_v_modulo);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_56__rpow__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_modulo) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rpow__", 0);
+
+  /* "lxml/objectify.pyx":712
+ * 
+ *     def __rpow__(self, other, modulo):
+ *         if modulo is None:             # <<<<<<<<<<<<<<
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ *         else:
+ */
+  __pyx_t_1 = (__pyx_v_modulo == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "lxml/objectify.pyx":713
+ *     def __rpow__(self, other, modulo):
+ *         if modulo is None:
+ *             return _numericValueOf(other) ** _numericValueOf(self)             # <<<<<<<<<<<<<<
+ *         else:
+ *             return pow(_numericValueOf(other), _numericValueOf(self), modulo)
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_3 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 713, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 713, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = PyNumber_Power(__pyx_t_3, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 713, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_r = __pyx_t_5;
+    __pyx_t_5 = 0;
+    goto __pyx_L0;
+
+    /* "lxml/objectify.pyx":712
+ * 
+ *     def __rpow__(self, other, modulo):
+ *         if modulo is None:             # <<<<<<<<<<<<<<
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ *         else:
+ */
+  }
+
+  /* "lxml/objectify.pyx":715
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ *         else:
+ *             return pow(_numericValueOf(other), _numericValueOf(self), modulo)             # <<<<<<<<<<<<<<
+ * 
+ *     def __neg__(self):
+ */
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_5 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 715, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyNumber_Power(__pyx_t_5, __pyx_t_4, __pyx_v_modulo); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 715, __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_r = __pyx_t_3;
+    __pyx_t_3 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "lxml/objectify.pyx":711
+ *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
+ * 
+ *     def __rpow__(self, other, modulo):             # <<<<<<<<<<<<<<
+ *         if modulo is None:
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rpow__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":717
+ *             return pow(_numericValueOf(other), _numericValueOf(self), modulo)
+ * 
  *     def __neg__(self):             # <<<<<<<<<<<<<<
  *         return - _numericValueOf(self)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_37__neg__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_37__neg__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_59__neg__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_59__neg__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__neg__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_58__neg__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_58__neg__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11104,7 +12135,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__neg__", 0);
 
-  /* "lxml/objectify.pyx":680
+  /* "lxml/objectify.pyx":718
  * 
  *     def __neg__(self):
  *         return - _numericValueOf(self)             # <<<<<<<<<<<<<<
@@ -11112,17 +12143,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(struct __py
  *     def __pos__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Negative(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 680, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Negative(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":679
- *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
+  /* "lxml/objectify.pyx":717
+ *             return pow(_numericValueOf(other), _numericValueOf(self), modulo)
  * 
  *     def __neg__(self):             # <<<<<<<<<<<<<<
  *         return - _numericValueOf(self)
@@ -11141,7 +12172,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":682
+/* "lxml/objectify.pyx":720
  *         return - _numericValueOf(self)
  * 
  *     def __pos__(self):             # <<<<<<<<<<<<<<
@@ -11150,19 +12181,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_36__neg__(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_39__pos__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_39__pos__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_61__pos__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_61__pos__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__pos__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_60__pos__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_60__pos__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11172,7 +12203,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__pos__", 0);
 
-  /* "lxml/objectify.pyx":683
+  /* "lxml/objectify.pyx":721
  * 
  *     def __pos__(self):
  *         return + _numericValueOf(self)             # <<<<<<<<<<<<<<
@@ -11180,16 +12211,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(struct __py
  *     def __abs__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 721, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Positive(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Positive(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 721, __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;
 
-  /* "lxml/objectify.pyx":682
+  /* "lxml/objectify.pyx":720
  *         return - _numericValueOf(self)
  * 
  *     def __pos__(self):             # <<<<<<<<<<<<<<
@@ -11209,7 +12240,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":685
+/* "lxml/objectify.pyx":723
  *         return + _numericValueOf(self)
  * 
  *     def __abs__(self):             # <<<<<<<<<<<<<<
@@ -11218,19 +12249,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_38__pos__(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_41__abs__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_41__abs__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_63__abs__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_63__abs__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__abs__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_40__abs__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_62__abs__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_40__abs__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_62__abs__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11240,24 +12271,24 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_40__abs__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__abs__", 0);
 
-  /* "lxml/objectify.pyx":686
+  /* "lxml/objectify.pyx":724
  * 
  *     def __abs__(self):
  *         return abs( _numericValueOf(self) )             # <<<<<<<<<<<<<<
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 686, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 686, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":685
+  /* "lxml/objectify.pyx":723
  *         return + _numericValueOf(self)
  * 
  *     def __abs__(self):             # <<<<<<<<<<<<<<
@@ -11277,28 +12308,28 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_40__abs__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":688
+/* "lxml/objectify.pyx":726
  *         return abs( _numericValueOf(self) )
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return bool(_numericValueOf(self))
  * 
  */
 
 /* Python wrapper */
-static int __pyx_pw_4lxml_9objectify_13NumberElement_43__nonzero__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_4lxml_9objectify_13NumberElement_43__nonzero__(PyObject *__pyx_v_self) {
+static int __pyx_pw_4lxml_9objectify_13NumberElement_65__bool__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_4lxml_9objectify_13NumberElement_65__bool__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__nonzero__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_42__nonzero__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_64__bool__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_4lxml_9objectify_13NumberElement_42__nonzero__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
+static int __pyx_pf_4lxml_9objectify_13NumberElement_64__bool__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11306,26 +12337,26 @@ static int __pyx_pf_4lxml_9objectify_13NumberElement_42__nonzero__(struct __pyx_
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__nonzero__", 0);
+  __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "lxml/objectify.pyx":689
+  /* "lxml/objectify.pyx":727
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  *         return bool(_numericValueOf(self))             # <<<<<<<<<<<<<<
  * 
  *     def __invert__(self):
  */
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 689, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 727, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = (!(!__pyx_t_2));
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":688
+  /* "lxml/objectify.pyx":726
  *         return abs( _numericValueOf(self) )
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return bool(_numericValueOf(self))
  * 
  */
@@ -11333,14 +12364,14 @@ static int __pyx_pf_4lxml_9objectify_13NumberElement_42__nonzero__(struct __pyx_
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("lxml.objectify.NumberElement.__nonzero__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":691
+/* "lxml/objectify.pyx":729
  *         return bool(_numericValueOf(self))
  * 
  *     def __invert__(self):             # <<<<<<<<<<<<<<
@@ -11349,19 +12380,19 @@ static int __pyx_pf_4lxml_9objectify_13NumberElement_42__nonzero__(struct __pyx_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_45__invert__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_45__invert__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_67__invert__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_67__invert__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__invert__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_66__invert__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_66__invert__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11371,7 +12402,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__invert__", 0);
 
-  /* "lxml/objectify.pyx":692
+  /* "lxml/objectify.pyx":730
  * 
  *     def __invert__(self):
  *         return ~ _numericValueOf(self)             # <<<<<<<<<<<<<<
@@ -11379,16 +12410,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(struct _
  *     def __lshift__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Invert(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Invert(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 730, __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;
 
-  /* "lxml/objectify.pyx":691
+  /* "lxml/objectify.pyx":729
  *         return bool(_numericValueOf(self))
  * 
  *     def __invert__(self):             # <<<<<<<<<<<<<<
@@ -11408,7 +12439,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(struct _
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":694
+/* "lxml/objectify.pyx":732
  *         return ~ _numericValueOf(self)
  * 
  *     def __lshift__(self, other):             # <<<<<<<<<<<<<<
@@ -11417,19 +12448,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_44__invert__(struct _
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_47__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_47__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_69__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_69__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__lshift__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_46__lshift__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_68__lshift__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_68__lshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11440,19 +12471,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__lshift__(PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__lshift__", 0);
 
-  /* "lxml/objectify.pyx":695
+  /* "lxml/objectify.pyx":733
  * 
  *     def __lshift__(self, other):
  *         return _numericValueOf(self) << _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __rshift__(self, other):
+ *     def __rlshift__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 695, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 733, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 695, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 733, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Lshift(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 695, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Lshift(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 733, __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;
@@ -11460,7 +12491,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__lshift__(PyObject
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":694
+  /* "lxml/objectify.pyx":732
  *         return ~ _numericValueOf(self)
  * 
  *     def __lshift__(self, other):             # <<<<<<<<<<<<<<
@@ -11481,28 +12512,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_46__lshift__(PyObject
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":697
+/* "lxml/objectify.pyx":735
+ *         return _numericValueOf(self) << _numericValueOf(other)
+ * 
+ *     def __rlshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) << _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_71__rlshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_71__rlshift__ = {"__rlshift__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_71__rlshift__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_71__rlshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rlshift__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_70__rlshift__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_70__rlshift__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rlshift__", 0);
+
+  /* "lxml/objectify.pyx":736
+ * 
+ *     def __rlshift__(self, other):
+ *         return _numericValueOf(other) << _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __rshift__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 736, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Lshift(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 736, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":735
  *         return _numericValueOf(self) << _numericValueOf(other)
  * 
+ *     def __rlshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) << _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rlshift__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":738
+ *         return _numericValueOf(other) << _numericValueOf(self)
+ * 
  *     def __rshift__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) >> _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_49__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_49__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_73__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_73__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__rshift__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_48__rshift__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_72__rshift__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_72__rshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11513,19 +12618,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rshift__(PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__rshift__", 0);
 
-  /* "lxml/objectify.pyx":698
+  /* "lxml/objectify.pyx":739
  * 
  *     def __rshift__(self, other):
  *         return _numericValueOf(self) >> _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __and__(self, other):
+ *     def __rrshift__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 698, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 698, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Rshift(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 698, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Rshift(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 739, __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;
@@ -11533,8 +12638,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rshift__(PyObject
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":697
- *         return _numericValueOf(self) << _numericValueOf(other)
+  /* "lxml/objectify.pyx":738
+ *         return _numericValueOf(other) << _numericValueOf(self)
  * 
  *     def __rshift__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) >> _numericValueOf(other)
@@ -11554,28 +12659,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_48__rshift__(PyObject
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":700
+/* "lxml/objectify.pyx":741
  *         return _numericValueOf(self) >> _numericValueOf(other)
  * 
+ *     def __rrshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) >> _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_75__rrshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_75__rrshift__ = {"__rrshift__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_75__rrshift__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_75__rrshift__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rrshift__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_74__rrshift__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_74__rrshift__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rrshift__", 0);
+
+  /* "lxml/objectify.pyx":742
+ * 
+ *     def __rrshift__(self, other):
+ *         return _numericValueOf(other) >> _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __and__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 742, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Rshift(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 742, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":741
+ *         return _numericValueOf(self) >> _numericValueOf(other)
+ * 
+ *     def __rrshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) >> _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rrshift__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":744
+ *         return _numericValueOf(other) >> _numericValueOf(self)
+ * 
  *     def __and__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) & _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_51__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_51__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_77__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_77__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__and__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_50__and__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_76__and__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_76__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11586,19 +12765,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__and__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__and__", 0);
 
-  /* "lxml/objectify.pyx":701
+  /* "lxml/objectify.pyx":745
  * 
  *     def __and__(self, other):
  *         return _numericValueOf(self) & _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __or__(self, other):
+ *     def __rand__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 701, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_And(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 701, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_And(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 745, __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;
@@ -11606,8 +12785,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__and__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":700
- *         return _numericValueOf(self) >> _numericValueOf(other)
+  /* "lxml/objectify.pyx":744
+ *         return _numericValueOf(other) >> _numericValueOf(self)
  * 
  *     def __and__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) & _numericValueOf(other)
@@ -11627,28 +12806,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_50__and__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":703
+/* "lxml/objectify.pyx":747
  *         return _numericValueOf(self) & _numericValueOf(other)
  * 
+ *     def __rand__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) & _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_79__rand__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_79__rand__ = {"__rand__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_79__rand__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_79__rand__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rand__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_78__rand__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_78__rand__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rand__", 0);
+
+  /* "lxml/objectify.pyx":748
+ * 
+ *     def __rand__(self, other):
+ *         return _numericValueOf(other) & _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __or__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 748, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 748, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_And(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 748, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":747
+ *         return _numericValueOf(self) & _numericValueOf(other)
+ * 
+ *     def __rand__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) & _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rand__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":750
+ *         return _numericValueOf(other) & _numericValueOf(self)
+ * 
  *     def __or__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) | _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_53__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_53__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_81__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_81__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__or__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_52__or__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_80__or__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_80__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11659,19 +12912,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__or__(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__or__", 0);
 
-  /* "lxml/objectify.pyx":704
+  /* "lxml/objectify.pyx":751
  * 
  *     def __or__(self, other):
  *         return _numericValueOf(self) | _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- *     def __xor__(self, other):
+ *     def __ror__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 704, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 704, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 751, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Or(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 704, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Or(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 751, __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;
@@ -11679,8 +12932,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__or__(PyObject *__
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":703
- *         return _numericValueOf(self) & _numericValueOf(other)
+  /* "lxml/objectify.pyx":750
+ *         return _numericValueOf(other) & _numericValueOf(self)
  * 
  *     def __or__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) | _numericValueOf(other)
@@ -11700,28 +12953,102 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_52__or__(PyObject *__
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":706
+/* "lxml/objectify.pyx":753
  *         return _numericValueOf(self) | _numericValueOf(other)
  * 
+ *     def __ror__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) | _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_83__ror__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_83__ror__ = {"__ror__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_83__ror__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_83__ror__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__ror__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_82__ror__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_82__ror__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__ror__", 0);
+
+  /* "lxml/objectify.pyx":754
+ * 
+ *     def __ror__(self, other):
+ *         return _numericValueOf(other) | _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ *     def __xor__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Or(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 754, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":753
+ *         return _numericValueOf(self) | _numericValueOf(other)
+ * 
+ *     def __ror__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) | _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__ror__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":756
+ *         return _numericValueOf(other) | _numericValueOf(self)
+ * 
  *     def __xor__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) ^ _numericValueOf(other)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_55__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_55__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_85__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_85__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__xor__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_54__xor__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_84__xor__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_84__xor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -11732,19 +13059,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__xor__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__xor__", 0);
 
-  /* "lxml/objectify.pyx":707
+  /* "lxml/objectify.pyx":757
  * 
  *     def __xor__(self, other):
  *         return _numericValueOf(self) ^ _numericValueOf(other)             # <<<<<<<<<<<<<<
  * 
- * cdef class IntElement(NumberElement):
+ *     def __rxor__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 707, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyNumber_Xor(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Xor(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 757, __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;
@@ -11752,8 +13079,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__xor__(PyObject *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":706
- *         return _numericValueOf(self) | _numericValueOf(other)
+  /* "lxml/objectify.pyx":756
+ *         return _numericValueOf(other) | _numericValueOf(self)
  * 
  *     def __xor__(self, other):             # <<<<<<<<<<<<<<
  *         return _numericValueOf(self) ^ _numericValueOf(other)
@@ -11773,7 +13100,81 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_54__xor__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":710
+/* "lxml/objectify.pyx":759
+ *         return _numericValueOf(self) ^ _numericValueOf(other)
+ * 
+ *     def __rxor__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) ^ _numericValueOf(self)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_87__rxor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13NumberElement_87__rxor__ = {"__rxor__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_87__rxor__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13NumberElement_87__rxor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rxor__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13NumberElement_86__rxor__(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_86__rxor__(struct __pyx_obj_4lxml_9objectify_NumberElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rxor__", 0);
+
+  /* "lxml/objectify.pyx":760
+ * 
+ *     def __rxor__(self, other):
+ *         return _numericValueOf(other) ^ _numericValueOf(self)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__numericValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Xor(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 760, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":759
+ *         return _numericValueOf(self) ^ _numericValueOf(other)
+ * 
+ *     def __rxor__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) ^ _numericValueOf(self)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.NumberElement.__rxor__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":764
  * 
  * cdef class IntElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -11800,7 +13201,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10IntElement__init(struct __pyx_obj_4
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_init", 0);
 
-  /* "lxml/objectify.pyx":711
+  /* "lxml/objectify.pyx":765
  * cdef class IntElement(NumberElement):
  *     def _init(self):
  *         self._parse_value = int             # <<<<<<<<<<<<<<
@@ -11813,7 +13214,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10IntElement__init(struct __pyx_obj_4
   __Pyx_DECREF(__pyx_v_self->__pyx_base._parse_value);
   __pyx_v_self->__pyx_base._parse_value = ((PyObject *)(&PyInt_Type));
 
-  /* "lxml/objectify.pyx":710
+  /* "lxml/objectify.pyx":764
  * 
  * cdef class IntElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -11828,7 +13229,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10IntElement__init(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":713
+/* "lxml/objectify.pyx":767
  *         self._parse_value = int
  * 
  *     def __index__(self):             # <<<<<<<<<<<<<<
@@ -11859,24 +13260,24 @@ static PyObject *__pyx_pf_4lxml_9objectify_10IntElement_2__index__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__index__", 0);
 
-  /* "lxml/objectify.pyx":714
+  /* "lxml/objectify.pyx":768
  * 
  *     def __index__(self):
  *         return int(_parseNumber(self))             # <<<<<<<<<<<<<<
  * 
- * cdef class LongElement(NumberElement):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 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;
 
-  /* "lxml/objectify.pyx":713
+  /* "lxml/objectify.pyx":767
  *         self._parse_value = int
  * 
  *     def __index__(self):             # <<<<<<<<<<<<<<
@@ -11896,7 +13297,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10IntElement_2__index__(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":717
+/* "lxml/objectify.pyx":772
  * 
  * cdef class LongElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -11923,7 +13324,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11LongElement__init(struct __pyx_obj_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_init", 0);
 
-  /* "lxml/objectify.pyx":718
+  /* "lxml/objectify.pyx":773
  * cdef class LongElement(NumberElement):
  *     def _init(self):
  *         self._parse_value = long             # <<<<<<<<<<<<<<
@@ -11936,7 +13337,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11LongElement__init(struct __pyx_obj_
   __Pyx_DECREF(__pyx_v_self->__pyx_base._parse_value);
   __pyx_v_self->__pyx_base._parse_value = ((PyObject *)(&PyLong_Type));
 
-  /* "lxml/objectify.pyx":717
+  /* "lxml/objectify.pyx":772
  * 
  * cdef class LongElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -11951,7 +13352,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11LongElement__init(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":720
+/* "lxml/objectify.pyx":775
  *         self._parse_value = long
  * 
  *     def __index__(self):             # <<<<<<<<<<<<<<
@@ -11982,24 +13383,24 @@ static PyObject *__pyx_pf_4lxml_9objectify_11LongElement_2__index__(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__index__", 0);
 
-  /* "lxml/objectify.pyx":721
+  /* "lxml/objectify.pyx":776
  * 
  *     def __index__(self):
  *         return int(_parseNumber(self))             # <<<<<<<<<<<<<<
  * 
- * cdef class FloatElement(NumberElement):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 721, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__parseNumber(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 721, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __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;
 
-  /* "lxml/objectify.pyx":720
+  /* "lxml/objectify.pyx":775
  *         self._parse_value = long
  * 
  *     def __index__(self):             # <<<<<<<<<<<<<<
@@ -12019,7 +13420,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11LongElement_2__index__(struct __pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":724
+/* "lxml/objectify.pyx":780
  * 
  * cdef class FloatElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -12046,12 +13447,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_12FloatElement__init(struct __pyx_obj
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_init", 0);
 
-  /* "lxml/objectify.pyx":725
+  /* "lxml/objectify.pyx":781
  * cdef class FloatElement(NumberElement):
  *     def _init(self):
  *         self._parse_value = float             # <<<<<<<<<<<<<<
  * 
- * cdef class StringElement(ObjectifiedDataElement):
+ * 
  */
   __Pyx_INCREF(((PyObject *)(&PyFloat_Type)));
   __Pyx_GIVEREF(((PyObject *)(&PyFloat_Type)));
@@ -12059,7 +13460,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12FloatElement__init(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_self->__pyx_base._parse_value);
   __pyx_v_self->__pyx_base._parse_value = ((PyObject *)(&PyFloat_Type));
 
-  /* "lxml/objectify.pyx":724
+  /* "lxml/objectify.pyx":780
  * 
  * cdef class FloatElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -12074,7 +13475,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12FloatElement__init(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":735
+/* "lxml/objectify.pyx":792
  *     """
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -12106,7 +13507,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_5pyval___get__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/objectify.pyx":736
+  /* "lxml/objectify.pyx":793
  *     @property
  *     def pyval(self):
  *         return textOf(self._c_node) or u''             # <<<<<<<<<<<<<<
@@ -12114,9 +13515,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_5pyval___get__(struct
  *     def __repr__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 736, __pyx_L1_error)
+  __pyx_t_2 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 736, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 793, __pyx_L1_error)
   if (!__pyx_t_3) {
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
@@ -12132,7 +13533,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_5pyval___get__(struct
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":735
+  /* "lxml/objectify.pyx":792
  *     """
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -12152,7 +13553,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_5pyval___get__(struct
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":738
+/* "lxml/objectify.pyx":795
  *         return textOf(self._c_node) or u''
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -12184,7 +13585,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement___repr__(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/objectify.pyx":739
+  /* "lxml/objectify.pyx":796
  * 
  *     def __repr__(self):
  *         return repr(textOf(self._c_node) or u'')             # <<<<<<<<<<<<<<
@@ -12192,9 +13593,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement___repr__(struct __pyx
  *     def strlen(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
+  __pyx_t_2 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 739, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 796, __pyx_L1_error)
   if (!__pyx_t_3) {
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
@@ -12206,14 +13607,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement___repr__(struct __pyx
   __Pyx_INCREF(__pyx_kp_u_);
   __pyx_t_1 = __pyx_kp_u_;
   __pyx_L3_bool_binop_done:;
-  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
+  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":738
+  /* "lxml/objectify.pyx":795
  *         return textOf(self._c_node) or u''
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -12233,7 +13634,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement___repr__(struct __pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":741
+/* "lxml/objectify.pyx":798
  *         return repr(textOf(self._c_node) or u'')
  * 
  *     def strlen(self):             # <<<<<<<<<<<<<<
@@ -12268,19 +13669,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_2strlen(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("strlen", 0);
 
-  /* "lxml/objectify.pyx":742
+  /* "lxml/objectify.pyx":799
  * 
  *     def strlen(self):
  *         text = textOf(self._c_node)             # <<<<<<<<<<<<<<
  *         if text is None:
  *             return 0
  */
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_text = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":743
+  /* "lxml/objectify.pyx":800
  *     def strlen(self):
  *         text = textOf(self._c_node)
  *         if text is None:             # <<<<<<<<<<<<<<
@@ -12291,7 +13692,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_2strlen(struct __pyx_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":744
+    /* "lxml/objectify.pyx":801
  *         text = textOf(self._c_node)
  *         if text is None:
  *             return 0             # <<<<<<<<<<<<<<
@@ -12303,7 +13704,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_2strlen(struct __pyx_
     __pyx_r = __pyx_int_0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":743
+    /* "lxml/objectify.pyx":800
  *     def strlen(self):
  *         text = textOf(self._c_node)
  *         if text is None:             # <<<<<<<<<<<<<<
@@ -12312,24 +13713,24 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_2strlen(struct __pyx_
  */
   }
 
-  /* "lxml/objectify.pyx":746
+  /* "lxml/objectify.pyx":803
  *             return 0
  *         else:
  *             return len(text)             # <<<<<<<<<<<<<<
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = PyObject_Length(__pyx_v_text); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 746, __pyx_L1_error)
-    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error)
+    __pyx_t_4 = PyObject_Length(__pyx_v_text); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 803, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 803, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
 
-  /* "lxml/objectify.pyx":741
+  /* "lxml/objectify.pyx":798
  *         return repr(textOf(self._c_node) or u'')
  * 
  *     def strlen(self):             # <<<<<<<<<<<<<<
@@ -12349,28 +13750,28 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_2strlen(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":748
+/* "lxml/objectify.pyx":805
  *             return len(text)
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return bool(textOf(self._c_node))
  * 
  */
 
 /* Python wrapper */
-static int __pyx_pw_4lxml_9objectify_13StringElement_5__nonzero__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_4lxml_9objectify_13StringElement_5__nonzero__(PyObject *__pyx_v_self) {
+static int __pyx_pw_4lxml_9objectify_13StringElement_5__bool__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_4lxml_9objectify_13StringElement_5__bool__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__nonzero__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_4__nonzero__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_4__bool__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_4lxml_9objectify_13StringElement_4__nonzero__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
+static int __pyx_pf_4lxml_9objectify_13StringElement_4__bool__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -12378,26 +13779,26 @@ static int __pyx_pf_4lxml_9objectify_13StringElement_4__nonzero__(struct __pyx_o
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__nonzero__", 0);
+  __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "lxml/objectify.pyx":749
+  /* "lxml/objectify.pyx":806
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  *         return bool(textOf(self._c_node))             # <<<<<<<<<<<<<<
  * 
  *     def __richcmp__(self, other, int op):
  */
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 749, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = (!(!__pyx_t_2));
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":748
+  /* "lxml/objectify.pyx":805
  *             return len(text)
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return bool(textOf(self._c_node))
  * 
  */
@@ -12405,14 +13806,14 @@ static int __pyx_pf_4lxml_9objectify_13StringElement_4__nonzero__(struct __pyx_o
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("lxml.objectify.StringElement.__nonzero__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("lxml.objectify.StringElement.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":751
+/* "lxml/objectify.pyx":808
  *         return bool(textOf(self._c_node))
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -12442,7 +13843,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_6__richcmp__(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__richcmp__", 0);
 
-  /* "lxml/objectify.pyx":752
+  /* "lxml/objectify.pyx":809
  * 
  *     def __richcmp__(self, other, int op):
  *         return _richcmpPyvals(self, other, op)             # <<<<<<<<<<<<<<
@@ -12450,13 +13851,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_6__richcmp__(struct _
  *     def __hash__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__richcmpPyvals(((PyObject *)__pyx_v_self), __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__richcmpPyvals(((PyObject *)__pyx_v_self), __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":751
+  /* "lxml/objectify.pyx":808
  *         return bool(textOf(self._c_node))
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -12475,7 +13876,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_6__richcmp__(struct _
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":754
+/* "lxml/objectify.pyx":811
  *         return _richcmpPyvals(self, other, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -12508,16 +13909,16 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_13StringElement_8__hash__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__hash__", 0);
 
-  /* "lxml/objectify.pyx":755
+  /* "lxml/objectify.pyx":812
  * 
  *     def __hash__(self):
  *         return hash(textOf(self._c_node) or u'')             # <<<<<<<<<<<<<<
  * 
  *     def __add__(self, other):
  */
-  __pyx_t_2 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 755, __pyx_L1_error)
+  __pyx_t_2 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 812, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 755, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 812, __pyx_L1_error)
   if (!__pyx_t_3) {
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
@@ -12529,12 +13930,12 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_13StringElement_8__hash__(struct __py
   __Pyx_INCREF(__pyx_kp_u_);
   __pyx_t_1 = __pyx_kp_u_;
   __pyx_L3_bool_binop_done:;
-  __pyx_t_4 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_4 == ((Py_hash_t)-1))) __PYX_ERR(0, 755, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_4 == ((Py_hash_t)-1))) __PYX_ERR(0, 812, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":754
+  /* "lxml/objectify.pyx":811
  *         return _richcmpPyvals(self, other, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -12554,7 +13955,7 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_13StringElement_8__hash__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":757
+/* "lxml/objectify.pyx":814
  *         return hash(textOf(self._c_node) or u'')
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -12580,120 +13981,146 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_10__add__(PyObject *_
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__add__", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "lxml/objectify.pyx":758
+  /* "lxml/objectify.pyx":815
  * 
  *     def __add__(self, other):
  *         text  = _strValueOf(self)             # <<<<<<<<<<<<<<
  *         other = _strValueOf(other)
- *         if text is None:
+ *         return text + other
  */
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_text = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":759
+  /* "lxml/objectify.pyx":816
  *     def __add__(self, other):
  *         text  = _strValueOf(self)
  *         other = _strValueOf(other)             # <<<<<<<<<<<<<<
- *         if text is None:
- *             return other
+ *         return text + other
+ * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 816, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":760
+  /* "lxml/objectify.pyx":817
  *         text  = _strValueOf(self)
  *         other = _strValueOf(other)
- *         if text is None:             # <<<<<<<<<<<<<<
- *             return other
- *         if other is None:
+ *         return text + other             # <<<<<<<<<<<<<<
+ * 
+ *     def __radd__(self, other):
  */
-  __pyx_t_2 = (__pyx_v_text == Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyNumber_Add(__pyx_v_text, __pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 817, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":761
+  /* "lxml/objectify.pyx":814
+ *         return hash(textOf(self._c_node) or u'')
+ * 
+ *     def __add__(self, other):             # <<<<<<<<<<<<<<
+ *         text  = _strValueOf(self)
  *         other = _strValueOf(other)
- *         if text is None:
- *             return other             # <<<<<<<<<<<<<<
- *         if other is None:
- *             return text
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(__pyx_v_other);
-    __pyx_r = __pyx_v_other;
-    goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":760
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("lxml.objectify.StringElement.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_text);
+  __Pyx_XDECREF(__pyx_v_other);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":819
+ *         return text + other
+ * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
  *         text  = _strValueOf(self)
  *         other = _strValueOf(other)
- *         if text is None:             # <<<<<<<<<<<<<<
- *             return other
- *         if other is None:
  */
-  }
 
-  /* "lxml/objectify.pyx":762
- *         if text is None:
- *             return other
- *         if other is None:             # <<<<<<<<<<<<<<
- *             return text
- *         return text + other
- */
-  __pyx_t_3 = (__pyx_v_other == Py_None);
-  __pyx_t_2 = (__pyx_t_3 != 0);
-  if (__pyx_t_2) {
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_13__radd__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13StringElement_13__radd__ = {"__radd__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_13__radd__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_13__radd__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__radd__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_12__radd__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
-    /* "lxml/objectify.pyx":763
- *             return other
- *         if other is None:
- *             return text             # <<<<<<<<<<<<<<
- *         return text + other
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__radd__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_v_text = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__radd__", 0);
+  __Pyx_INCREF(__pyx_v_other);
+
+  /* "lxml/objectify.pyx":820
  * 
+ *     def __radd__(self, other):
+ *         text  = _strValueOf(self)             # <<<<<<<<<<<<<<
+ *         other = _strValueOf(other)
+ *         return other + text
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(__pyx_v_text);
-    __pyx_r = __pyx_v_text;
-    goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 820, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_text = __pyx_t_1;
+  __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":762
- *         if text is None:
- *             return other
- *         if other is None:             # <<<<<<<<<<<<<<
- *             return text
- *         return text + other
+  /* "lxml/objectify.pyx":821
+ *     def __radd__(self, other):
+ *         text  = _strValueOf(self)
+ *         other = _strValueOf(other)             # <<<<<<<<<<<<<<
+ *         return other + text
+ * 
  */
-  }
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 821, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":764
- *         if other is None:
- *             return text
- *         return text + other             # <<<<<<<<<<<<<<
+  /* "lxml/objectify.pyx":822
+ *         text  = _strValueOf(self)
+ *         other = _strValueOf(other)
+ *         return other + text             # <<<<<<<<<<<<<<
  * 
  *     def __mul__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_text, __pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_other, __pyx_v_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":757
- *         return hash(textOf(self._c_node) or u'')
+  /* "lxml/objectify.pyx":819
+ *         return text + other
  * 
- *     def __add__(self, other):             # <<<<<<<<<<<<<<
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
  *         text  = _strValueOf(self)
  *         other = _strValueOf(other)
  */
@@ -12701,7 +14128,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_10__add__(PyObject *_
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("lxml.objectify.StringElement.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("lxml.objectify.StringElement.__radd__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_text);
@@ -12711,28 +14138,28 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_10__add__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":766
- *         return text + other
+/* "lxml/objectify.pyx":824
+ *         return other + text
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
  *         if isinstance(self, StringElement):
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_13__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_13__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_15__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_15__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_12__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_14__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_14__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -12745,30 +14172,42 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__mul__(PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__mul__", 0);
 
-  /* "lxml/objectify.pyx":767
+  /* "lxml/objectify.pyx":825
  * 
  *     def __mul__(self, other):
  *         if isinstance(self, StringElement):             # <<<<<<<<<<<<<<
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  *         elif isinstance(other, StringElement):
  */
   __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_self, __pyx_ptype_4lxml_9objectify_StringElement); 
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":768
+    /* "lxml/objectify.pyx":826
  *     def __mul__(self, other):
  *         if isinstance(self, StringElement):
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)             # <<<<<<<<<<<<<<
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)             # <<<<<<<<<<<<<<
  *         elif isinstance(other, StringElement):
- *             return _numericValueOf(self) * textOf((<StringElement>other)._c_node)
+ *             return _numericValueOf(self) * (textOf((<StringElement>other)._c_node) or '')
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = textOf(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self)->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_4 = textOf(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self)->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 826, __pyx_L1_error)
+    if (!__pyx_t_2) {
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    } else {
+      __Pyx_INCREF(__pyx_t_4);
+      __pyx_t_3 = __pyx_t_4;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      goto __pyx_L4_bool_binop_done;
+    }
+    __Pyx_INCREF(__pyx_kp_s_);
+    __pyx_t_3 = __pyx_kp_s_;
+    __pyx_L4_bool_binop_done:;
+    __pyx_t_4 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 826, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -12776,39 +14215,51 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__mul__(PyObject *_
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":767
+    /* "lxml/objectify.pyx":825
  * 
  *     def __mul__(self, other):
  *         if isinstance(self, StringElement):             # <<<<<<<<<<<<<<
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  *         elif isinstance(other, StringElement):
  */
   }
 
-  /* "lxml/objectify.pyx":769
+  /* "lxml/objectify.pyx":827
  *         if isinstance(self, StringElement):
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  *         elif isinstance(other, StringElement):             # <<<<<<<<<<<<<<
- *             return _numericValueOf(self) * textOf((<StringElement>other)._c_node)
+ *             return _numericValueOf(self) * (textOf((<StringElement>other)._c_node) or '')
  *         else:
  */
   __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_4lxml_9objectify_StringElement); 
   __pyx_t_1 = (__pyx_t_2 != 0);
-  if (likely(__pyx_t_1)) {
+  if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":770
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+    /* "lxml/objectify.pyx":828
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  *         elif isinstance(other, StringElement):
- *             return _numericValueOf(self) * textOf((<StringElement>other)._c_node)             # <<<<<<<<<<<<<<
+ *             return _numericValueOf(self) * (textOf((<StringElement>other)._c_node) or '')             # <<<<<<<<<<<<<<
  *         else:
- *             raise TypeError, u"invalid types for * operator"
+ *             return NotImplemented
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 770, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 828, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = textOf(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_other)->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error)
+    __pyx_t_3 = textOf(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_other)->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 828, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 828, __pyx_L1_error)
+    if (!__pyx_t_1) {
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else {
+      __Pyx_INCREF(__pyx_t_3);
+      __pyx_t_4 = __pyx_t_3;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      goto __pyx_L6_bool_binop_done;
+    }
+    __Pyx_INCREF(__pyx_kp_s_);
+    __pyx_t_4 = __pyx_kp_s_;
+    __pyx_L6_bool_binop_done:;
+    __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 828, __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;
@@ -12816,33 +14267,35 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__mul__(PyObject *_
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":769
+    /* "lxml/objectify.pyx":827
  *         if isinstance(self, StringElement):
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  *         elif isinstance(other, StringElement):             # <<<<<<<<<<<<<<
- *             return _numericValueOf(self) * textOf((<StringElement>other)._c_node)
+ *             return _numericValueOf(self) * (textOf((<StringElement>other)._c_node) or '')
  *         else:
  */
   }
 
-  /* "lxml/objectify.pyx":772
- *             return _numericValueOf(self) * textOf((<StringElement>other)._c_node)
+  /* "lxml/objectify.pyx":830
+ *             return _numericValueOf(self) * (textOf((<StringElement>other)._c_node) or '')
  *         else:
- *             raise TypeError, u"invalid types for * operator"             # <<<<<<<<<<<<<<
+ *             return NotImplemented             # <<<<<<<<<<<<<<
  * 
- *     def __mod__(self, other):
+ *     def __rmul__(self, other):
  */
   /*else*/ {
-    __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_invalid_types_for_operator, 0, 0);
-    __PYX_ERR(0, 772, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(__pyx_builtin_NotImplemented);
+    __pyx_r = __pyx_builtin_NotImplemented;
+    goto __pyx_L0;
   }
 
-  /* "lxml/objectify.pyx":766
- *         return text + other
+  /* "lxml/objectify.pyx":824
+ *         return other + text
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
  *         if isinstance(self, StringElement):
- *             return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+ *             return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
  */
 
   /* function exit code */
@@ -12858,59 +14311,159 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_12__mul__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":774
- *             raise TypeError, u"invalid types for * operator"
+/* "lxml/objectify.pyx":832
+ *             return NotImplemented
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_17__rmul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13StringElement_17__rmul__ = {"__rmul__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_17__rmul__, METH_O, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_17__rmul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__rmul__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_16__rmul__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__rmul__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self, PyObject *__pyx_v_other) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__rmul__", 0);
+
+  /* "lxml/objectify.pyx":833
+ * 
+ *     def __rmul__(self, other):
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')             # <<<<<<<<<<<<<<
+ * 
+ *     def __mod__(self, other):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__numericValueOf(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 833, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 833, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 833, __pyx_L1_error)
+  if (!__pyx_t_4) {
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __Pyx_INCREF(__pyx_t_3);
+    __pyx_t_2 = __pyx_t_3;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L3_bool_binop_done;
+  }
+  __Pyx_INCREF(__pyx_kp_s_);
+  __pyx_t_2 = __pyx_kp_s_;
+  __pyx_L3_bool_binop_done:;
+  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 833, __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_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":832
+ *             return NotImplemented
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("lxml.objectify.StringElement.__rmul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":835
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
  * 
  *     def __mod__(self, other):             # <<<<<<<<<<<<<<
- *         return _strValueOf(self) % other
+ *         return (_strValueOf(self) or '') % other
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_15__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_15__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_19__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_19__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__mod__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_14__mod__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_18__mod__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_14__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__mod__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__mod__", 0);
 
-  /* "lxml/objectify.pyx":775
+  /* "lxml/objectify.pyx":836
  * 
  *     def __mod__(self, other):
- *         return _strValueOf(self) % other             # <<<<<<<<<<<<<<
+ *         return (_strValueOf(self) or '') % other             # <<<<<<<<<<<<<<
  * 
  *     def __int__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Remainder(__pyx_t_1, __pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__strValueOf(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 836, __pyx_L1_error)
+  if (!__pyx_t_3) {
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  } else {
+    __Pyx_INCREF(__pyx_t_2);
+    __pyx_t_1 = __pyx_t_2;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    goto __pyx_L3_bool_binop_done;
+  }
+  __Pyx_INCREF(__pyx_kp_s_);
+  __pyx_t_1 = __pyx_kp_s_;
+  __pyx_L3_bool_binop_done:;
+  __pyx_t_2 = PyNumber_Remainder(__pyx_t_1, __pyx_v_other); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __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;
 
-  /* "lxml/objectify.pyx":774
- *             raise TypeError, u"invalid types for * operator"
+  /* "lxml/objectify.pyx":835
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
  * 
  *     def __mod__(self, other):             # <<<<<<<<<<<<<<
- *         return _strValueOf(self) % other
+ *         return (_strValueOf(self) or '') % other
  * 
  */
 
@@ -12926,8 +14479,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_14__mod__(PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":777
- *         return _strValueOf(self) % other
+/* "lxml/objectify.pyx":838
+ *         return (_strValueOf(self) or '') % other
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
  *         return int(textOf(self._c_node))
@@ -12935,19 +14488,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_14__mod__(PyObject *_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_17__int__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_17__int__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_21__int__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_21__int__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__int__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_16__int__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_20__int__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__int__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__int__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -12957,7 +14510,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__int__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__int__", 0);
 
-  /* "lxml/objectify.pyx":778
+  /* "lxml/objectify.pyx":839
  * 
  *     def __int__(self):
  *         return int(textOf(self._c_node))             # <<<<<<<<<<<<<<
@@ -12965,17 +14518,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__int__(struct __py
  *     def __long__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 839, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __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;
 
-  /* "lxml/objectify.pyx":777
- *         return _strValueOf(self) % other
+  /* "lxml/objectify.pyx":838
+ *         return (_strValueOf(self) or '') % other
  * 
  *     def __int__(self):             # <<<<<<<<<<<<<<
  *         return int(textOf(self._c_node))
@@ -12994,7 +14547,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__int__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":780
+/* "lxml/objectify.pyx":841
  *         return int(textOf(self._c_node))
  * 
  *     def __long__(self):             # <<<<<<<<<<<<<<
@@ -13004,12 +14557,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_16__int__(struct __py
 
 /* Python wrapper */
 #if PY_MAJOR_VERSION < 3
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_19__long__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_19__long__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_23__long__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_23__long__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__long__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_18__long__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_22__long__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
@@ -13018,7 +14571,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_19__long__(PyObject *
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
 #if PY_MAJOR_VERSION < 3
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__long__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13028,7 +14581,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__long__", 0);
 
-  /* "lxml/objectify.pyx":781
+  /* "lxml/objectify.pyx":842
  * 
  *     def __long__(self):
  *         return long(textOf(self._c_node))             # <<<<<<<<<<<<<<
@@ -13036,16 +14589,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __p
  *     def __float__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyLong_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyLong_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __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;
 
-  /* "lxml/objectify.pyx":780
+  /* "lxml/objectify.pyx":841
  *         return int(textOf(self._c_node))
  * 
  *     def __long__(self):             # <<<<<<<<<<<<<<
@@ -13066,7 +14619,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __p
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "lxml/objectify.pyx":783
+/* "lxml/objectify.pyx":844
  *         return long(textOf(self._c_node))
  * 
  *     def __float__(self):             # <<<<<<<<<<<<<<
@@ -13075,19 +14628,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __p
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_21__float__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_21__float__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_25__float__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_25__float__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__float__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_20__float__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_24__float__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__float__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_24__float__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13097,7 +14650,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__float__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__float__", 0);
 
-  /* "lxml/objectify.pyx":784
+  /* "lxml/objectify.pyx":845
  * 
  *     def __float__(self):
  *         return float(textOf(self._c_node))             # <<<<<<<<<<<<<<
@@ -13105,16 +14658,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__float__(struct __
  *     def __complex__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyNumber_Float(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyNumber_Float(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 845, __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;
 
-  /* "lxml/objectify.pyx":783
+  /* "lxml/objectify.pyx":844
  *         return long(textOf(self._c_node))
  * 
  *     def __float__(self):             # <<<<<<<<<<<<<<
@@ -13134,7 +14687,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__float__(struct __
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":786
+/* "lxml/objectify.pyx":847
  *         return float(textOf(self._c_node))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
@@ -13143,20 +14696,20 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_20__float__(struct __
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_23__complex__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_4lxml_9objectify_13StringElement_23__complex__ = {"__complex__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_23__complex__, METH_NOARGS, 0};
-static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_23__complex__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_27__complex__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_4lxml_9objectify_13StringElement_27__complex__ = {"__complex__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_27__complex__, METH_NOARGS, 0};
+static PyObject *__pyx_pw_4lxml_9objectify_13StringElement_27__complex__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__complex__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_22__complex__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_13StringElement_26__complex__(((struct __pyx_obj_4lxml_9objectify_StringElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__complex__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_26__complex__(struct __pyx_obj_4lxml_9objectify_StringElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13166,24 +14719,24 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__complex__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__complex__", 0);
 
-  /* "lxml/objectify.pyx":787
+  /* "lxml/objectify.pyx":848
  * 
  *     def __complex__(self):
  *         return complex(textOf(self._c_node))             # <<<<<<<<<<<<<<
  * 
- * cdef class NoneElement(ObjectifiedDataElement):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyComplex_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyComplex_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __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;
 
-  /* "lxml/objectify.pyx":786
+  /* "lxml/objectify.pyx":847
  *         return float(textOf(self._c_node))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
@@ -13203,7 +14756,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__complex__(struct
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":790
+/* "lxml/objectify.pyx":852
  * 
  * cdef class NoneElement(ObjectifiedDataElement):
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -13229,7 +14782,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement___str__(CYTHON_UNUSED s
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__str__", 0);
 
-  /* "lxml/objectify.pyx":791
+  /* "lxml/objectify.pyx":853
  * cdef class NoneElement(ObjectifiedDataElement):
  *     def __str__(self):
  *         return u"None"             # <<<<<<<<<<<<<<
@@ -13241,7 +14794,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement___str__(CYTHON_UNUSED s
   __pyx_r = __pyx_n_u_None;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":790
+  /* "lxml/objectify.pyx":852
  * 
  * cdef class NoneElement(ObjectifiedDataElement):
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -13256,7 +14809,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement___str__(CYTHON_UNUSED s
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":793
+/* "lxml/objectify.pyx":855
  *         return u"None"
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -13282,19 +14835,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_2__repr__(CYTHON_UNUSED
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/objectify.pyx":794
+  /* "lxml/objectify.pyx":856
  * 
  *     def __repr__(self):
  *         return "None"             # <<<<<<<<<<<<<<
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_n_s_None);
   __pyx_r = __pyx_n_s_None;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":793
+  /* "lxml/objectify.pyx":855
  *         return u"None"
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -13309,35 +14862,35 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_2__repr__(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":796
+/* "lxml/objectify.pyx":858
  *         return "None"
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return False
  * 
  */
 
 /* Python wrapper */
-static int __pyx_pw_4lxml_9objectify_11NoneElement_5__nonzero__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_4lxml_9objectify_11NoneElement_5__nonzero__(PyObject *__pyx_v_self) {
+static int __pyx_pw_4lxml_9objectify_11NoneElement_5__bool__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_4lxml_9objectify_11NoneElement_5__bool__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__nonzero__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_11NoneElement_4__nonzero__(((struct __pyx_obj_4lxml_9objectify_NoneElement *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_11NoneElement_4__bool__(((struct __pyx_obj_4lxml_9objectify_NoneElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_4lxml_9objectify_11NoneElement_4__nonzero__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self) {
+static int __pyx_pf_4lxml_9objectify_11NoneElement_4__bool__(CYTHON_UNUSED struct __pyx_obj_4lxml_9objectify_NoneElement *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__nonzero__", 0);
+  __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "lxml/objectify.pyx":797
+  /* "lxml/objectify.pyx":859
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  *         return False             # <<<<<<<<<<<<<<
  * 
  *     def __richcmp__(self, other, int op):
@@ -13345,10 +14898,10 @@ static int __pyx_pf_4lxml_9objectify_11NoneElement_4__nonzero__(CYTHON_UNUSED st
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":796
+  /* "lxml/objectify.pyx":858
  *         return "None"
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return False
  * 
  */
@@ -13359,7 +14912,7 @@ static int __pyx_pf_4lxml_9objectify_11NoneElement_4__nonzero__(CYTHON_UNUSED st
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":799
+/* "lxml/objectify.pyx":861
  *         return False
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -13392,7 +14945,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__richcmp__", 0);
 
-  /* "lxml/objectify.pyx":800
+  /* "lxml/objectify.pyx":862
  * 
  *     def __richcmp__(self, other, int op):
  *         if other is None or self is None:             # <<<<<<<<<<<<<<
@@ -13412,7 +14965,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":801
+    /* "lxml/objectify.pyx":863
  *     def __richcmp__(self, other, int op):
  *         if other is None or self is None:
  *             return python.PyObject_RichCompare(None, None, op)             # <<<<<<<<<<<<<<
@@ -13420,13 +14973,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
  *             return python.PyObject_RichCompare(None, other, op)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = PyObject_RichCompare(Py_None, Py_None, __pyx_v_op); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 801, __pyx_L1_error)
+    __pyx_t_4 = PyObject_RichCompare(Py_None, Py_None, __pyx_v_op); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 863, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":800
+    /* "lxml/objectify.pyx":862
  * 
  *     def __richcmp__(self, other, int op):
  *         if other is None or self is None:             # <<<<<<<<<<<<<<
@@ -13435,7 +14988,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
  */
   }
 
-  /* "lxml/objectify.pyx":802
+  /* "lxml/objectify.pyx":864
  *         if other is None or self is None:
  *             return python.PyObject_RichCompare(None, None, op)
  *         if isinstance(self, NoneElement):             # <<<<<<<<<<<<<<
@@ -13446,7 +14999,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":803
+    /* "lxml/objectify.pyx":865
  *             return python.PyObject_RichCompare(None, None, op)
  *         if isinstance(self, NoneElement):
  *             return python.PyObject_RichCompare(None, other, op)             # <<<<<<<<<<<<<<
@@ -13454,13 +15007,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
  *             return python.PyObject_RichCompare(self, None, op)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = PyObject_RichCompare(Py_None, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 803, __pyx_L1_error)
+    __pyx_t_4 = PyObject_RichCompare(Py_None, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 865, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":802
+    /* "lxml/objectify.pyx":864
  *         if other is None or self is None:
  *             return python.PyObject_RichCompare(None, None, op)
  *         if isinstance(self, NoneElement):             # <<<<<<<<<<<<<<
@@ -13469,7 +15022,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
  */
   }
 
-  /* "lxml/objectify.pyx":805
+  /* "lxml/objectify.pyx":867
  *             return python.PyObject_RichCompare(None, other, op)
  *         else:
  *             return python.PyObject_RichCompare(self, None, op)             # <<<<<<<<<<<<<<
@@ -13478,14 +15031,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_self), Py_None, __pyx_v_op); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 805, __pyx_L1_error)
+    __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_self), Py_None, __pyx_v_op); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 867, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
   }
 
-  /* "lxml/objectify.pyx":799
+  /* "lxml/objectify.pyx":861
  *         return False
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -13504,7 +15057,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_6__richcmp__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":807
+/* "lxml/objectify.pyx":869
  *             return python.PyObject_RichCompare(self, None, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -13534,18 +15087,18 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_11NoneElement_8__hash__(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__hash__", 0);
 
-  /* "lxml/objectify.pyx":808
+  /* "lxml/objectify.pyx":870
  * 
  *     def __hash__(self):
  *         return hash(None)             # <<<<<<<<<<<<<<
  * 
  *     @property
  */
-  __pyx_t_1 = PyObject_Hash(Py_None); if (unlikely(__pyx_t_1 == ((Py_hash_t)-1))) __PYX_ERR(0, 808, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Hash(Py_None); if (unlikely(__pyx_t_1 == ((Py_hash_t)-1))) __PYX_ERR(0, 870, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":807
+  /* "lxml/objectify.pyx":869
  *             return python.PyObject_RichCompare(self, None, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -13563,7 +15116,7 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_11NoneElement_8__hash__(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":811
+/* "lxml/objectify.pyx":873
  * 
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -13589,7 +15142,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_5pyval___get__(CYTHON_U
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/objectify.pyx":812
+  /* "lxml/objectify.pyx":874
  *     @property
  *     def pyval(self):
  *         return None             # <<<<<<<<<<<<<<
@@ -13600,7 +15153,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_5pyval___get__(CYTHON_U
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":811
+  /* "lxml/objectify.pyx":873
  * 
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -13615,7 +15168,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11NoneElement_5pyval___get__(CYTHON_U
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":821
+/* "lxml/objectify.pyx":883
  *     Python's bool type.
  *     """
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -13646,14 +15199,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement__init(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_init", 0);
 
-  /* "lxml/objectify.pyx":822
+  /* "lxml/objectify.pyx":884
  *     """
  *     def _init(self):
  *         self._parse_value = __parseBool             # <<<<<<<<<<<<<<
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_parseBool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_parseBool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 884, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->__pyx_base.__pyx_base._parse_value);
@@ -13661,7 +15214,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement__init(struct __pyx_obj_
   __pyx_v_self->__pyx_base.__pyx_base._parse_value = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":821
+  /* "lxml/objectify.pyx":883
  *     Python's bool type.
  *     """
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -13682,28 +15235,28 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement__init(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":824
+/* "lxml/objectify.pyx":886
  *         self._parse_value = __parseBool
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return __parseBool(textOf(self._c_node))
  * 
  */
 
 /* Python wrapper */
-static int __pyx_pw_4lxml_9objectify_11BoolElement_3__nonzero__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_4lxml_9objectify_11BoolElement_3__nonzero__(PyObject *__pyx_v_self) {
+static int __pyx_pw_4lxml_9objectify_11BoolElement_3__bool__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_4lxml_9objectify_11BoolElement_3__bool__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__nonzero__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_2__nonzero__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_2__bool__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_4lxml_9objectify_11BoolElement_2__nonzero__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
+static int __pyx_pf_4lxml_9objectify_11BoolElement_2__bool__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13711,26 +15264,26 @@ static int __pyx_pf_4lxml_9objectify_11BoolElement_2__nonzero__(struct __pyx_obj
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__nonzero__", 0);
+  __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "lxml/objectify.pyx":825
+  /* "lxml/objectify.pyx":887
  * 
- *     def __nonzero__(self):
+ *     def __bool__(self):
  *         return __parseBool(textOf(self._c_node))             # <<<<<<<<<<<<<<
  * 
- *     def __richcmp__(self, other, int op):
+ *     def __int__(self):
  */
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 825, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 825, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 887, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":824
+  /* "lxml/objectify.pyx":886
  *         self._parse_value = __parseBool
  * 
- *     def __nonzero__(self):             # <<<<<<<<<<<<<<
+ *     def __bool__(self):             # <<<<<<<<<<<<<<
  *         return __parseBool(textOf(self._c_node))
  * 
  */
@@ -13738,35 +15291,171 @@ static int __pyx_pf_4lxml_9objectify_11BoolElement_2__nonzero__(struct __pyx_obj
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("lxml.objectify.BoolElement.__nonzero__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("lxml.objectify.BoolElement.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":827
+/* "lxml/objectify.pyx":889
+ *         return __parseBool(textOf(self._c_node))
+ * 
+ *     def __int__(self):             # <<<<<<<<<<<<<<
+ *         return 0 + __parseBool(textOf(self._c_node))
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_5__int__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_5__int__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__int__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_4__int__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__int__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__int__", 0);
+
+  /* "lxml/objectify.pyx":890
+ * 
+ *     def __int__(self):
+ *         return 0 + __parseBool(textOf(self._c_node))             # <<<<<<<<<<<<<<
+ * 
+ *     def __float__(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 890, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_long((0 + __pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":889
  *         return __parseBool(textOf(self._c_node))
  * 
+ *     def __int__(self):             # <<<<<<<<<<<<<<
+ *         return 0 + __parseBool(textOf(self._c_node))
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("lxml.objectify.BoolElement.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":892
+ *         return 0 + __parseBool(textOf(self._c_node))
+ * 
+ *     def __float__(self):             # <<<<<<<<<<<<<<
+ *         return 0.0 + __parseBool(textOf(self._c_node))
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_7__float__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_7__float__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__float__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_6__float__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_6__float__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__float__", 0);
+
+  /* "lxml/objectify.pyx":893
+ * 
+ *     def __float__(self):
+ *         return 0.0 + __parseBool(textOf(self._c_node))             # <<<<<<<<<<<<<<
+ * 
+ *     def __richcmp__(self, other, int op):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 893, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyFloat_FromDouble((0.0 + __pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "lxml/objectify.pyx":892
+ *         return 0 + __parseBool(textOf(self._c_node))
+ * 
+ *     def __float__(self):             # <<<<<<<<<<<<<<
+ *         return 0.0 + __parseBool(textOf(self._c_node))
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("lxml.objectify.BoolElement.__float__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "lxml/objectify.pyx":895
+ *         return 0.0 + __parseBool(textOf(self._c_node))
+ * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
  *         return _richcmpPyvals(self, other, op)
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_9__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_9__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_8__richcmp__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__richcmp__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13775,7 +15464,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__richcmp__", 0);
 
-  /* "lxml/objectify.pyx":828
+  /* "lxml/objectify.pyx":896
  * 
  *     def __richcmp__(self, other, int op):
  *         return _richcmpPyvals(self, other, op)             # <<<<<<<<<<<<<<
@@ -13783,14 +15472,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(struct __p
  *     def __hash__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__richcmpPyvals(((PyObject *)__pyx_v_self), __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__richcmpPyvals(((PyObject *)__pyx_v_self), __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":827
- *         return __parseBool(textOf(self._c_node))
+  /* "lxml/objectify.pyx":895
+ *         return 0.0 + __parseBool(textOf(self._c_node))
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
  *         return _richcmpPyvals(self, other, op)
@@ -13808,7 +15497,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":830
+/* "lxml/objectify.pyx":898
  *         return _richcmpPyvals(self, other, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -13817,19 +15506,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_4__richcmp__(struct __p
  */
 
 /* Python wrapper */
-static Py_hash_t __pyx_pw_4lxml_9objectify_11BoolElement_7__hash__(PyObject *__pyx_v_self); /*proto*/
-static Py_hash_t __pyx_pw_4lxml_9objectify_11BoolElement_7__hash__(PyObject *__pyx_v_self) {
+static Py_hash_t __pyx_pw_4lxml_9objectify_11BoolElement_11__hash__(PyObject *__pyx_v_self); /*proto*/
+static Py_hash_t __pyx_pw_4lxml_9objectify_11BoolElement_11__hash__(PyObject *__pyx_v_self) {
   Py_hash_t __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_6__hash__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_10__hash__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_6__hash__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
+static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_10__hash__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
   Py_hash_t __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13840,25 +15529,25 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_6__hash__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__hash__", 0);
 
-  /* "lxml/objectify.pyx":831
+  /* "lxml/objectify.pyx":899
  * 
  *     def __hash__(self):
  *         return hash(__parseBool(textOf(self._c_node)))             # <<<<<<<<<<<<<<
  * 
  *     def __str__(self):
  */
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 899, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_hash_t)-1))) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_3 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_hash_t)-1))) __PYX_ERR(0, 899, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":830
+  /* "lxml/objectify.pyx":898
  *         return _richcmpPyvals(self, other, op)
  * 
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -13877,7 +15566,7 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_6__hash__(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":833
+/* "lxml/objectify.pyx":901
  *         return hash(__parseBool(textOf(self._c_node)))
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -13886,19 +15575,19 @@ static Py_hash_t __pyx_pf_4lxml_9objectify_11BoolElement_6__hash__(struct __pyx_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_9__str__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_9__str__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_13__str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_13__str__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_8__str__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_12__str__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_12__str__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13909,7 +15598,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__str__", 0);
 
-  /* "lxml/objectify.pyx":834
+  /* "lxml/objectify.pyx":902
  * 
  *     def __str__(self):
  *         return unicode(__parseBool(textOf(self._c_node)))             # <<<<<<<<<<<<<<
@@ -13917,20 +15606,20 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_o
  *     def __repr__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 902, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":833
+  /* "lxml/objectify.pyx":901
  *         return hash(__parseBool(textOf(self._c_node)))
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -13950,7 +15639,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":836
+/* "lxml/objectify.pyx":904
  *         return unicode(__parseBool(textOf(self._c_node)))
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -13959,19 +15648,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_o
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_11__repr__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_11__repr__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_15__repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_4lxml_9objectify_11BoolElement_15__repr__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_10__repr__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
+  __pyx_r = __pyx_pf_4lxml_9objectify_11BoolElement_14__repr__(((struct __pyx_obj_4lxml_9objectify_BoolElement *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_10__repr__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
+static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_14__repr__(struct __pyx_obj_4lxml_9objectify_BoolElement *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -13982,7 +15671,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_10__repr__(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/objectify.pyx":837
+  /* "lxml/objectify.pyx":905
  * 
  *     def __repr__(self):
  *         return repr(__parseBool(textOf(self._c_node)))             # <<<<<<<<<<<<<<
@@ -13990,20 +15679,20 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_10__repr__(struct __pyx
  *     @property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 905, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 905, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 905, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_3 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":836
+  /* "lxml/objectify.pyx":904
  *         return unicode(__parseBool(textOf(self._c_node)))
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -14023,7 +15712,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_10__repr__(struct __pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":840
+/* "lxml/objectify.pyx":908
  * 
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -14054,25 +15743,25 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_5pyval___get__(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/objectify.pyx":841
+  /* "lxml/objectify.pyx":909
  *     @property
  *     def pyval(self):
  *         return __parseBool(textOf(self._c_node))             # <<<<<<<<<<<<<<
  * 
- * def __checkBool(s):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify___parseBool(__pyx_t_1, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 909, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":840
+  /* "lxml/objectify.pyx":908
  * 
  *     @property
  *     def pyval(self):             # <<<<<<<<<<<<<<
@@ -14091,8 +15780,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_5pyval___get__(struct _
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":843
- *         return __parseBool(textOf(self._c_node))
+/* "lxml/objectify.pyx":912
+ * 
  * 
  * def __checkBool(s):             # <<<<<<<<<<<<<<
  *     cdef int value = -1
@@ -14125,7 +15814,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__checkBool", 0);
 
-  /* "lxml/objectify.pyx":844
+  /* "lxml/objectify.pyx":913
  * 
  * def __checkBool(s):
  *     cdef int value = -1             # <<<<<<<<<<<<<<
@@ -14134,7 +15823,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
  */
   __pyx_v_value = -1;
 
-  /* "lxml/objectify.pyx":845
+  /* "lxml/objectify.pyx":914
  * def __checkBool(s):
  *     cdef int value = -1
  *     if s is not None:             # <<<<<<<<<<<<<<
@@ -14145,17 +15834,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":846
+    /* "lxml/objectify.pyx":915
  *     cdef int value = -1
  *     if s is not None:
  *         value = __parseBoolAsInt(s)             # <<<<<<<<<<<<<<
  *     if value == -1:
  *         raise ValueError
  */
-    __pyx_t_3 = __pyx_f_4lxml_9objectify___parseBoolAsInt(__pyx_v_s); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 846, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_9objectify___parseBoolAsInt(__pyx_v_s); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 915, __pyx_L1_error)
     __pyx_v_value = __pyx_t_3;
 
-    /* "lxml/objectify.pyx":845
+    /* "lxml/objectify.pyx":914
  * def __checkBool(s):
  *     cdef int value = -1
  *     if s is not None:             # <<<<<<<<<<<<<<
@@ -14164,7 +15853,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":847
+  /* "lxml/objectify.pyx":916
  *     if s is not None:
  *         value = __parseBoolAsInt(s)
  *     if value == -1:             # <<<<<<<<<<<<<<
@@ -14174,17 +15863,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
   __pyx_t_2 = ((__pyx_v_value == -1L) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/objectify.pyx":848
+    /* "lxml/objectify.pyx":917
  *         value = __parseBoolAsInt(s)
  *     if value == -1:
  *         raise ValueError             # <<<<<<<<<<<<<<
  * 
- * cpdef bint __parseBool(s) except -1:
+ * 
  */
     __Pyx_Raise(__pyx_builtin_ValueError, 0, 0, 0);
-    __PYX_ERR(0, 848, __pyx_L1_error)
+    __PYX_ERR(0, 917, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":847
+    /* "lxml/objectify.pyx":916
  *     if s is not None:
  *         value = __parseBoolAsInt(s)
  *     if value == -1:             # <<<<<<<<<<<<<<
@@ -14193,8 +15882,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":843
- *         return __parseBool(textOf(self._c_node))
+  /* "lxml/objectify.pyx":912
+ * 
  * 
  * def __checkBool(s):             # <<<<<<<<<<<<<<
  *     cdef int value = -1
@@ -14213,8 +15902,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_2__checkBool(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":850
- *         raise ValueError
+/* "lxml/objectify.pyx":920
+ * 
  * 
  * cpdef bint __parseBool(s) except -1:             # <<<<<<<<<<<<<<
  *     cdef int value
@@ -14238,7 +15927,7 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__parseBool", 0);
 
-  /* "lxml/objectify.pyx":852
+  /* "lxml/objectify.pyx":922
  * cpdef bint __parseBool(s) except -1:
  *     cdef int value
  *     if s is None:             # <<<<<<<<<<<<<<
@@ -14249,7 +15938,7 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":853
+    /* "lxml/objectify.pyx":923
  *     cdef int value
  *     if s is None:
  *         return False             # <<<<<<<<<<<<<<
@@ -14259,7 +15948,7 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":852
+    /* "lxml/objectify.pyx":922
  * cpdef bint __parseBool(s) except -1:
  *     cdef int value
  *     if s is None:             # <<<<<<<<<<<<<<
@@ -14268,17 +15957,17 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
  */
   }
 
-  /* "lxml/objectify.pyx":854
+  /* "lxml/objectify.pyx":924
  *     if s is None:
  *         return False
  *     value = __parseBoolAsInt(s)             # <<<<<<<<<<<<<<
  *     if value == -1:
  *         raise ValueError, f"Invalid boolean value: '{s}'"
  */
-  __pyx_t_3 = __pyx_f_4lxml_9objectify___parseBoolAsInt(__pyx_v_s); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 854, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_9objectify___parseBoolAsInt(__pyx_v_s); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 924, __pyx_L1_error)
   __pyx_v_value = __pyx_t_3;
 
-  /* "lxml/objectify.pyx":855
+  /* "lxml/objectify.pyx":925
  *         return False
  *     value = __parseBoolAsInt(s)
  *     if value == -1:             # <<<<<<<<<<<<<<
@@ -14288,14 +15977,14 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
   __pyx_t_2 = ((__pyx_v_value == -1L) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/objectify.pyx":856
+    /* "lxml/objectify.pyx":926
  *     value = __parseBoolAsInt(s)
  *     if value == -1:
  *         raise ValueError, f"Invalid boolean value: '{s}'"             # <<<<<<<<<<<<<<
  *     return value
  * 
  */
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 856, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 926, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = 0;
     __pyx_t_6 = 127;
@@ -14303,7 +15992,7 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
     __pyx_t_5 += 24;
     __Pyx_GIVEREF(__pyx_kp_u_Invalid_boolean_value);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Invalid_boolean_value);
-    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_s, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 856, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_s, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 926, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_6;
     __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
@@ -14314,14 +16003,14 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
     __pyx_t_5 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__4);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__4);
-    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 856, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 926, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_7, 0, 0);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __PYX_ERR(0, 856, __pyx_L1_error)
+    __PYX_ERR(0, 926, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":855
+    /* "lxml/objectify.pyx":925
  *         return False
  *     value = __parseBoolAsInt(s)
  *     if value == -1:             # <<<<<<<<<<<<<<
@@ -14330,18 +16019,18 @@ static int __pyx_f_4lxml_9objectify___parseBool(PyObject *__pyx_v_s, CYTHON_UNUS
  */
   }
 
-  /* "lxml/objectify.pyx":857
+  /* "lxml/objectify.pyx":927
  *     if value == -1:
  *         raise ValueError, f"Invalid boolean value: '{s}'"
  *     return value             # <<<<<<<<<<<<<<
  * 
- * cdef inline int __parseBoolAsInt(text) except -2:
+ * 
  */
   __pyx_r = __pyx_v_value;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":850
- *         raise ValueError
+  /* "lxml/objectify.pyx":920
+ * 
  * 
  * cpdef bint __parseBool(s) except -1:             # <<<<<<<<<<<<<<
  *     cdef int value
@@ -14383,8 +16072,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_4__parseBool(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__parseBool", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify___parseBool(__pyx_v_s, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 850, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify___parseBool(__pyx_v_s, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 920, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 920, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -14401,8 +16090,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_4__parseBool(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":859
- *     return value
+/* "lxml/objectify.pyx":930
+ * 
  * 
  * cdef inline int __parseBoolAsInt(text) except -2:             # <<<<<<<<<<<<<<
  *     if text == 'false':
@@ -14418,17 +16107,17 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__parseBoolAsInt", 0);
 
-  /* "lxml/objectify.pyx":860
+  /* "lxml/objectify.pyx":931
  * 
  * cdef inline int __parseBoolAsInt(text) except -2:
  *     if text == 'false':             # <<<<<<<<<<<<<<
  *         return 0
  *     elif text == 'true':
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_n_s_false, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 860, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_n_s_false, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 931, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":861
+    /* "lxml/objectify.pyx":932
  * cdef inline int __parseBoolAsInt(text) except -2:
  *     if text == 'false':
  *         return 0             # <<<<<<<<<<<<<<
@@ -14438,7 +16127,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":860
+    /* "lxml/objectify.pyx":931
  * 
  * cdef inline int __parseBoolAsInt(text) except -2:
  *     if text == 'false':             # <<<<<<<<<<<<<<
@@ -14447,17 +16136,17 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":862
+  /* "lxml/objectify.pyx":933
  *     if text == 'false':
  *         return 0
  *     elif text == 'true':             # <<<<<<<<<<<<<<
  *         return 1
  *     elif text == '0':
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_n_s_true, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 862, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_n_s_true, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 933, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":863
+    /* "lxml/objectify.pyx":934
  *         return 0
  *     elif text == 'true':
  *         return 1             # <<<<<<<<<<<<<<
@@ -14467,7 +16156,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":862
+    /* "lxml/objectify.pyx":933
  *     if text == 'false':
  *         return 0
  *     elif text == 'true':             # <<<<<<<<<<<<<<
@@ -14476,17 +16165,17 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":864
+  /* "lxml/objectify.pyx":935
  *     elif text == 'true':
  *         return 1
  *     elif text == '0':             # <<<<<<<<<<<<<<
  *         return 0
  *     elif text == '1':
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_kp_s_0, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 864, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_kp_s_0, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 935, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":865
+    /* "lxml/objectify.pyx":936
  *         return 1
  *     elif text == '0':
  *         return 0             # <<<<<<<<<<<<<<
@@ -14496,7 +16185,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":864
+    /* "lxml/objectify.pyx":935
  *     elif text == 'true':
  *         return 1
  *     elif text == '0':             # <<<<<<<<<<<<<<
@@ -14505,17 +16194,17 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":866
+  /* "lxml/objectify.pyx":937
  *     elif text == '0':
  *         return 0
  *     elif text == '1':             # <<<<<<<<<<<<<<
  *         return 1
  *     return -1
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_kp_s_1, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 866, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_text, __pyx_kp_s_1, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 937, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":867
+    /* "lxml/objectify.pyx":938
  *         return 0
  *     elif text == '1':
  *         return 1             # <<<<<<<<<<<<<<
@@ -14525,7 +16214,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":866
+    /* "lxml/objectify.pyx":937
  *     elif text == '0':
  *         return 0
  *     elif text == '1':             # <<<<<<<<<<<<<<
@@ -14534,18 +16223,18 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":868
+  /* "lxml/objectify.pyx":939
  *     elif text == '1':
  *         return 1
  *     return -1             # <<<<<<<<<<<<<<
  * 
- * cdef object _parseNumber(NumberElement element):
+ * 
  */
   __pyx_r = -1;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":859
- *     return value
+  /* "lxml/objectify.pyx":930
+ * 
  * 
  * cdef inline int __parseBoolAsInt(text) except -2:             # <<<<<<<<<<<<<<
  *     if text == 'false':
@@ -14561,8 +16250,8 @@ static CYTHON_INLINE int __pyx_f_4lxml_9objectify___parseBoolAsInt(PyObject *__p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":870
- *     return -1
+/* "lxml/objectify.pyx":942
+ * 
  * 
  * cdef object _parseNumber(NumberElement element):             # <<<<<<<<<<<<<<
  *     return element._parse_value(textOf(element._c_node))
@@ -14581,15 +16270,15 @@ static PyObject *__pyx_f_4lxml_9objectify__parseNumber(struct __pyx_obj_4lxml_9o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseNumber", 0);
 
-  /* "lxml/objectify.pyx":871
+  /* "lxml/objectify.pyx":943
  * 
  * cdef object _parseNumber(NumberElement element):
  *     return element._parse_value(textOf(element._c_node))             # <<<<<<<<<<<<<<
  * 
- * cdef object _strValueOf(obj):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = textOf(__pyx_v_element->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 871, __pyx_L1_error)
+  __pyx_t_2 = textOf(__pyx_v_element->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 943, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_element->_parse_value);
   __pyx_t_3 = __pyx_v_element->_parse_value; __pyx_t_4 = NULL;
@@ -14605,15 +16294,15 @@ static PyObject *__pyx_f_4lxml_9objectify__parseNumber(struct __pyx_obj_4lxml_9o
   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 871, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":870
- *     return -1
+  /* "lxml/objectify.pyx":942
+ * 
  * 
  * cdef object _parseNumber(NumberElement element):             # <<<<<<<<<<<<<<
  *     return element._parse_value(textOf(element._c_node))
@@ -14634,8 +16323,8 @@ static PyObject *__pyx_f_4lxml_9objectify__parseNumber(struct __pyx_obj_4lxml_9o
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":873
- *     return element._parse_value(textOf(element._c_node))
+/* "lxml/objectify.pyx":946
+ * 
  * 
  * cdef object _strValueOf(obj):             # <<<<<<<<<<<<<<
  *     if python._isString(obj):
@@ -14654,7 +16343,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_strValueOf", 0);
 
-  /* "lxml/objectify.pyx":874
+  /* "lxml/objectify.pyx":947
  * 
  * cdef object _strValueOf(obj):
  *     if python._isString(obj):             # <<<<<<<<<<<<<<
@@ -14664,7 +16353,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
   __pyx_t_1 = (_isString(__pyx_v_obj) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":875
+    /* "lxml/objectify.pyx":948
  * cdef object _strValueOf(obj):
  *     if python._isString(obj):
  *         return obj             # <<<<<<<<<<<<<<
@@ -14676,7 +16365,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
     __pyx_r = __pyx_v_obj;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":874
+    /* "lxml/objectify.pyx":947
  * 
  * cdef object _strValueOf(obj):
  *     if python._isString(obj):             # <<<<<<<<<<<<<<
@@ -14685,7 +16374,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
  */
   }
 
-  /* "lxml/objectify.pyx":876
+  /* "lxml/objectify.pyx":949
  *     if python._isString(obj):
  *         return obj
  *     if isinstance(obj, _Element):             # <<<<<<<<<<<<<<
@@ -14696,7 +16385,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":877
+    /* "lxml/objectify.pyx":950
  *         return obj
  *     if isinstance(obj, _Element):
  *         return textOf((<_Element>obj)._c_node) or u''             # <<<<<<<<<<<<<<
@@ -14704,9 +16393,9 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
  *         return u''
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = textOf(((struct LxmlElement *)__pyx_v_obj)->_c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 877, __pyx_L1_error)
+    __pyx_t_4 = textOf(((struct LxmlElement *)__pyx_v_obj)->_c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 950, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 877, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 950, __pyx_L1_error)
     if (!__pyx_t_2) {
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
@@ -14722,7 +16411,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":876
+    /* "lxml/objectify.pyx":949
  *     if python._isString(obj):
  *         return obj
  *     if isinstance(obj, _Element):             # <<<<<<<<<<<<<<
@@ -14731,7 +16420,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
  */
   }
 
-  /* "lxml/objectify.pyx":878
+  /* "lxml/objectify.pyx":951
  *     if isinstance(obj, _Element):
  *         return textOf((<_Element>obj)._c_node) or u''
  *     if obj is None:             # <<<<<<<<<<<<<<
@@ -14742,7 +16431,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":879
+    /* "lxml/objectify.pyx":952
  *         return textOf((<_Element>obj)._c_node) or u''
  *     if obj is None:
  *         return u''             # <<<<<<<<<<<<<<
@@ -14754,7 +16443,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
     __pyx_r = __pyx_kp_u_;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":878
+    /* "lxml/objectify.pyx":951
  *     if isinstance(obj, _Element):
  *         return textOf((<_Element>obj)._c_node) or u''
  *     if obj is None:             # <<<<<<<<<<<<<<
@@ -14763,22 +16452,22 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
  */
   }
 
-  /* "lxml/objectify.pyx":880
+  /* "lxml/objectify.pyx":953
  *     if obj is None:
  *         return u''
  *     return unicode(obj)             # <<<<<<<<<<<<<<
  * 
- * cdef object _numericValueOf(obj):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 880, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 953, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":873
- *     return element._parse_value(textOf(element._c_node))
+  /* "lxml/objectify.pyx":946
+ * 
  * 
  * cdef object _strValueOf(obj):             # <<<<<<<<<<<<<<
  *     if python._isString(obj):
@@ -14797,8 +16486,8 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":882
- *     return unicode(obj)
+/* "lxml/objectify.pyx":956
+ * 
  * 
  * cdef object _numericValueOf(obj):             # <<<<<<<<<<<<<<
  *     if isinstance(obj, NumberElement):
@@ -14820,7 +16509,7 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_numericValueOf", 0);
 
-  /* "lxml/objectify.pyx":883
+  /* "lxml/objectify.pyx":957
  * 
  * cdef object _numericValueOf(obj):
  *     if isinstance(obj, NumberElement):             # <<<<<<<<<<<<<<
@@ -14831,7 +16520,7 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":884
+    /* "lxml/objectify.pyx":958
  * cdef object _numericValueOf(obj):
  *     if isinstance(obj, NumberElement):
  *         return _parseNumber(<NumberElement>obj)             # <<<<<<<<<<<<<<
@@ -14839,13 +16528,13 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
  *         # not always numeric, but Python will raise the right exception
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_4lxml_9objectify__parseNumber(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_obj)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 884, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_9objectify__parseNumber(((struct __pyx_obj_4lxml_9objectify_NumberElement *)__pyx_v_obj)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 958, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":883
+    /* "lxml/objectify.pyx":957
  * 
  * cdef object _numericValueOf(obj):
  *     if isinstance(obj, NumberElement):             # <<<<<<<<<<<<<<
@@ -14854,7 +16543,7 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
  */
   }
 
-  /* "lxml/objectify.pyx":885
+  /* "lxml/objectify.pyx":959
  *     if isinstance(obj, NumberElement):
  *         return _parseNumber(<NumberElement>obj)
  *     try:             # <<<<<<<<<<<<<<
@@ -14870,7 +16559,7 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "lxml/objectify.pyx":887
+      /* "lxml/objectify.pyx":961
  *     try:
  *         # not always numeric, but Python will raise the right exception
  *         return obj.pyval             # <<<<<<<<<<<<<<
@@ -14878,13 +16567,13 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
  *         pass
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_pyval); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 887, __pyx_L4_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_pyval); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 961, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L8_try_return;
 
-      /* "lxml/objectify.pyx":885
+      /* "lxml/objectify.pyx":959
  *     if isinstance(obj, NumberElement):
  *         return _parseNumber(<NumberElement>obj)
  *     try:             # <<<<<<<<<<<<<<
@@ -14895,7 +16584,7 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
     __pyx_L4_error:;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":888
+    /* "lxml/objectify.pyx":962
  *         # not always numeric, but Python will raise the right exception
  *         return obj.pyval
  *     except AttributeError:             # <<<<<<<<<<<<<<
@@ -14910,7 +16599,7 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
     goto __pyx_L6_except_error;
     __pyx_L6_except_error:;
 
-    /* "lxml/objectify.pyx":885
+    /* "lxml/objectify.pyx":959
  *     if isinstance(obj, NumberElement):
  *         return _parseNumber(<NumberElement>obj)
  *     try:             # <<<<<<<<<<<<<<
@@ -14935,20 +16624,20 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
   }
 
-  /* "lxml/objectify.pyx":890
+  /* "lxml/objectify.pyx":964
  *     except AttributeError:
  *         pass
  *     return obj             # <<<<<<<<<<<<<<
  * 
- * cdef _richcmpPyvals(left, right, int op):
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_obj);
   __pyx_r = __pyx_v_obj;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":882
- *     return unicode(obj)
+  /* "lxml/objectify.pyx":956
+ * 
  * 
  * cdef object _numericValueOf(obj):             # <<<<<<<<<<<<<<
  *     if isinstance(obj, NumberElement):
@@ -14966,8 +16655,8 @@ static PyObject *__pyx_f_4lxml_9objectify__numericValueOf(PyObject *__pyx_v_obj)
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":892
- *     return obj
+/* "lxml/objectify.pyx":967
+ * 
  * 
  * cdef _richcmpPyvals(left, right, int op):             # <<<<<<<<<<<<<<
  *     left  = getattr(left,  'pyval', left)
@@ -14985,31 +16674,31 @@ static PyObject *__pyx_f_4lxml_9objectify__richcmpPyvals(PyObject *__pyx_v_left,
   __Pyx_INCREF(__pyx_v_left);
   __Pyx_INCREF(__pyx_v_right);
 
-  /* "lxml/objectify.pyx":893
+  /* "lxml/objectify.pyx":968
  * 
  * cdef _richcmpPyvals(left, right, int op):
  *     left  = getattr(left,  'pyval', left)             # <<<<<<<<<<<<<<
  *     right = getattr(right, 'pyval', right)
  *     return python.PyObject_RichCompare(left, right, op)
  */
-  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_left, __pyx_n_s_pyval, __pyx_v_left); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_left, __pyx_n_s_pyval, __pyx_v_left); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_left, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":894
+  /* "lxml/objectify.pyx":969
  * cdef _richcmpPyvals(left, right, int op):
  *     left  = getattr(left,  'pyval', left)
  *     right = getattr(right, 'pyval', right)             # <<<<<<<<<<<<<<
  *     return python.PyObject_RichCompare(left, right, op)
  * 
  */
-  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_right, __pyx_n_s_pyval, __pyx_v_right); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 894, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_right, __pyx_n_s_pyval, __pyx_v_right); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 969, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_right, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":895
+  /* "lxml/objectify.pyx":970
  *     left  = getattr(left,  'pyval', left)
  *     right = getattr(right, 'pyval', right)
  *     return python.PyObject_RichCompare(left, right, op)             # <<<<<<<<<<<<<<
@@ -15017,14 +16706,14 @@ static PyObject *__pyx_f_4lxml_9objectify__richcmpPyvals(PyObject *__pyx_v_left,
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_left, __pyx_v_right, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_left, __pyx_v_right, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 970, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":892
- *     return obj
+  /* "lxml/objectify.pyx":967
+ * 
  * 
  * cdef _richcmpPyvals(left, right, int op):             # <<<<<<<<<<<<<<
  *     left  = getattr(left,  'pyval', left)
@@ -15044,7 +16733,7 @@ static PyObject *__pyx_f_4lxml_9objectify__richcmpPyvals(PyObject *__pyx_v_left,
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":926
+/* "lxml/objectify.pyx":1001
  *     cdef object _type
  *     cdef list _schema_types
  *     def __init__(self, name, type_check, type_class, stringify=None):             # <<<<<<<<<<<<<<
@@ -15093,13 +16782,13 @@ static int __pyx_pw_4lxml_9objectify_6PyType_1__init__(PyObject *__pyx_v_self, P
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_type_check)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 1); __PYX_ERR(0, 926, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 1); __PYX_ERR(0, 1001, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_type_class)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 2); __PYX_ERR(0, 926, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 2); __PYX_ERR(0, 1001, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
@@ -15109,7 +16798,7 @@ static int __pyx_pw_4lxml_9objectify_6PyType_1__init__(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 926, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1001, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -15129,7 +16818,7 @@ static int __pyx_pw_4lxml_9objectify_6PyType_1__init__(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 926, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1001, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.PyType.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -15156,7 +16845,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __Pyx_INCREF(__pyx_v_name);
   __Pyx_INCREF(__pyx_v_stringify);
 
-  /* "lxml/objectify.pyx":927
+  /* "lxml/objectify.pyx":1002
  *     cdef list _schema_types
  *     def __init__(self, name, type_check, type_class, stringify=None):
  *         if isinstance(name, bytes):             # <<<<<<<<<<<<<<
@@ -15167,7 +16856,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":928
+    /* "lxml/objectify.pyx":1003
  *     def __init__(self, name, type_check, type_class, stringify=None):
  *         if isinstance(name, bytes):
  *             name = (<bytes>name).decode('ascii')             # <<<<<<<<<<<<<<
@@ -15176,14 +16865,14 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-      __PYX_ERR(0, 928, __pyx_L1_error)
+      __PYX_ERR(0, 1003, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_decode_bytes(((PyObject*)__pyx_v_name), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 928, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_decode_bytes(((PyObject*)__pyx_v_name), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1003, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":927
+    /* "lxml/objectify.pyx":1002
  *     cdef list _schema_types
  *     def __init__(self, name, type_check, type_class, stringify=None):
  *         if isinstance(name, bytes):             # <<<<<<<<<<<<<<
@@ -15193,7 +16882,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":929
+  /* "lxml/objectify.pyx":1004
  *         if isinstance(name, bytes):
  *             name = (<bytes>name).decode('ascii')
  *         elif not isinstance(name, unicode):             # <<<<<<<<<<<<<<
@@ -15204,7 +16893,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "lxml/objectify.pyx":930
+    /* "lxml/objectify.pyx":1005
  *             name = (<bytes>name).decode('ascii')
  *         elif not isinstance(name, unicode):
  *             raise TypeError, u"Type name must be a string"             # <<<<<<<<<<<<<<
@@ -15212,9 +16901,9 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  *             raise TypeError, u"Type check function must be callable (or None)"
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Type_name_must_be_a_string, 0, 0);
-    __PYX_ERR(0, 930, __pyx_L1_error)
+    __PYX_ERR(0, 1005, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":929
+    /* "lxml/objectify.pyx":1004
  *         if isinstance(name, bytes):
  *             name = (<bytes>name).decode('ascii')
  *         elif not isinstance(name, unicode):             # <<<<<<<<<<<<<<
@@ -15224,7 +16913,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":931
+  /* "lxml/objectify.pyx":1006
  *         elif not isinstance(name, unicode):
  *             raise TypeError, u"Type name must be a string"
  *         if type_check is not None and not callable(type_check):             # <<<<<<<<<<<<<<
@@ -15238,13 +16927,13 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
     __pyx_t_1 = __pyx_t_4;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyCallable_Check(__pyx_v_type_check); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 931, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyCallable_Check(__pyx_v_type_check); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1006, __pyx_L1_error)
   __pyx_t_2 = ((!(__pyx_t_4 != 0)) != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L5_bool_binop_done:;
   if (unlikely(__pyx_t_1)) {
 
-    /* "lxml/objectify.pyx":932
+    /* "lxml/objectify.pyx":1007
  *             raise TypeError, u"Type name must be a string"
  *         if type_check is not None and not callable(type_check):
  *             raise TypeError, u"Type check function must be callable (or None)"             # <<<<<<<<<<<<<<
@@ -15252,9 +16941,9 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  *                not issubclass(type_class, ObjectifiedDataElement):
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Type_check_function_must_be_call, 0, 0);
-    __PYX_ERR(0, 932, __pyx_L1_error)
+    __PYX_ERR(0, 1007, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":931
+    /* "lxml/objectify.pyx":1006
  *         elif not isinstance(name, unicode):
  *             raise TypeError, u"Type name must be a string"
  *         if type_check is not None and not callable(type_check):             # <<<<<<<<<<<<<<
@@ -15263,33 +16952,33 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  */
   }
 
-  /* "lxml/objectify.pyx":933
+  /* "lxml/objectify.pyx":1008
  *         if type_check is not None and not callable(type_check):
  *             raise TypeError, u"Type check function must be callable (or None)"
  *         if name != TREE_PYTYPE_NAME and \             # <<<<<<<<<<<<<<
  *                not issubclass(type_class, ObjectifiedDataElement):
  *             raise TypeError, \
  */
-  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 933, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1008, __pyx_L1_error)
   if (__pyx_t_2) {
   } else {
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L8_bool_binop_done;
   }
 
-  /* "lxml/objectify.pyx":934
+  /* "lxml/objectify.pyx":1009
  *             raise TypeError, u"Type check function must be callable (or None)"
  *         if name != TREE_PYTYPE_NAME and \
  *                not issubclass(type_class, ObjectifiedDataElement):             # <<<<<<<<<<<<<<
  *             raise TypeError, \
  *                 u"Data classes must inherit from ObjectifiedDataElement"
  */
-  __pyx_t_2 = PyObject_IsSubclass(__pyx_v_type_class, ((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedDataElement)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 934, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsSubclass(__pyx_v_type_class, ((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedDataElement)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1009, __pyx_L1_error)
   __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0);
   __pyx_t_1 = __pyx_t_4;
   __pyx_L8_bool_binop_done:;
 
-  /* "lxml/objectify.pyx":933
+  /* "lxml/objectify.pyx":1008
  *         if type_check is not None and not callable(type_check):
  *             raise TypeError, u"Type check function must be callable (or None)"
  *         if name != TREE_PYTYPE_NAME and \             # <<<<<<<<<<<<<<
@@ -15298,7 +16987,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  */
   if (unlikely(__pyx_t_1)) {
 
-    /* "lxml/objectify.pyx":935
+    /* "lxml/objectify.pyx":1010
  *         if name != TREE_PYTYPE_NAME and \
  *                not issubclass(type_class, ObjectifiedDataElement):
  *             raise TypeError, \             # <<<<<<<<<<<<<<
@@ -15306,9 +16995,9 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  *         self.name  = name
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Data_classes_must_inherit_from_O, 0, 0);
-    __PYX_ERR(0, 935, __pyx_L1_error)
+    __PYX_ERR(0, 1010, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":933
+    /* "lxml/objectify.pyx":1008
  *         if type_check is not None and not callable(type_check):
  *             raise TypeError, u"Type check function must be callable (or None)"
  *         if name != TREE_PYTYPE_NAME and \             # <<<<<<<<<<<<<<
@@ -15317,7 +17006,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  */
   }
 
-  /* "lxml/objectify.pyx":937
+  /* "lxml/objectify.pyx":1012
  *             raise TypeError, \
  *                 u"Data classes must inherit from ObjectifiedDataElement"
  *         self.name  = name             # <<<<<<<<<<<<<<
@@ -15330,7 +17019,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "lxml/objectify.pyx":938
+  /* "lxml/objectify.pyx":1013
  *                 u"Data classes must inherit from ObjectifiedDataElement"
  *         self.name  = name
  *         self._type = type_class             # <<<<<<<<<<<<<<
@@ -15343,7 +17032,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __Pyx_DECREF(__pyx_v_self->_type);
   __pyx_v_self->_type = __pyx_v_type_class;
 
-  /* "lxml/objectify.pyx":939
+  /* "lxml/objectify.pyx":1014
  *         self.name  = name
  *         self._type = type_class
  *         self.type_check = type_check             # <<<<<<<<<<<<<<
@@ -15356,7 +17045,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __Pyx_DECREF(__pyx_v_self->type_check);
   __pyx_v_self->type_check = __pyx_v_type_check;
 
-  /* "lxml/objectify.pyx":940
+  /* "lxml/objectify.pyx":1015
  *         self._type = type_class
  *         self.type_check = type_check
  *         if stringify is None:             # <<<<<<<<<<<<<<
@@ -15367,7 +17056,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/objectify.pyx":941
+    /* "lxml/objectify.pyx":1016
  *         self.type_check = type_check
  *         if stringify is None:
  *             stringify = unicode             # <<<<<<<<<<<<<<
@@ -15377,7 +17066,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
     __Pyx_INCREF(((PyObject *)(&PyUnicode_Type)));
     __Pyx_DECREF_SET(__pyx_v_stringify, ((PyObject *)(&PyUnicode_Type)));
 
-    /* "lxml/objectify.pyx":940
+    /* "lxml/objectify.pyx":1015
  *         self._type = type_class
  *         self.type_check = type_check
  *         if stringify is None:             # <<<<<<<<<<<<<<
@@ -15386,7 +17075,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
  */
   }
 
-  /* "lxml/objectify.pyx":942
+  /* "lxml/objectify.pyx":1017
  *         if stringify is None:
  *             stringify = unicode
  *         self.stringify = stringify             # <<<<<<<<<<<<<<
@@ -15399,14 +17088,14 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __Pyx_DECREF(__pyx_v_self->stringify);
   __pyx_v_self->stringify = __pyx_v_stringify;
 
-  /* "lxml/objectify.pyx":943
+  /* "lxml/objectify.pyx":1018
  *             stringify = unicode
  *         self.stringify = stringify
  *         self._schema_types = []             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 943, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1018, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __Pyx_GOTREF(__pyx_v_self->_schema_types);
@@ -15414,7 +17103,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   __pyx_v_self->_schema_types = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":926
+  /* "lxml/objectify.pyx":1001
  *     cdef object _type
  *     cdef list _schema_types
  *     def __init__(self, name, type_check, type_class, stringify=None):             # <<<<<<<<<<<<<<
@@ -15436,7 +17125,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType___init__(struct __pyx_obj_4lxml_9ob
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":945
+/* "lxml/objectify.pyx":1020
  *         self._schema_types = []
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -15467,7 +17156,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_2__repr__(struct __pyx_obj_4l
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/objectify.pyx":946
+  /* "lxml/objectify.pyx":1021
  * 
  *     def __repr__(self):
  *         return "PyType(%s, %s)" % (self.name, self._type.__name__)             # <<<<<<<<<<<<<<
@@ -15475,9 +17164,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_2__repr__(struct __pyx_obj_4l
  *     def register(self, before=None, after=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_type, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_type, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1021, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1021, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -15485,14 +17174,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_2__repr__(struct __pyx_obj_4l
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_PyType_s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_PyType_s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1021, __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;
 
-  /* "lxml/objectify.pyx":945
+  /* "lxml/objectify.pyx":1020
  *         self._schema_types = []
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -15512,7 +17201,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_2__repr__(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":948
+/* "lxml/objectify.pyx":1023
  *         return "PyType(%s, %s)" % (self.name, self._type.__name__)
  * 
  *     def register(self, before=None, after=None):             # <<<<<<<<<<<<<<
@@ -15564,7 +17253,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_6PyType_5register(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "register") < 0)) __PYX_ERR(0, 948, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "register") < 0)) __PYX_ERR(0, 1023, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -15581,7 +17270,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_6PyType_5register(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("register", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 948, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("register", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1023, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.PyType.register", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -15624,17 +17313,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
   __Pyx_INCREF(__pyx_v_before);
   __Pyx_INCREF(__pyx_v_after);
 
-  /* "lxml/objectify.pyx":958
+  /* "lxml/objectify.pyx":1033
  *         ignored.  Raises ValueError if the dependencies cannot be fulfilled.
  *         """
  *         if self.name == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
  *             raise ValueError, u"Cannot register tree type"
  *         if self.type_check is not None:
  */
-  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->name, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 958, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->name, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1033, __pyx_L1_error)
   if (unlikely(__pyx_t_1)) {
 
-    /* "lxml/objectify.pyx":959
+    /* "lxml/objectify.pyx":1034
  *         """
  *         if self.name == TREE_PYTYPE_NAME:
  *             raise ValueError, u"Cannot register tree type"             # <<<<<<<<<<<<<<
@@ -15642,9 +17331,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  *             for item in _TYPE_CHECKS:
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Cannot_register_tree_type, 0, 0);
-    __PYX_ERR(0, 959, __pyx_L1_error)
+    __PYX_ERR(0, 1034, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":958
+    /* "lxml/objectify.pyx":1033
  *         ignored.  Raises ValueError if the dependencies cannot be fulfilled.
  *         """
  *         if self.name == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
@@ -15653,7 +17342,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
   }
 
-  /* "lxml/objectify.pyx":960
+  /* "lxml/objectify.pyx":1035
  *         if self.name == TREE_PYTYPE_NAME:
  *             raise ValueError, u"Cannot register tree type"
  *         if self.type_check is not None:             # <<<<<<<<<<<<<<
@@ -15664,7 +17353,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":961
+    /* "lxml/objectify.pyx":1036
  *             raise ValueError, u"Cannot register tree type"
  *         if self.type_check is not None:
  *             for item in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -15673,46 +17362,46 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
     if (unlikely(__pyx_v_4lxml_9objectify__TYPE_CHECKS == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(0, 961, __pyx_L1_error)
+      __PYX_ERR(0, 1036, __pyx_L1_error)
     }
     __pyx_t_3 = __pyx_v_4lxml_9objectify__TYPE_CHECKS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     for (;;) {
       if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 961, __pyx_L1_error)
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1036, __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(0, 961, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1036, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":962
+      /* "lxml/objectify.pyx":1037
  *         if self.type_check is not None:
  *             for item in _TYPE_CHECKS:
  *                 if item[0] is self.type_check:             # <<<<<<<<<<<<<<
  *                     _TYPE_CHECKS.remove(item)
  *                     break
  */
-      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_item, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 962, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_item, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1037, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_2 = (__pyx_t_5 == __pyx_v_self->type_check);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_1 = (__pyx_t_2 != 0);
       if (__pyx_t_1) {
 
-        /* "lxml/objectify.pyx":963
+        /* "lxml/objectify.pyx":1038
  *             for item in _TYPE_CHECKS:
  *                 if item[0] is self.type_check:
  *                     _TYPE_CHECKS.remove(item)             # <<<<<<<<<<<<<<
  *                     break
  *             entry = (self.type_check, self)
  */
-        __pyx_t_5 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyList_Type_remove, __pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_v_item); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 963, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyList_Type_remove, __pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_v_item); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1038, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-        /* "lxml/objectify.pyx":964
+        /* "lxml/objectify.pyx":1039
  *                 if item[0] is self.type_check:
  *                     _TYPE_CHECKS.remove(item)
  *                     break             # <<<<<<<<<<<<<<
@@ -15721,7 +17410,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
         goto __pyx_L6_break;
 
-        /* "lxml/objectify.pyx":962
+        /* "lxml/objectify.pyx":1037
  *         if self.type_check is not None:
  *             for item in _TYPE_CHECKS:
  *                 if item[0] is self.type_check:             # <<<<<<<<<<<<<<
@@ -15730,7 +17419,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
       }
 
-      /* "lxml/objectify.pyx":961
+      /* "lxml/objectify.pyx":1036
  *             raise ValueError, u"Cannot register tree type"
  *         if self.type_check is not None:
  *             for item in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -15741,14 +17430,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
     __pyx_L6_break:;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":965
+    /* "lxml/objectify.pyx":1040
  *                     _TYPE_CHECKS.remove(item)
  *                     break
  *             entry = (self.type_check, self)             # <<<<<<<<<<<<<<
  *             first_pos = 0
  *             last_pos = -1
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 965, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1040, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_self->type_check);
     __Pyx_GIVEREF(__pyx_v_self->type_check);
@@ -15759,7 +17448,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
     __pyx_v_entry = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":966
+    /* "lxml/objectify.pyx":1041
  *                     break
  *             entry = (self.type_check, self)
  *             first_pos = 0             # <<<<<<<<<<<<<<
@@ -15769,7 +17458,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
     __Pyx_INCREF(__pyx_int_0);
     __pyx_v_first_pos = __pyx_int_0;
 
-    /* "lxml/objectify.pyx":967
+    /* "lxml/objectify.pyx":1042
  *             entry = (self.type_check, self)
  *             first_pos = 0
  *             last_pos = -1             # <<<<<<<<<<<<<<
@@ -15779,25 +17468,25 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
     __Pyx_INCREF(__pyx_int_neg_1);
     __pyx_v_last_pos = __pyx_int_neg_1;
 
-    /* "lxml/objectify.pyx":968
+    /* "lxml/objectify.pyx":1043
  *             first_pos = 0
  *             last_pos = -1
  *             if before or after:             # <<<<<<<<<<<<<<
  *                 if before is None:
  *                     before = ()
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_before); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 968, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_before); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1043, __pyx_L1_error)
     if (!__pyx_t_2) {
     } else {
       __pyx_t_1 = __pyx_t_2;
       goto __pyx_L9_bool_binop_done;
     }
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_after); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 968, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_after); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1043, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_2;
     __pyx_L9_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":969
+      /* "lxml/objectify.pyx":1044
  *             last_pos = -1
  *             if before or after:
  *                 if before is None:             # <<<<<<<<<<<<<<
@@ -15808,7 +17497,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
       __pyx_t_2 = (__pyx_t_1 != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":970
+        /* "lxml/objectify.pyx":1045
  *             if before or after:
  *                 if before is None:
  *                     before = ()             # <<<<<<<<<<<<<<
@@ -15818,7 +17507,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
         __Pyx_INCREF(__pyx_empty_tuple);
         __Pyx_DECREF_SET(__pyx_v_before, __pyx_empty_tuple);
 
-        /* "lxml/objectify.pyx":969
+        /* "lxml/objectify.pyx":1044
  *             last_pos = -1
  *             if before or after:
  *                 if before is None:             # <<<<<<<<<<<<<<
@@ -15828,7 +17517,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
         goto __pyx_L11;
       }
 
-      /* "lxml/objectify.pyx":971
+      /* "lxml/objectify.pyx":1046
  *                 if before is None:
  *                     before = ()
  *                 elif after is None:             # <<<<<<<<<<<<<<
@@ -15839,7 +17528,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
       __pyx_t_1 = (__pyx_t_2 != 0);
       if (__pyx_t_1) {
 
-        /* "lxml/objectify.pyx":972
+        /* "lxml/objectify.pyx":1047
  *                     before = ()
  *                 elif after is None:
  *                     after = ()             # <<<<<<<<<<<<<<
@@ -15849,7 +17538,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
         __Pyx_INCREF(__pyx_empty_tuple);
         __Pyx_DECREF_SET(__pyx_v_after, __pyx_empty_tuple);
 
-        /* "lxml/objectify.pyx":971
+        /* "lxml/objectify.pyx":1046
  *                 if before is None:
  *                     before = ()
  *                 elif after is None:             # <<<<<<<<<<<<<<
@@ -15859,7 +17548,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
       }
       __pyx_L11:;
 
-      /* "lxml/objectify.pyx":973
+      /* "lxml/objectify.pyx":1048
  *                 elif after is None:
  *                     after = ()
  *                 for i, (check, pytype) in enumerate(_TYPE_CHECKS):             # <<<<<<<<<<<<<<
@@ -15872,9 +17561,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
       for (;;) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 973, __pyx_L1_error)
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1048, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 973, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1048, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
         if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
@@ -15883,7 +17572,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(0, 973, __pyx_L1_error)
+            __PYX_ERR(0, 1048, __pyx_L1_error)
           }
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -15896,15 +17585,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
           __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(0, 973, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1048, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
-          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 973, __pyx_L1_error)
+          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1048, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_8);
           #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(0, 973, __pyx_L1_error)
+          __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1048, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -15912,7 +17601,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
           __Pyx_GOTREF(__pyx_t_7);
           index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L14_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_8);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 973, __pyx_L1_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 1048, __pyx_L1_error)
           __pyx_t_10 = NULL;
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           goto __pyx_L15_unpacking_done;
@@ -15920,7 +17609,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __pyx_t_10 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(0, 973, __pyx_L1_error)
+          __PYX_ERR(0, 1048, __pyx_L1_error)
           __pyx_L15_unpacking_done:;
         }
         __Pyx_XDECREF_SET(__pyx_v_check, __pyx_t_7);
@@ -15929,38 +17618,38 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
         __pyx_t_8 = 0;
         __Pyx_INCREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
-        __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 973, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1048, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_3);
         __pyx_t_3 = __pyx_t_6;
         __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":974
+        /* "lxml/objectify.pyx":1049
  *                     after = ()
  *                 for i, (check, pytype) in enumerate(_TYPE_CHECKS):
  *                     if last_pos == -1 and pytype.name in before:             # <<<<<<<<<<<<<<
  *                         last_pos = i
  *                     if pytype.name in after:
  */
-        __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_v_last_pos, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 974, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_v_last_pos, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1049, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 974, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1049, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (__pyx_t_2) {
         } else {
           __pyx_t_1 = __pyx_t_2;
           goto __pyx_L17_bool_binop_done;
         }
-        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 974, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1049, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_6, __pyx_v_before, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 974, __pyx_L1_error)
+        __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_6, __pyx_v_before, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1049, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_11 = (__pyx_t_2 != 0);
         __pyx_t_1 = __pyx_t_11;
         __pyx_L17_bool_binop_done:;
         if (__pyx_t_1) {
 
-          /* "lxml/objectify.pyx":975
+          /* "lxml/objectify.pyx":1050
  *                 for i, (check, pytype) in enumerate(_TYPE_CHECKS):
  *                     if last_pos == -1 and pytype.name in before:
  *                         last_pos = i             # <<<<<<<<<<<<<<
@@ -15970,7 +17659,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
           __Pyx_INCREF(__pyx_v_i);
           __Pyx_DECREF_SET(__pyx_v_last_pos, __pyx_v_i);
 
-          /* "lxml/objectify.pyx":974
+          /* "lxml/objectify.pyx":1049
  *                     after = ()
  *                 for i, (check, pytype) in enumerate(_TYPE_CHECKS):
  *                     if last_pos == -1 and pytype.name in before:             # <<<<<<<<<<<<<<
@@ -15979,33 +17668,33 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
         }
 
-        /* "lxml/objectify.pyx":976
+        /* "lxml/objectify.pyx":1051
  *                     if last_pos == -1 and pytype.name in before:
  *                         last_pos = i
  *                     if pytype.name in after:             # <<<<<<<<<<<<<<
  *                         first_pos = i+1
  *             if last_pos == -1:
  */
-        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 976, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1051, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_6, __pyx_v_after, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 976, __pyx_L1_error)
+        __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_6, __pyx_v_after, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1051, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_11 = (__pyx_t_1 != 0);
         if (__pyx_t_11) {
 
-          /* "lxml/objectify.pyx":977
+          /* "lxml/objectify.pyx":1052
  *                         last_pos = i
  *                     if pytype.name in after:
  *                         first_pos = i+1             # <<<<<<<<<<<<<<
  *             if last_pos == -1:
  *                 _TYPE_CHECKS.append(entry)
  */
-          __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 977, __pyx_L1_error)
+          __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1052, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF_SET(__pyx_v_first_pos, __pyx_t_6);
           __pyx_t_6 = 0;
 
-          /* "lxml/objectify.pyx":976
+          /* "lxml/objectify.pyx":1051
  *                     if last_pos == -1 and pytype.name in before:
  *                         last_pos = i
  *                     if pytype.name in after:             # <<<<<<<<<<<<<<
@@ -16014,7 +17703,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
         }
 
-        /* "lxml/objectify.pyx":973
+        /* "lxml/objectify.pyx":1048
  *                 elif after is None:
  *                     after = ()
  *                 for i, (check, pytype) in enumerate(_TYPE_CHECKS):             # <<<<<<<<<<<<<<
@@ -16025,7 +17714,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "lxml/objectify.pyx":968
+      /* "lxml/objectify.pyx":1043
  *             first_pos = 0
  *             last_pos = -1
  *             if before or after:             # <<<<<<<<<<<<<<
@@ -16034,20 +17723,20 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
     }
 
-    /* "lxml/objectify.pyx":978
+    /* "lxml/objectify.pyx":1053
  *                     if pytype.name in after:
  *                         first_pos = i+1
  *             if last_pos == -1:             # <<<<<<<<<<<<<<
  *                 _TYPE_CHECKS.append(entry)
  *             elif first_pos > last_pos:
  */
-    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_last_pos, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 978, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_last_pos, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1053, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 978, __pyx_L1_error)
+    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1053, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_11) {
 
-      /* "lxml/objectify.pyx":979
+      /* "lxml/objectify.pyx":1054
  *                         first_pos = i+1
  *             if last_pos == -1:
  *                 _TYPE_CHECKS.append(entry)             # <<<<<<<<<<<<<<
@@ -16056,11 +17745,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
       if (unlikely(__pyx_v_4lxml_9objectify__TYPE_CHECKS == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-        __PYX_ERR(0, 979, __pyx_L1_error)
+        __PYX_ERR(0, 1054, __pyx_L1_error)
       }
-      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_v_entry); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 979, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_v_entry); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1054, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":978
+      /* "lxml/objectify.pyx":1053
  *                     if pytype.name in after:
  *                         first_pos = i+1
  *             if last_pos == -1:             # <<<<<<<<<<<<<<
@@ -16070,19 +17759,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
       goto __pyx_L20;
     }
 
-    /* "lxml/objectify.pyx":980
+    /* "lxml/objectify.pyx":1055
  *             if last_pos == -1:
  *                 _TYPE_CHECKS.append(entry)
  *             elif first_pos > last_pos:             # <<<<<<<<<<<<<<
  *                 raise ValueError, u"inconsistent before/after dependencies"
  *             else:
  */
-    __pyx_t_3 = PyObject_RichCompare(__pyx_v_first_pos, __pyx_v_last_pos, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 980, __pyx_L1_error)
-    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 980, __pyx_L1_error)
+    __pyx_t_3 = PyObject_RichCompare(__pyx_v_first_pos, __pyx_v_last_pos, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1055, __pyx_L1_error)
+    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1055, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (unlikely(__pyx_t_11)) {
 
-      /* "lxml/objectify.pyx":981
+      /* "lxml/objectify.pyx":1056
  *                 _TYPE_CHECKS.append(entry)
  *             elif first_pos > last_pos:
  *                 raise ValueError, u"inconsistent before/after dependencies"             # <<<<<<<<<<<<<<
@@ -16090,9 +17779,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  *                 _TYPE_CHECKS.insert(last_pos, entry)
  */
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_inconsistent_before_after_depend, 0, 0);
-      __PYX_ERR(0, 981, __pyx_L1_error)
+      __PYX_ERR(0, 1056, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":980
+      /* "lxml/objectify.pyx":1055
  *             if last_pos == -1:
  *                 _TYPE_CHECKS.append(entry)
  *             elif first_pos > last_pos:             # <<<<<<<<<<<<<<
@@ -16101,7 +17790,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
     }
 
-    /* "lxml/objectify.pyx":983
+    /* "lxml/objectify.pyx":1058
  *                 raise ValueError, u"inconsistent before/after dependencies"
  *             else:
  *                 _TYPE_CHECKS.insert(last_pos, entry)             # <<<<<<<<<<<<<<
@@ -16111,14 +17800,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
     /*else*/ {
       if (unlikely(__pyx_v_4lxml_9objectify__TYPE_CHECKS == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "insert");
-        __PYX_ERR(0, 983, __pyx_L1_error)
+        __PYX_ERR(0, 1058, __pyx_L1_error)
       }
-      __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_v_last_pos); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 983, __pyx_L1_error)
-      __pyx_t_12 = PyList_Insert(__pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_t_4, __pyx_v_entry); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 983, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_v_last_pos); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1058, __pyx_L1_error)
+      __pyx_t_12 = PyList_Insert(__pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_t_4, __pyx_v_entry); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1058, __pyx_L1_error)
     }
     __pyx_L20:;
 
-    /* "lxml/objectify.pyx":960
+    /* "lxml/objectify.pyx":1035
  *         if self.name == TREE_PYTYPE_NAME:
  *             raise ValueError, u"Cannot register tree type"
  *         if self.type_check is not None:             # <<<<<<<<<<<<<<
@@ -16127,7 +17816,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
   }
 
-  /* "lxml/objectify.pyx":985
+  /* "lxml/objectify.pyx":1060
  *                 _TYPE_CHECKS.insert(last_pos, entry)
  * 
  *         _PYTYPE_DICT[self.name] = self             # <<<<<<<<<<<<<<
@@ -16136,11 +17825,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
   if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 985, __pyx_L1_error)
+    __PYX_ERR(0, 1060, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_self->name, ((PyObject *)__pyx_v_self)) < 0)) __PYX_ERR(0, 985, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_self->name, ((PyObject *)__pyx_v_self)) < 0)) __PYX_ERR(0, 1060, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":986
+  /* "lxml/objectify.pyx":1061
  * 
  *         _PYTYPE_DICT[self.name] = self
  *         for xs_type in self._schema_types:             # <<<<<<<<<<<<<<
@@ -16149,21 +17838,21 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
   if (unlikely(__pyx_v_self->_schema_types == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(0, 986, __pyx_L1_error)
+    __PYX_ERR(0, 1061, __pyx_L1_error)
   }
   __pyx_t_3 = __pyx_v_self->_schema_types; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
   for (;;) {
     if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 986, __pyx_L1_error)
+    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1061, __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(0, 986, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1061, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_xs_type, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "lxml/objectify.pyx":987
+    /* "lxml/objectify.pyx":1062
  *         _PYTYPE_DICT[self.name] = self
  *         for xs_type in self._schema_types:
  *             _SCHEMA_TYPE_DICT[xs_type] = self             # <<<<<<<<<<<<<<
@@ -16172,11 +17861,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
  */
     if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 987, __pyx_L1_error)
+      __PYX_ERR(0, 1062, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_xs_type, ((PyObject *)__pyx_v_self)) < 0)) __PYX_ERR(0, 987, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_xs_type, ((PyObject *)__pyx_v_self)) < 0)) __PYX_ERR(0, 1062, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":986
+    /* "lxml/objectify.pyx":1061
  * 
  *         _PYTYPE_DICT[self.name] = self
  *         for xs_type in self._schema_types:             # <<<<<<<<<<<<<<
@@ -16186,7 +17875,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":948
+  /* "lxml/objectify.pyx":1023
  *         return "PyType(%s, %s)" % (self.name, self._type.__name__)
  * 
  *     def register(self, before=None, after=None):             # <<<<<<<<<<<<<<
@@ -16222,7 +17911,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":989
+/* "lxml/objectify.pyx":1064
  *             _SCHEMA_TYPE_DICT[xs_type] = self
  * 
  *     def unregister(self):             # <<<<<<<<<<<<<<
@@ -16268,7 +17957,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("unregister", 0);
 
-  /* "lxml/objectify.pyx":991
+  /* "lxml/objectify.pyx":1066
  *     def unregister(self):
  *         u"unregister(self)"
  *         if _PYTYPE_DICT.get(self.name) is self:             # <<<<<<<<<<<<<<
@@ -16277,16 +17966,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
   if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-    __PYX_ERR(0, 991, __pyx_L1_error)
+    __PYX_ERR(0, 1066, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_self->name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_self->name, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = (__pyx_t_1 == ((PyObject *)__pyx_v_self));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":992
+    /* "lxml/objectify.pyx":1067
  *         u"unregister(self)"
  *         if _PYTYPE_DICT.get(self.name) is self:
  *             del _PYTYPE_DICT[self.name]             # <<<<<<<<<<<<<<
@@ -16295,11 +17984,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
     if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 992, __pyx_L1_error)
+      __PYX_ERR(0, 1067, __pyx_L1_error)
     }
-    if (unlikely(PyDict_DelItem(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_self->name) < 0)) __PYX_ERR(0, 992, __pyx_L1_error)
+    if (unlikely(PyDict_DelItem(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_self->name) < 0)) __PYX_ERR(0, 1067, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":991
+    /* "lxml/objectify.pyx":1066
  *     def unregister(self):
  *         u"unregister(self)"
  *         if _PYTYPE_DICT.get(self.name) is self:             # <<<<<<<<<<<<<<
@@ -16308,7 +17997,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
   }
 
-  /* "lxml/objectify.pyx":993
+  /* "lxml/objectify.pyx":1068
  *         if _PYTYPE_DICT.get(self.name) is self:
  *             del _PYTYPE_DICT[self.name]
  *         for xs_type, pytype in list(_SCHEMA_TYPE_DICT.items()):             # <<<<<<<<<<<<<<
@@ -16317,11 +18006,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
   if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
-    __PYX_ERR(0, 993, __pyx_L1_error)
+    __PYX_ERR(0, 1068, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Items(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 993, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_Items(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1068, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 993, __pyx_L1_error)
+  __pyx_t_4 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1068, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
@@ -16329,9 +18018,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
   for (;;) {
     if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 993, __pyx_L1_error)
+    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1068, __pyx_L1_error)
     #else
-    __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 993, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1068, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
@@ -16340,7 +18029,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 993, __pyx_L1_error)
+        __PYX_ERR(0, 1068, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -16353,15 +18042,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
       __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(0, 993, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1068, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 993, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1068, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       #endif
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 993, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1068, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -16369,7 +18058,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
       __Pyx_GOTREF(__pyx_t_6);
       index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_7);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 993, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 1068, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L7_unpacking_done;
@@ -16377,7 +18066,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 993, __pyx_L1_error)
+      __PYX_ERR(0, 1068, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_xs_type, __pyx_t_6);
@@ -16385,7 +18074,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     __Pyx_XDECREF_SET(__pyx_v_pytype, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "lxml/objectify.pyx":994
+    /* "lxml/objectify.pyx":1069
  *             del _PYTYPE_DICT[self.name]
  *         for xs_type, pytype in list(_SCHEMA_TYPE_DICT.items()):
  *             if pytype is self:             # <<<<<<<<<<<<<<
@@ -16396,7 +18085,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":995
+      /* "lxml/objectify.pyx":1070
  *         for xs_type, pytype in list(_SCHEMA_TYPE_DICT.items()):
  *             if pytype is self:
  *                 del _SCHEMA_TYPE_DICT[xs_type]             # <<<<<<<<<<<<<<
@@ -16405,11 +18094,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
       if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 995, __pyx_L1_error)
+        __PYX_ERR(0, 1070, __pyx_L1_error)
       }
-      if (unlikely(PyDict_DelItem(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_xs_type) < 0)) __PYX_ERR(0, 995, __pyx_L1_error)
+      if (unlikely(PyDict_DelItem(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_xs_type) < 0)) __PYX_ERR(0, 1070, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":994
+      /* "lxml/objectify.pyx":1069
  *             del _PYTYPE_DICT[self.name]
  *         for xs_type, pytype in list(_SCHEMA_TYPE_DICT.items()):
  *             if pytype is self:             # <<<<<<<<<<<<<<
@@ -16418,7 +18107,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
     }
 
-    /* "lxml/objectify.pyx":993
+    /* "lxml/objectify.pyx":1068
  *         if _PYTYPE_DICT.get(self.name) is self:
  *             del _PYTYPE_DICT[self.name]
  *         for xs_type, pytype in list(_SCHEMA_TYPE_DICT.items()):             # <<<<<<<<<<<<<<
@@ -16428,7 +18117,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":996
+  /* "lxml/objectify.pyx":1071
  *             if pytype is self:
  *                 del _SCHEMA_TYPE_DICT[xs_type]
  *         if self.type_check is None:             # <<<<<<<<<<<<<<
@@ -16439,7 +18128,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":997
+    /* "lxml/objectify.pyx":1072
  *                 del _SCHEMA_TYPE_DICT[xs_type]
  *         if self.type_check is None:
  *             return             # <<<<<<<<<<<<<<
@@ -16450,7 +18139,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":996
+    /* "lxml/objectify.pyx":1071
  *             if pytype is self:
  *                 del _SCHEMA_TYPE_DICT[xs_type]
  *         if self.type_check is None:             # <<<<<<<<<<<<<<
@@ -16459,7 +18148,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
  */
   }
 
-  /* "lxml/objectify.pyx":998
+  /* "lxml/objectify.pyx":1073
  *         if self.type_check is None:
  *             return
  *         try:             # <<<<<<<<<<<<<<
@@ -16475,14 +18164,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     __Pyx_XGOTREF(__pyx_t_12);
     /*try:*/ {
 
-      /* "lxml/objectify.pyx":999
+      /* "lxml/objectify.pyx":1074
  *             return
  *         try:
  *             _TYPE_CHECKS.remove( (self.type_check, self) )             # <<<<<<<<<<<<<<
  *         except ValueError:
  *             pass
  */
-      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L10_error)
+      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1074, __pyx_L10_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_v_self->type_check);
       __Pyx_GIVEREF(__pyx_v_self->type_check);
@@ -16490,12 +18179,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
       __Pyx_INCREF(((PyObject *)__pyx_v_self));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
       PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
-      __pyx_t_4 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyList_Type_remove, __pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 999, __pyx_L10_error)
+      __pyx_t_4 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyList_Type_remove, __pyx_v_4lxml_9objectify__TYPE_CHECKS, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1074, __pyx_L10_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":998
+      /* "lxml/objectify.pyx":1073
  *         if self.type_check is None:
  *             return
  *         try:             # <<<<<<<<<<<<<<
@@ -16514,7 +18203,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "lxml/objectify.pyx":1000
+    /* "lxml/objectify.pyx":1075
  *         try:
  *             _TYPE_CHECKS.remove( (self.type_check, self) )
  *         except ValueError:             # <<<<<<<<<<<<<<
@@ -16529,7 +18218,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     goto __pyx_L12_except_error;
     __pyx_L12_except_error:;
 
-    /* "lxml/objectify.pyx":998
+    /* "lxml/objectify.pyx":1073
  *         if self.type_check is None:
  *             return
  *         try:             # <<<<<<<<<<<<<<
@@ -16549,7 +18238,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
     __pyx_L15_try_end:;
   }
 
-  /* "lxml/objectify.pyx":989
+  /* "lxml/objectify.pyx":1064
  *             _SCHEMA_TYPE_DICT[xs_type] = self
  * 
  *     def unregister(self):             # <<<<<<<<<<<<<<
@@ -16576,7 +18265,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1008
+/* "lxml/objectify.pyx":1083
  *         Note that this must be set before registering the type!
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -16602,7 +18291,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes___get__(stru
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/objectify.pyx":1009
+  /* "lxml/objectify.pyx":1084
  *         """
  *         def __get__(self):
  *             return self._schema_types             # <<<<<<<<<<<<<<
@@ -16614,7 +18303,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes___get__(stru
   __pyx_r = __pyx_v_self->_schema_types;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1008
+  /* "lxml/objectify.pyx":1083
  *         Note that this must be set before registering the type!
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -16629,7 +18318,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes___get__(stru
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1010
+/* "lxml/objectify.pyx":1085
  *         def __get__(self):
  *             return self._schema_types
  *         def __set__(self, types):             # <<<<<<<<<<<<<<
@@ -16660,14 +18349,14 @@ static int __pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes_2__set__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "lxml/objectify.pyx":1011
+  /* "lxml/objectify.pyx":1086
  *             return self._schema_types
  *         def __set__(self, types):
  *             self._schema_types = list(map(unicode, types))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)(&PyUnicode_Type)));
   __Pyx_GIVEREF(((PyObject *)(&PyUnicode_Type)));
@@ -16675,10 +18364,10 @@ static int __pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes_2__set__(struct __
   __Pyx_INCREF(__pyx_v_types);
   __Pyx_GIVEREF(__pyx_v_types);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_types);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_GIVEREF(__pyx_t_1);
@@ -16687,7 +18376,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes_2__set__(struct __
   __pyx_v_self->_schema_types = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1010
+  /* "lxml/objectify.pyx":1085
  *         def __get__(self):
  *             return self._schema_types
  *         def __set__(self, types):             # <<<<<<<<<<<<<<
@@ -16708,7 +18397,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes_2__set__(struct __
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":921
+/* "lxml/objectify.pyx":996
  *     matching type will be used.
  *     """
  *     cdef readonly object name             # <<<<<<<<<<<<<<
@@ -16745,7 +18434,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4name___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":922
+/* "lxml/objectify.pyx":997
  *     """
  *     cdef readonly object name
  *     cdef readonly object type_check             # <<<<<<<<<<<<<<
@@ -16782,7 +18471,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_10type_check___get__(struct _
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":923
+/* "lxml/objectify.pyx":998
  *     cdef readonly object name
  *     cdef readonly object type_check
  *     cdef readonly object stringify             # <<<<<<<<<<<<<<
@@ -16819,7 +18508,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_9stringify___get__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1018
+/* "lxml/objectify.pyx":1093
  * cdef list _TYPE_CHECKS = []
  * 
  * def __lower_bool(b):             # <<<<<<<<<<<<<<
@@ -16851,7 +18540,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6__lower_bool(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__lower_bool", 0);
 
-  /* "lxml/objectify.pyx":1019
+  /* "lxml/objectify.pyx":1094
  * 
  * def __lower_bool(b):
  *     return u"true" if b else u"false"             # <<<<<<<<<<<<<<
@@ -16859,7 +18548,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6__lower_bool(CYTHON_UNUSED PyObject
  * cdef _pytypename(obj):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_b); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1019, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_b); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1094, __pyx_L1_error)
   if (__pyx_t_2) {
     __Pyx_INCREF(__pyx_n_u_true);
     __pyx_t_1 = __pyx_n_u_true;
@@ -16871,7 +18560,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6__lower_bool(CYTHON_UNUSED PyObject
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1018
+  /* "lxml/objectify.pyx":1093
  * cdef list _TYPE_CHECKS = []
  * 
  * def __lower_bool(b):             # <<<<<<<<<<<<<<
@@ -16890,7 +18579,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6__lower_bool(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1021
+/* "lxml/objectify.pyx":1096
  *     return u"true" if b else u"false"
  * 
  * cdef _pytypename(obj):             # <<<<<<<<<<<<<<
@@ -16908,7 +18597,7 @@ static PyObject *__pyx_f_4lxml_9objectify__pytypename(PyObject *__pyx_v_obj) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_pytypename", 0);
 
-  /* "lxml/objectify.pyx":1022
+  /* "lxml/objectify.pyx":1097
  * 
  * cdef _pytypename(obj):
  *     return u"str" if python._isString(obj) else _typename(obj)             # <<<<<<<<<<<<<<
@@ -16920,7 +18609,7 @@ static PyObject *__pyx_f_4lxml_9objectify__pytypename(PyObject *__pyx_v_obj) {
     __Pyx_INCREF(__pyx_n_u_str);
     __pyx_t_1 = __pyx_n_u_str;
   } else {
-    __pyx_t_2 = __pyx_f_4lxml_9objectify__typename(__pyx_v_obj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1022, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_9objectify__typename(__pyx_v_obj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1097, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -16929,7 +18618,7 @@ static PyObject *__pyx_f_4lxml_9objectify__pytypename(PyObject *__pyx_v_obj) {
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1021
+  /* "lxml/objectify.pyx":1096
  *     return u"true" if b else u"false"
  * 
  * cdef _pytypename(obj):             # <<<<<<<<<<<<<<
@@ -16949,7 +18638,7 @@ static PyObject *__pyx_f_4lxml_9objectify__pytypename(PyObject *__pyx_v_obj) {
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1024
+/* "lxml/objectify.pyx":1099
  *     return u"str" if python._isString(obj) else _typename(obj)
  * 
  * def pytypename(obj):             # <<<<<<<<<<<<<<
@@ -16981,7 +18670,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_8pytypename(CYTHON_UNUSED PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pytypename", 0);
 
-  /* "lxml/objectify.pyx":1029
+  /* "lxml/objectify.pyx":1104
  *     Find the name of the corresponding PyType for a Python object.
  *     """
  *     return _pytypename(obj)             # <<<<<<<<<<<<<<
@@ -16989,13 +18678,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_8pytypename(CYTHON_UNUSED PyObject *_
  * cdef _registerPyTypes():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__pytypename(__pyx_v_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1029, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__pytypename(__pyx_v_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1024
+  /* "lxml/objectify.pyx":1099
  *     return u"str" if python._isString(obj) else _typename(obj)
  * 
  * def pytypename(obj):             # <<<<<<<<<<<<<<
@@ -17014,7 +18703,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_8pytypename(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1031
+/* "lxml/objectify.pyx":1106
  *     return _pytypename(obj)
  * 
  * cdef _registerPyTypes():             # <<<<<<<<<<<<<<
@@ -17034,14 +18723,14 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_registerPyTypes", 0);
 
-  /* "lxml/objectify.pyx":1032
+  /* "lxml/objectify.pyx":1107
  * 
  * cdef _registerPyTypes():
  *     pytype = PyType(u'int', int, IntElement)             # <<<<<<<<<<<<<<
  *     pytype.xmlSchemaTypes = (u"integer", u"int", u"short", u"byte", u"unsignedShort",
  *                              u"unsignedByte", u"nonPositiveInteger",
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1107, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_u_int);
   __Pyx_GIVEREF(__pyx_n_u_int);
@@ -17052,29 +18741,29 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1032, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1107, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_pytype = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1033
+  /* "lxml/objectify.pyx":1108
  * cdef _registerPyTypes():
  *     pytype = PyType(u'int', int, IntElement)
  *     pytype.xmlSchemaTypes = (u"integer", u"int", u"short", u"byte", u"unsignedShort",             # <<<<<<<<<<<<<<
  *                              u"unsignedByte", u"nonPositiveInteger",
  *                              u"negativeInteger", u"long", u"nonNegativeInteger",
  */
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__5) < 0) __PYX_ERR(0, 1033, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__5) < 0) __PYX_ERR(0, 1108, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1037
+  /* "lxml/objectify.pyx":1112
  *                              u"negativeInteger", u"long", u"nonNegativeInteger",
  *                              u"unsignedLong", u"unsignedInt", u"positiveInteger",)
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  *     # 'long' type just for backwards compatibility
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1037, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -17088,19 +18777,19 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1037, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1040
+  /* "lxml/objectify.pyx":1115
  * 
  *     # 'long' type just for backwards compatibility
  *     pytype = PyType(u'long', None, IntElement)             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1040, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1115, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_u_long);
   __Pyx_GIVEREF(__pyx_n_u_long);
@@ -17111,20 +18800,20 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement));
   PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement));
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1040, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1115, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_1));
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1041
+  /* "lxml/objectify.pyx":1116
  *     # 'long' type just for backwards compatibility
  *     pytype = PyType(u'long', None, IntElement)
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  *     pytype = PyType(u'float', float, FloatElement, repr)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1041, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -17138,21 +18827,21 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1041, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1116, __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;
 
-  /* "lxml/objectify.pyx":1043
+  /* "lxml/objectify.pyx":1118
  *     pytype.register()
  * 
  *     pytype = PyType(u'float', float, FloatElement, repr)             # <<<<<<<<<<<<<<
  *     pytype.xmlSchemaTypes = (u"double", u"float")
  *     pytype.register()
  */
-  __pyx_t_1 = __Pyx_GetBuiltinName(__pyx_n_s_repr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetBuiltinName(__pyx_n_s_repr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_u_float);
   __Pyx_GIVEREF(__pyx_n_u_float);
@@ -17166,29 +18855,29 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_1));
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1044
+  /* "lxml/objectify.pyx":1119
  * 
  *     pytype = PyType(u'float', float, FloatElement, repr)
  *     pytype.xmlSchemaTypes = (u"double", u"float")             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__6) < 0) __PYX_ERR(0, 1044, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__6) < 0) __PYX_ERR(0, 1119, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1045
+  /* "lxml/objectify.pyx":1120
  *     pytype = PyType(u'float', float, FloatElement, repr)
  *     pytype.xmlSchemaTypes = (u"double", u"float")
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  *     pytype = PyType(u'bool', __checkBool, BoolElement, __lower_bool)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -17202,23 +18891,23 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1045, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1120, __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;
 
-  /* "lxml/objectify.pyx":1047
+  /* "lxml/objectify.pyx":1122
  *     pytype.register()
  * 
  *     pytype = PyType(u'bool', __checkBool, BoolElement, __lower_bool)             # <<<<<<<<<<<<<<
  *     pytype.xmlSchemaTypes = (u"boolean",)
  *     pytype.register()
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_checkBool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_checkBool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_lower_bool); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1047, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_lower_bool); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1047, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_n_u_bool);
   __Pyx_GIVEREF(__pyx_n_u_bool);
@@ -17232,29 +18921,29 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1047, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1048
+  /* "lxml/objectify.pyx":1123
  * 
  *     pytype = PyType(u'bool', __checkBool, BoolElement, __lower_bool)
  *     pytype.xmlSchemaTypes = (u"boolean",)             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__7) < 0) __PYX_ERR(0, 1048, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__7) < 0) __PYX_ERR(0, 1123, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1049
+  /* "lxml/objectify.pyx":1124
  *     pytype = PyType(u'bool', __checkBool, BoolElement, __lower_bool)
  *     pytype.xmlSchemaTypes = (u"boolean",)
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  *     pytype = PyType(u'str', None, StringElement)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -17268,19 +18957,19 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1051
+  /* "lxml/objectify.pyx":1126
  *     pytype.register()
  * 
  *     pytype = PyType(u'str', None, StringElement)             # <<<<<<<<<<<<<<
  *     pytype.xmlSchemaTypes = (u"string", u"normalizedString", u"token", u"language",
  *                              u"Name", u"NCName", u"ID", u"IDREF", u"ENTITY",
  */
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_u_str);
   __Pyx_GIVEREF(__pyx_n_u_str);
@@ -17291,29 +18980,29 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement));
   PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement));
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1051, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_3));
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1052
+  /* "lxml/objectify.pyx":1127
  * 
  *     pytype = PyType(u'str', None, StringElement)
  *     pytype.xmlSchemaTypes = (u"string", u"normalizedString", u"token", u"language",             # <<<<<<<<<<<<<<
  *                              u"Name", u"NCName", u"ID", u"IDREF", u"ENTITY",
  *                              u"NMTOKEN", )
  */
-  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__8) < 0) __PYX_ERR(0, 1052, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_xmlSchemaTypes, __pyx_tuple__8) < 0) __PYX_ERR(0, 1127, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1055
+  /* "lxml/objectify.pyx":1130
  *                              u"Name", u"NCName", u"ID", u"IDREF", u"ENTITY",
  *                              u"NMTOKEN", )
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  *     # since lxml 2.0
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -17327,19 +19016,19 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1058
+  /* "lxml/objectify.pyx":1133
  * 
  *     # since lxml 2.0
  *     pytype = PyType(u'NoneType', None, NoneElement)             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1058, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_n_u_NoneType);
   __Pyx_GIVEREF(__pyx_n_u_NoneType);
@@ -17350,20 +19039,20 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement));
   PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1058, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1133, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1059
+  /* "lxml/objectify.pyx":1134
  *     # since lxml 2.0
  *     pytype = PyType(u'NoneType', None, NoneElement)
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  *     # backwards compatibility
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1059, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -17377,19 +19066,19 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1062
+  /* "lxml/objectify.pyx":1137
  * 
  *     # backwards compatibility
  *     pytype = PyType(u'none', None, NoneElement)             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_u_none);
   __Pyx_GIVEREF(__pyx_n_u_none);
@@ -17400,20 +19089,20 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement));
   PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement));
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1062, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_3));
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1063
+  /* "lxml/objectify.pyx":1138
  *     # backwards compatibility
  *     pytype = PyType(u'none', None, NoneElement)
  *     pytype.register()             # <<<<<<<<<<<<<<
  * 
  * # non-registered PyType for inner tree elements
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -17427,12 +19116,12 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   }
   __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1063, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1031
+  /* "lxml/objectify.pyx":1106
  *     return _pytypename(obj)
  * 
  * cdef _registerPyTypes():             # <<<<<<<<<<<<<<
@@ -17456,7 +19145,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1070
+/* "lxml/objectify.pyx":1145
  * _registerPyTypes()
  * 
  * def getRegisteredTypes():             # <<<<<<<<<<<<<<
@@ -17503,31 +19192,31 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getRegisteredTypes", 0);
 
-  /* "lxml/objectify.pyx":1085
+  /* "lxml/objectify.pyx":1160
  *     end of the type list.
  *     """
  *     cdef list types = []             # <<<<<<<<<<<<<<
  *     cdef set known = set()
  *     for check, pytype in _TYPE_CHECKS:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_types = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1086
+  /* "lxml/objectify.pyx":1161
  *     """
  *     cdef list types = []
  *     cdef set known = set()             # <<<<<<<<<<<<<<
  *     for check, pytype in _TYPE_CHECKS:
  *         name = pytype.name
  */
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_known = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1087
+  /* "lxml/objectify.pyx":1162
  *     cdef list types = []
  *     cdef set known = set()
  *     for check, pytype in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -17536,15 +19225,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
  */
   if (unlikely(__pyx_v_4lxml_9objectify__TYPE_CHECKS == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(0, 1087, __pyx_L1_error)
+    __PYX_ERR(0, 1162, __pyx_L1_error)
   }
   __pyx_t_1 = __pyx_v_4lxml_9objectify__TYPE_CHECKS; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   for (;;) {
     if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1087, __pyx_L1_error)
+    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1162, __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(0, 1087, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
@@ -17553,7 +19242,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 1087, __pyx_L1_error)
+        __PYX_ERR(0, 1162, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -17566,15 +19255,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
       __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, 1087, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1162, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1087, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1162, __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(0, 1087, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1162, __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;
@@ -17582,7 +19271,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
       __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, 1087, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 1162, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -17590,7 +19279,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 1087, __pyx_L1_error)
+      __PYX_ERR(0, 1162, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_check, __pyx_t_4);
@@ -17598,48 +19287,48 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
     __Pyx_XDECREF_SET(__pyx_v_pytype, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "lxml/objectify.pyx":1088
+    /* "lxml/objectify.pyx":1163
  *     cdef set known = set()
  *     for check, pytype in _TYPE_CHECKS:
  *         name = pytype.name             # <<<<<<<<<<<<<<
  *         if name not in known:
  *             known.add(name)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1163, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":1089
+    /* "lxml/objectify.pyx":1164
  *     for check, pytype in _TYPE_CHECKS:
  *         name = pytype.name
  *         if name not in known:             # <<<<<<<<<<<<<<
  *             known.add(name)
  *             types.append(pytype)
  */
-    __pyx_t_8 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_known, Py_NE)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1089, __pyx_L1_error)
+    __pyx_t_8 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_known, Py_NE)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1164, __pyx_L1_error)
     __pyx_t_9 = (__pyx_t_8 != 0);
     if (__pyx_t_9) {
 
-      /* "lxml/objectify.pyx":1090
+      /* "lxml/objectify.pyx":1165
  *         name = pytype.name
  *         if name not in known:
  *             known.add(name)             # <<<<<<<<<<<<<<
  *             types.append(pytype)
  *     for pytype in _PYTYPE_DICT.values():
  */
-      __pyx_t_10 = PySet_Add(__pyx_v_known, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1090, __pyx_L1_error)
+      __pyx_t_10 = PySet_Add(__pyx_v_known, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1165, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1091
+      /* "lxml/objectify.pyx":1166
  *         if name not in known:
  *             known.add(name)
  *             types.append(pytype)             # <<<<<<<<<<<<<<
  *     for pytype in _PYTYPE_DICT.values():
  *         name = pytype.name
  */
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_types, __pyx_v_pytype); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1091, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_types, __pyx_v_pytype); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1166, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1089
+      /* "lxml/objectify.pyx":1164
  *     for check, pytype in _TYPE_CHECKS:
  *         name = pytype.name
  *         if name not in known:             # <<<<<<<<<<<<<<
@@ -17648,7 +19337,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
  */
     }
 
-    /* "lxml/objectify.pyx":1087
+    /* "lxml/objectify.pyx":1162
  *     cdef list types = []
  *     cdef set known = set()
  *     for check, pytype in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -17658,7 +19347,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1092
+  /* "lxml/objectify.pyx":1167
  *             known.add(name)
  *             types.append(pytype)
  *     for pytype in _PYTYPE_DICT.values():             # <<<<<<<<<<<<<<
@@ -17667,17 +19356,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
  */
   if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
-    __PYX_ERR(0, 1092, __pyx_L1_error)
+    __PYX_ERR(0, 1167, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_4lxml_9objectify__PYTYPE_DICT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_4lxml_9objectify__PYTYPE_DICT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
     __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_2 = 0;
     __pyx_t_11 = NULL;
   } else {
-    __pyx_t_2 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1092, __pyx_L1_error)
+    __pyx_t_2 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1167, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1092, __pyx_L1_error)
+    __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1167, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
@@ -17685,17 +19374,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1092, __pyx_L1_error)
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1167, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1092, __pyx_L1_error)
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1167, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -17705,7 +19394,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1092, __pyx_L1_error)
+          else __PYX_ERR(0, 1167, __pyx_L1_error)
         }
         break;
       }
@@ -17714,48 +19403,48 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
     __Pyx_XDECREF_SET(__pyx_v_pytype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1093
+    /* "lxml/objectify.pyx":1168
  *             types.append(pytype)
  *     for pytype in _PYTYPE_DICT.values():
  *         name = pytype.name             # <<<<<<<<<<<<<<
  *         if name not in known:
  *             known.add(name)
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1093, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytype, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1094
+    /* "lxml/objectify.pyx":1169
  *     for pytype in _PYTYPE_DICT.values():
  *         name = pytype.name
  *         if name not in known:             # <<<<<<<<<<<<<<
  *             known.add(name)
  *             types.append(pytype)
  */
-    __pyx_t_9 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_known, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1094, __pyx_L1_error)
+    __pyx_t_9 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_known, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1169, __pyx_L1_error)
     __pyx_t_8 = (__pyx_t_9 != 0);
     if (__pyx_t_8) {
 
-      /* "lxml/objectify.pyx":1095
+      /* "lxml/objectify.pyx":1170
  *         name = pytype.name
  *         if name not in known:
  *             known.add(name)             # <<<<<<<<<<<<<<
  *             types.append(pytype)
  *     return types
  */
-      __pyx_t_10 = PySet_Add(__pyx_v_known, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1095, __pyx_L1_error)
+      __pyx_t_10 = PySet_Add(__pyx_v_known, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1170, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1096
+      /* "lxml/objectify.pyx":1171
  *         if name not in known:
  *             known.add(name)
  *             types.append(pytype)             # <<<<<<<<<<<<<<
  *     return types
  * 
  */
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_types, __pyx_v_pytype); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1096, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_types, __pyx_v_pytype); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1171, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1094
+      /* "lxml/objectify.pyx":1169
  *     for pytype in _PYTYPE_DICT.values():
  *         name = pytype.name
  *         if name not in known:             # <<<<<<<<<<<<<<
@@ -17764,7 +19453,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
  */
     }
 
-    /* "lxml/objectify.pyx":1092
+    /* "lxml/objectify.pyx":1167
  *             known.add(name)
  *             types.append(pytype)
  *     for pytype in _PYTYPE_DICT.values():             # <<<<<<<<<<<<<<
@@ -17774,7 +19463,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1097
+  /* "lxml/objectify.pyx":1172
  *             known.add(name)
  *             types.append(pytype)
  *     return types             # <<<<<<<<<<<<<<
@@ -17786,7 +19475,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
   __pyx_r = __pyx_v_types;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1070
+  /* "lxml/objectify.pyx":1145
  * _registerPyTypes()
  * 
  * def getRegisteredTypes():             # <<<<<<<<<<<<<<
@@ -17814,7 +19503,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_10getRegisteredTypes(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1099
+/* "lxml/objectify.pyx":1174
  *     return types
  * 
  * cdef PyType _guessPyType(value, PyType defaulttype):             # <<<<<<<<<<<<<<
@@ -17845,7 +19534,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_guessPyType", 0);
 
-  /* "lxml/objectify.pyx":1100
+  /* "lxml/objectify.pyx":1175
  * 
  * cdef PyType _guessPyType(value, PyType defaulttype):
  *     if value is None:             # <<<<<<<<<<<<<<
@@ -17856,7 +19545,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1101
+    /* "lxml/objectify.pyx":1176
  * cdef PyType _guessPyType(value, PyType defaulttype):
  *     if value is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -17867,7 +19556,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
     __pyx_r = ((struct __pyx_obj_4lxml_9objectify_PyType *)Py_None); __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1100
+    /* "lxml/objectify.pyx":1175
  * 
  * cdef PyType _guessPyType(value, PyType defaulttype):
  *     if value is None:             # <<<<<<<<<<<<<<
@@ -17876,7 +19565,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
  */
   }
 
-  /* "lxml/objectify.pyx":1102
+  /* "lxml/objectify.pyx":1177
  *     if value is None:
  *         return None
  *     for type_check, tested_pytype in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -17885,15 +19574,15 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
  */
   if (unlikely(__pyx_v_4lxml_9objectify__TYPE_CHECKS == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(0, 1102, __pyx_L1_error)
+    __PYX_ERR(0, 1177, __pyx_L1_error)
   }
   __pyx_t_3 = __pyx_v_4lxml_9objectify__TYPE_CHECKS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
   for (;;) {
     if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1102, __pyx_L1_error)
+    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1177, __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(0, 1102, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1177, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -17902,7 +19591,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 1102, __pyx_L1_error)
+        __PYX_ERR(0, 1177, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -17915,15 +19604,15 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       __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(0, 1102, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1177, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1102, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1177, __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(0, 1102, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1177, __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;
@@ -17931,7 +19620,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       __Pyx_GOTREF(__pyx_t_6);
       index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_7);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 1102, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 1177, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L7_unpacking_done;
@@ -17939,7 +19628,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 1102, __pyx_L1_error)
+      __PYX_ERR(0, 1177, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_type_check, __pyx_t_6);
@@ -17947,7 +19636,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
     __Pyx_XDECREF_SET(__pyx_v_tested_pytype, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "lxml/objectify.pyx":1103
+    /* "lxml/objectify.pyx":1178
  *         return None
  *     for type_check, tested_pytype in _TYPE_CHECKS:
  *         try:             # <<<<<<<<<<<<<<
@@ -17963,7 +19652,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       __Pyx_XGOTREF(__pyx_t_12);
       /*try:*/ {
 
-        /* "lxml/objectify.pyx":1104
+        /* "lxml/objectify.pyx":1179
  *     for type_check, tested_pytype in _TYPE_CHECKS:
  *         try:
  *             type_check(value)             # <<<<<<<<<<<<<<
@@ -17983,12 +19672,12 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
         }
         __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_value);
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1104, __pyx_L8_error)
+        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1179, __pyx_L8_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-        /* "lxml/objectify.pyx":1105
+        /* "lxml/objectify.pyx":1180
  *         try:
  *             type_check(value)
  *             return <PyType>tested_pytype             # <<<<<<<<<<<<<<
@@ -18001,7 +19690,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         goto __pyx_L12_try_return;
 
-        /* "lxml/objectify.pyx":1103
+        /* "lxml/objectify.pyx":1178
  *         return None
  *     for type_check, tested_pytype in _TYPE_CHECKS:
  *         try:             # <<<<<<<<<<<<<<
@@ -18015,7 +19704,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "lxml/objectify.pyx":1106
+      /* "lxml/objectify.pyx":1181
  *             type_check(value)
  *             return <PyType>tested_pytype
  *         except IGNORABLE_ERRORS:             # <<<<<<<<<<<<<<
@@ -18030,7 +19719,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       goto __pyx_L10_except_error;
       __pyx_L10_except_error:;
 
-      /* "lxml/objectify.pyx":1103
+      /* "lxml/objectify.pyx":1178
  *         return None
  *     for type_check, tested_pytype in _TYPE_CHECKS:
  *         try:             # <<<<<<<<<<<<<<
@@ -18055,7 +19744,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
       __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
     }
 
-    /* "lxml/objectify.pyx":1102
+    /* "lxml/objectify.pyx":1177
  *     if value is None:
  *         return None
  *     for type_check, tested_pytype in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -18065,7 +19754,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1109
+  /* "lxml/objectify.pyx":1184
  *             # could not be parsed as the specified type => ignore
  *             pass
  *     return defaulttype             # <<<<<<<<<<<<<<
@@ -18077,7 +19766,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
   __pyx_r = __pyx_v_defaulttype;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1099
+  /* "lxml/objectify.pyx":1174
  *     return types
  * 
  * cdef PyType _guessPyType(value, PyType defaulttype):             # <<<<<<<<<<<<<<
@@ -18102,7 +19791,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1111
+/* "lxml/objectify.pyx":1186
  *     return defaulttype
  * 
  * cdef object _guessElementClass(tree.xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -18134,19 +19823,19 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_guessElementClass", 0);
 
-  /* "lxml/objectify.pyx":1112
+  /* "lxml/objectify.pyx":1187
  * 
  * cdef object _guessElementClass(tree.xmlNode* c_node):
  *     value = textOf(c_node)             # <<<<<<<<<<<<<<
  *     if value is None:
  *         return None
  */
-  __pyx_t_1 = textOf(__pyx_v_c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1112, __pyx_L1_error)
+  __pyx_t_1 = textOf(__pyx_v_c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_value = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1113
+  /* "lxml/objectify.pyx":1188
  * cdef object _guessElementClass(tree.xmlNode* c_node):
  *     value = textOf(c_node)
  *     if value is None:             # <<<<<<<<<<<<<<
@@ -18157,7 +19846,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1114
+    /* "lxml/objectify.pyx":1189
  *     value = textOf(c_node)
  *     if value is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -18168,7 +19857,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1113
+    /* "lxml/objectify.pyx":1188
  * cdef object _guessElementClass(tree.xmlNode* c_node):
  *     value = textOf(c_node)
  *     if value is None:             # <<<<<<<<<<<<<<
@@ -18177,17 +19866,17 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
  */
   }
 
-  /* "lxml/objectify.pyx":1115
+  /* "lxml/objectify.pyx":1190
  *     if value is None:
  *         return None
  *     if value == '':             # <<<<<<<<<<<<<<
  *         return StringElement
  * 
  */
-  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_value, __pyx_kp_s_, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1115, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_value, __pyx_kp_s_, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1190, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1116
+    /* "lxml/objectify.pyx":1191
  *         return None
  *     if value == '':
  *         return StringElement             # <<<<<<<<<<<<<<
@@ -18199,7 +19888,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
     __pyx_r = ((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1115
+    /* "lxml/objectify.pyx":1190
  *     if value is None:
  *         return None
  *     if value == '':             # <<<<<<<<<<<<<<
@@ -18208,7 +19897,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
  */
   }
 
-  /* "lxml/objectify.pyx":1118
+  /* "lxml/objectify.pyx":1193
  *         return StringElement
  * 
  *     for type_check, pytype in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -18217,15 +19906,15 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
  */
   if (unlikely(__pyx_v_4lxml_9objectify__TYPE_CHECKS == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(0, 1118, __pyx_L1_error)
+    __PYX_ERR(0, 1193, __pyx_L1_error)
   }
   __pyx_t_1 = __pyx_v_4lxml_9objectify__TYPE_CHECKS; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
   for (;;) {
     if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
+    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1193, __pyx_L1_error)
     #else
-    __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1118, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1193, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -18234,7 +19923,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 1118, __pyx_L1_error)
+        __PYX_ERR(0, 1193, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -18247,15 +19936,15 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       __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(0, 1118, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1193, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1193, __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(0, 1118, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1193, __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;
@@ -18263,7 +19952,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       __Pyx_GOTREF(__pyx_t_6);
       index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_7);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 1193, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L8_unpacking_done;
@@ -18271,7 +19960,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 1118, __pyx_L1_error)
+      __PYX_ERR(0, 1193, __pyx_L1_error)
       __pyx_L8_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_type_check, __pyx_t_6);
@@ -18279,7 +19968,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
     __Pyx_XDECREF_SET(__pyx_v_pytype, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "lxml/objectify.pyx":1119
+    /* "lxml/objectify.pyx":1194
  * 
  *     for type_check, pytype in _TYPE_CHECKS:
  *         try:             # <<<<<<<<<<<<<<
@@ -18295,7 +19984,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       __Pyx_XGOTREF(__pyx_t_12);
       /*try:*/ {
 
-        /* "lxml/objectify.pyx":1120
+        /* "lxml/objectify.pyx":1195
  *     for type_check, pytype in _TYPE_CHECKS:
  *         try:
  *             type_check(value)             # <<<<<<<<<<<<<<
@@ -18315,12 +20004,12 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
         }
         __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_value);
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1120, __pyx_L9_error)
+        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1195, __pyx_L9_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-        /* "lxml/objectify.pyx":1121
+        /* "lxml/objectify.pyx":1196
  *         try:
  *             type_check(value)
  *             return (<PyType>pytype)._type             # <<<<<<<<<<<<<<
@@ -18333,7 +20022,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         goto __pyx_L13_try_return;
 
-        /* "lxml/objectify.pyx":1119
+        /* "lxml/objectify.pyx":1194
  * 
  *     for type_check, pytype in _TYPE_CHECKS:
  *         try:             # <<<<<<<<<<<<<<
@@ -18347,7 +20036,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "lxml/objectify.pyx":1122
+      /* "lxml/objectify.pyx":1197
  *             type_check(value)
  *             return (<PyType>pytype)._type
  *         except IGNORABLE_ERRORS:             # <<<<<<<<<<<<<<
@@ -18362,7 +20051,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       goto __pyx_L11_except_error;
       __pyx_L11_except_error:;
 
-      /* "lxml/objectify.pyx":1119
+      /* "lxml/objectify.pyx":1194
  * 
  *     for type_check, pytype in _TYPE_CHECKS:
  *         try:             # <<<<<<<<<<<<<<
@@ -18387,7 +20076,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
       __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
     }
 
-    /* "lxml/objectify.pyx":1118
+    /* "lxml/objectify.pyx":1193
  *         return StringElement
  * 
  *     for type_check, pytype in _TYPE_CHECKS:             # <<<<<<<<<<<<<<
@@ -18397,7 +20086,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1124
+  /* "lxml/objectify.pyx":1199
  *         except IGNORABLE_ERRORS:
  *             pass
  *     return None             # <<<<<<<<<<<<<<
@@ -18408,7 +20097,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1111
+  /* "lxml/objectify.pyx":1186
  *     return defaulttype
  * 
  * cdef object _guessElementClass(tree.xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -18434,7 +20123,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1137
+/* "lxml/objectify.pyx":1212
  *     cdef bint _annotate
  * 
  *     def __call__(self, *children, **attrib):             # <<<<<<<<<<<<<<
@@ -18499,7 +20188,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "lxml/objectify.pyx":1144
+  /* "lxml/objectify.pyx":1219
  *         cdef bint has_children
  *         cdef bint has_string_value
  *         if self._element_factory is None:             # <<<<<<<<<<<<<<
@@ -18510,7 +20199,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1145
+    /* "lxml/objectify.pyx":1220
  *         cdef bint has_string_value
  *         if self._element_factory is None:
  *             element = _makeElement(self._tag, None, attrib, self._nsmap)             # <<<<<<<<<<<<<<
@@ -18521,14 +20210,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __Pyx_INCREF(__pyx_t_3);
     __pyx_t_4 = __pyx_v_self->_nsmap;
     __Pyx_INCREF(__pyx_t_4);
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_9objectify__makeElement(__pyx_t_3, Py_None, __pyx_v_attrib, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1145, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_9objectify__makeElement(__pyx_t_3, Py_None, __pyx_v_attrib, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_element = ((struct LxmlElement *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "lxml/objectify.pyx":1144
+    /* "lxml/objectify.pyx":1219
  *         cdef bint has_children
  *         cdef bint has_string_value
  *         if self._element_factory is None:             # <<<<<<<<<<<<<<
@@ -18538,7 +20227,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1147
+  /* "lxml/objectify.pyx":1222
  *             element = _makeElement(self._tag, None, attrib, self._nsmap)
  *         else:
  *             element = self._element_factory(self._tag, attrib, self._nsmap)             # <<<<<<<<<<<<<<
@@ -18562,7 +20251,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_4)) {
       PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_self->_tag, __pyx_v_attrib, __pyx_v_self->_nsmap};
-      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1147, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1222, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_5);
     } else
@@ -18570,13 +20259,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
       PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_self->_tag, __pyx_v_attrib, __pyx_v_self->_nsmap};
-      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1147, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1222, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_5);
     } else
     #endif
     {
-      __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1147, __pyx_L1_error)
+      __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1222, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       if (__pyx_t_3) {
         __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -18590,18 +20279,18 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       __Pyx_INCREF(__pyx_v_self->_nsmap);
       __Pyx_GIVEREF(__pyx_v_self->_nsmap);
       PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_self->_nsmap);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1147, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1222, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) __PYX_ERR(0, 1147, __pyx_L1_error)
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) __PYX_ERR(0, 1222, __pyx_L1_error)
     __pyx_v_element = ((struct LxmlElement *)__pyx_t_5);
     __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":1149
+  /* "lxml/objectify.pyx":1224
  *             element = self._element_factory(self._tag, attrib, self._nsmap)
  * 
  *         pytype_name = None             # <<<<<<<<<<<<<<
@@ -18611,7 +20300,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   __Pyx_INCREF(Py_None);
   __pyx_v_pytype_name = Py_None;
 
-  /* "lxml/objectify.pyx":1150
+  /* "lxml/objectify.pyx":1225
  * 
  *         pytype_name = None
  *         has_children = False             # <<<<<<<<<<<<<<
@@ -18620,7 +20309,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
   __pyx_v_has_children = 0;
 
-  /* "lxml/objectify.pyx":1151
+  /* "lxml/objectify.pyx":1226
  *         pytype_name = None
  *         has_children = False
  *         has_string_value = False             # <<<<<<<<<<<<<<
@@ -18629,7 +20318,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
   __pyx_v_has_string_value = 0;
 
-  /* "lxml/objectify.pyx":1152
+  /* "lxml/objectify.pyx":1227
  *         has_children = False
  *         has_string_value = False
  *         for child in children:             # <<<<<<<<<<<<<<
@@ -18640,15 +20329,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   for (;;) {
     if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1152, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1227, __pyx_L1_error)
     #else
-    __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1152, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1227, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/objectify.pyx":1153
+    /* "lxml/objectify.pyx":1228
  *         has_string_value = False
  *         for child in children:
  *             if child is None:             # <<<<<<<<<<<<<<
@@ -18659,18 +20348,18 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1154
+      /* "lxml/objectify.pyx":1229
  *         for child in children:
  *             if child is None:
  *                 if len(children) == 1:             # <<<<<<<<<<<<<<
  *                     cetree.setAttributeValue(
  *                         element, XML_SCHEMA_INSTANCE_NIL_ATTR, u"true")
  */
-      __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_children); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1154, __pyx_L1_error)
+      __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_children); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1229, __pyx_L1_error)
       __pyx_t_1 = ((__pyx_t_9 == 1) != 0);
       if (__pyx_t_1) {
 
-        /* "lxml/objectify.pyx":1156
+        /* "lxml/objectify.pyx":1231
  *                 if len(children) == 1:
  *                     cetree.setAttributeValue(
  *                         element, XML_SCHEMA_INSTANCE_NIL_ATTR, u"true")             # <<<<<<<<<<<<<<
@@ -18680,17 +20369,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __pyx_t_4 = __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NIL_ATTR;
         __Pyx_INCREF(__pyx_t_4);
 
-        /* "lxml/objectify.pyx":1155
+        /* "lxml/objectify.pyx":1230
  *             if child is None:
  *                 if len(children) == 1:
  *                     cetree.setAttributeValue(             # <<<<<<<<<<<<<<
  *                         element, XML_SCHEMA_INSTANCE_NIL_ATTR, u"true")
  *             elif python._isString(child):
  */
-        __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_t_4, __pyx_n_u_true); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1155, __pyx_L1_error)
+        __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_t_4, __pyx_n_u_true); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1230, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-        /* "lxml/objectify.pyx":1154
+        /* "lxml/objectify.pyx":1229
  *         for child in children:
  *             if child is None:
  *                 if len(children) == 1:             # <<<<<<<<<<<<<<
@@ -18699,7 +20388,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       }
 
-      /* "lxml/objectify.pyx":1153
+      /* "lxml/objectify.pyx":1228
  *         has_string_value = False
  *         for child in children:
  *             if child is None:             # <<<<<<<<<<<<<<
@@ -18709,7 +20398,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       goto __pyx_L6;
     }
 
-    /* "lxml/objectify.pyx":1157
+    /* "lxml/objectify.pyx":1232
  *                     cetree.setAttributeValue(
  *                         element, XML_SCHEMA_INSTANCE_NIL_ATTR, u"true")
  *             elif python._isString(child):             # <<<<<<<<<<<<<<
@@ -18719,18 +20408,18 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_1 = (_isString(__pyx_v_child) != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1158
+      /* "lxml/objectify.pyx":1233
  *                         element, XML_SCHEMA_INSTANCE_NIL_ATTR, u"true")
  *             elif python._isString(child):
  *                 _add_text(element, child)             # <<<<<<<<<<<<<<
  *                 has_string_value = True
  *             elif isinstance(child, _Element):
  */
-      __pyx_t_4 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1158, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1233, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1159
+      /* "lxml/objectify.pyx":1234
  *             elif python._isString(child):
  *                 _add_text(element, child)
  *                 has_string_value = True             # <<<<<<<<<<<<<<
@@ -18739,7 +20428,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       __pyx_v_has_string_value = 1;
 
-      /* "lxml/objectify.pyx":1157
+      /* "lxml/objectify.pyx":1232
  *                     cetree.setAttributeValue(
  *                         element, XML_SCHEMA_INSTANCE_NIL_ATTR, u"true")
  *             elif python._isString(child):             # <<<<<<<<<<<<<<
@@ -18749,7 +20438,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       goto __pyx_L6;
     }
 
-    /* "lxml/objectify.pyx":1160
+    /* "lxml/objectify.pyx":1235
  *                 _add_text(element, child)
  *                 has_string_value = True
  *             elif isinstance(child, _Element):             # <<<<<<<<<<<<<<
@@ -18760,16 +20449,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1161
+      /* "lxml/objectify.pyx":1236
  *                 has_string_value = True
  *             elif isinstance(child, _Element):
  *                 cetree.appendChildToElement(element, <_Element>child)             # <<<<<<<<<<<<<<
  *                 has_children = True
  *             elif isinstance(child, _ObjectifyElementMakerCaller):
  */
-      __pyx_t_6 = appendChildToElement(__pyx_v_element, ((struct LxmlElement *)__pyx_v_child)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1161, __pyx_L1_error)
+      __pyx_t_6 = appendChildToElement(__pyx_v_element, ((struct LxmlElement *)__pyx_v_child)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1236, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1162
+      /* "lxml/objectify.pyx":1237
  *             elif isinstance(child, _Element):
  *                 cetree.appendChildToElement(element, <_Element>child)
  *                 has_children = True             # <<<<<<<<<<<<<<
@@ -18778,7 +20467,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       __pyx_v_has_children = 1;
 
-      /* "lxml/objectify.pyx":1160
+      /* "lxml/objectify.pyx":1235
  *                 _add_text(element, child)
  *                 has_string_value = True
  *             elif isinstance(child, _Element):             # <<<<<<<<<<<<<<
@@ -18788,7 +20477,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       goto __pyx_L6;
     }
 
-    /* "lxml/objectify.pyx":1163
+    /* "lxml/objectify.pyx":1238
  *                 cetree.appendChildToElement(element, <_Element>child)
  *                 has_children = True
  *             elif isinstance(child, _ObjectifyElementMakerCaller):             # <<<<<<<<<<<<<<
@@ -18799,7 +20488,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1164
+      /* "lxml/objectify.pyx":1239
  *                 has_children = True
  *             elif isinstance(child, _ObjectifyElementMakerCaller):
  *                 elementMaker = <_ObjectifyElementMakerCaller>child             # <<<<<<<<<<<<<<
@@ -18811,7 +20500,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       __Pyx_XDECREF_SET(__pyx_v_elementMaker, ((struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)__pyx_t_4));
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1165
+      /* "lxml/objectify.pyx":1240
  *             elif isinstance(child, _ObjectifyElementMakerCaller):
  *                 elementMaker = <_ObjectifyElementMakerCaller>child
  *                 if elementMaker._element_factory is None:             # <<<<<<<<<<<<<<
@@ -18822,7 +20511,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       __pyx_t_2 = (__pyx_t_1 != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":1166
+        /* "lxml/objectify.pyx":1241
  *                 elementMaker = <_ObjectifyElementMakerCaller>child
  *                 if elementMaker._element_factory is None:
  *                     cetree.makeSubElement(element, elementMaker._tag,             # <<<<<<<<<<<<<<
@@ -18832,19 +20521,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __pyx_t_4 = __pyx_v_elementMaker->_tag;
         __Pyx_INCREF(__pyx_t_4);
 
-        /* "lxml/objectify.pyx":1167
+        /* "lxml/objectify.pyx":1242
  *                 if elementMaker._element_factory is None:
  *                     cetree.makeSubElement(element, elementMaker._tag,
  *                                           None, None, None, None)             # <<<<<<<<<<<<<<
  *                 else:
  *                     childElement = elementMaker._element_factory(
  */
-        __pyx_t_7 = ((PyObject *)makeSubElement(__pyx_v_element, __pyx_t_4, Py_None, Py_None, Py_None, Py_None)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1166, __pyx_L1_error)
+        __pyx_t_7 = ((PyObject *)makeSubElement(__pyx_v_element, __pyx_t_4, Py_None, Py_None, Py_None, Py_None)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1241, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-        /* "lxml/objectify.pyx":1165
+        /* "lxml/objectify.pyx":1240
  *             elif isinstance(child, _ObjectifyElementMakerCaller):
  *                 elementMaker = <_ObjectifyElementMakerCaller>child
  *                 if elementMaker._element_factory is None:             # <<<<<<<<<<<<<<
@@ -18854,7 +20543,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         goto __pyx_L8;
       }
 
-      /* "lxml/objectify.pyx":1169
+      /* "lxml/objectify.pyx":1244
  *                                           None, None, None, None)
  *                 else:
  *                     childElement = elementMaker._element_factory(             # <<<<<<<<<<<<<<
@@ -18863,7 +20552,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       /*else*/ {
 
-        /* "lxml/objectify.pyx":1170
+        /* "lxml/objectify.pyx":1245
  *                 else:
  *                     childElement = elementMaker._element_factory(
  *                         elementMaker._tag)             # <<<<<<<<<<<<<<
@@ -18883,33 +20572,33 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         }
         __pyx_t_7 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_elementMaker->_tag) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_elementMaker->_tag);
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1169, __pyx_L1_error)
+        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1244, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-        /* "lxml/objectify.pyx":1169
+        /* "lxml/objectify.pyx":1244
  *                                           None, None, None, None)
  *                 else:
  *                     childElement = elementMaker._element_factory(             # <<<<<<<<<<<<<<
  *                         elementMaker._tag)
  *                     cetree.appendChildToElement(element, childElement)
  */
-        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) __PYX_ERR(0, 1169, __pyx_L1_error)
+        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) __PYX_ERR(0, 1244, __pyx_L1_error)
         __Pyx_XDECREF_SET(__pyx_v_childElement, ((struct LxmlElement *)__pyx_t_7));
         __pyx_t_7 = 0;
 
-        /* "lxml/objectify.pyx":1171
+        /* "lxml/objectify.pyx":1246
  *                     childElement = elementMaker._element_factory(
  *                         elementMaker._tag)
  *                     cetree.appendChildToElement(element, childElement)             # <<<<<<<<<<<<<<
  *                 has_children = True
  *             elif isinstance(child, dict):
  */
-        __pyx_t_6 = appendChildToElement(__pyx_v_element, __pyx_v_childElement); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1171, __pyx_L1_error)
+        __pyx_t_6 = appendChildToElement(__pyx_v_element, __pyx_v_childElement); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1246, __pyx_L1_error)
       }
       __pyx_L8:;
 
-      /* "lxml/objectify.pyx":1172
+      /* "lxml/objectify.pyx":1247
  *                         elementMaker._tag)
  *                     cetree.appendChildToElement(element, childElement)
  *                 has_children = True             # <<<<<<<<<<<<<<
@@ -18918,7 +20607,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       __pyx_v_has_children = 1;
 
-      /* "lxml/objectify.pyx":1163
+      /* "lxml/objectify.pyx":1238
  *                 cetree.appendChildToElement(element, <_Element>child)
  *                 has_children = True
  *             elif isinstance(child, _ObjectifyElementMakerCaller):             # <<<<<<<<<<<<<<
@@ -18928,7 +20617,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       goto __pyx_L6;
     }
 
-    /* "lxml/objectify.pyx":1173
+    /* "lxml/objectify.pyx":1248
  *                     cetree.appendChildToElement(element, childElement)
  *                 has_children = True
  *             elif isinstance(child, dict):             # <<<<<<<<<<<<<<
@@ -18939,14 +20628,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1174
+      /* "lxml/objectify.pyx":1249
  *                 has_children = True
  *             elif isinstance(child, dict):
  *                 for name, value in child.items():             # <<<<<<<<<<<<<<
  *                     # keyword arguments in attrib take precedence
  *                     if name in attrib:
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1174, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1249, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_3 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -18960,16 +20649,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       }
       __pyx_t_7 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1174, __pyx_L1_error)
+      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1249, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
         __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
       } else {
-        __pyx_t_9 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1174, __pyx_L1_error)
+        __pyx_t_9 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1249, __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(0, 1174, __pyx_L1_error)
+        __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1249, __pyx_L1_error)
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       for (;;) {
@@ -18977,17 +20666,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           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_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1174, __pyx_L1_error)
+            __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1249, __pyx_L1_error)
             #else
-            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1174, __pyx_L1_error)
+            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1249, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_7);
             #endif
           } else {
             if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1174, __pyx_L1_error)
+            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1249, __pyx_L1_error)
             #else
-            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1174, __pyx_L1_error)
+            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1249, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_7);
             #endif
           }
@@ -18997,7 +20686,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(0, 1174, __pyx_L1_error)
+              else __PYX_ERR(0, 1249, __pyx_L1_error)
             }
             break;
           }
@@ -19009,7 +20698,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(0, 1174, __pyx_L1_error)
+            __PYX_ERR(0, 1249, __pyx_L1_error)
           }
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -19022,15 +20711,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           __Pyx_INCREF(__pyx_t_3);
           __Pyx_INCREF(__pyx_t_11);
           #else
-          __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1174, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1249, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1174, __pyx_L1_error)
+          __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1249, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_11);
           #endif
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         } else {
           Py_ssize_t index = -1;
-          __pyx_t_12 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1174, __pyx_L1_error)
+          __pyx_t_12 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1249, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
@@ -19038,7 +20727,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           __Pyx_GOTREF(__pyx_t_3);
           index = 1; __pyx_t_11 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_11);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 1174, __pyx_L1_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 1249, __pyx_L1_error)
           __pyx_t_13 = NULL;
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
           goto __pyx_L12_unpacking_done;
@@ -19046,7 +20735,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
           __pyx_t_13 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(0, 1174, __pyx_L1_error)
+          __PYX_ERR(0, 1249, __pyx_L1_error)
           __pyx_L12_unpacking_done:;
         }
         __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
@@ -19054,18 +20743,18 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
         __pyx_t_11 = 0;
 
-        /* "lxml/objectify.pyx":1176
+        /* "lxml/objectify.pyx":1251
  *                 for name, value in child.items():
  *                     # keyword arguments in attrib take precedence
  *                     if name in attrib:             # <<<<<<<<<<<<<<
  *                         continue
  *                     pytype = _PYTYPE_DICT.get(_typename(value))
  */
-        __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_name, __pyx_v_attrib, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1176, __pyx_L1_error)
+        __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_name, __pyx_v_attrib, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1251, __pyx_L1_error)
         __pyx_t_2 = (__pyx_t_1 != 0);
         if (__pyx_t_2) {
 
-          /* "lxml/objectify.pyx":1177
+          /* "lxml/objectify.pyx":1252
  *                     # keyword arguments in attrib take precedence
  *                     if name in attrib:
  *                         continue             # <<<<<<<<<<<<<<
@@ -19074,7 +20763,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
           goto __pyx_L9_continue;
 
-          /* "lxml/objectify.pyx":1176
+          /* "lxml/objectify.pyx":1251
  *                 for name, value in child.items():
  *                     # keyword arguments in attrib take precedence
  *                     if name in attrib:             # <<<<<<<<<<<<<<
@@ -19083,7 +20772,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
         }
 
-        /* "lxml/objectify.pyx":1178
+        /* "lxml/objectify.pyx":1253
  *                     if name in attrib:
  *                         continue
  *                     pytype = _PYTYPE_DICT.get(_typename(value))             # <<<<<<<<<<<<<<
@@ -19092,17 +20781,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
         if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-          __PYX_ERR(0, 1178, __pyx_L1_error)
+          __PYX_ERR(0, 1253, __pyx_L1_error)
         }
-        __pyx_t_7 = __pyx_f_4lxml_9objectify__typename(__pyx_v_value); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1178, __pyx_L1_error)
+        __pyx_t_7 = __pyx_f_4lxml_9objectify__typename(__pyx_v_value); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1253, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_t_7, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1178, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_t_7, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1253, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_XDECREF_SET(__pyx_v_pytype, __pyx_t_11);
         __pyx_t_11 = 0;
 
-        /* "lxml/objectify.pyx":1179
+        /* "lxml/objectify.pyx":1254
  *                         continue
  *                     pytype = _PYTYPE_DICT.get(_typename(value))
  *                     if pytype is not None:             # <<<<<<<<<<<<<<
@@ -19113,7 +20802,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __pyx_t_1 = (__pyx_t_2 != 0);
         if (__pyx_t_1) {
 
-          /* "lxml/objectify.pyx":1180
+          /* "lxml/objectify.pyx":1255
  *                     pytype = _PYTYPE_DICT.get(_typename(value))
  *                     if pytype is not None:
  *                         value = (<PyType>pytype).stringify(value)             # <<<<<<<<<<<<<<
@@ -19133,13 +20822,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           }
           __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_value);
           __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1180, __pyx_L1_error)
+          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1255, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_11);
           __pyx_t_11 = 0;
 
-          /* "lxml/objectify.pyx":1179
+          /* "lxml/objectify.pyx":1254
  *                         continue
  *                     pytype = _PYTYPE_DICT.get(_typename(value))
  *                     if pytype is not None:             # <<<<<<<<<<<<<<
@@ -19149,7 +20838,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           goto __pyx_L14;
         }
 
-        /* "lxml/objectify.pyx":1181
+        /* "lxml/objectify.pyx":1256
  *                     if pytype is not None:
  *                         value = (<PyType>pytype).stringify(value)
  *                     elif not python._isString(value):             # <<<<<<<<<<<<<<
@@ -19159,19 +20848,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __pyx_t_1 = ((!(_isString(__pyx_v_value) != 0)) != 0);
         if (__pyx_t_1) {
 
-          /* "lxml/objectify.pyx":1182
+          /* "lxml/objectify.pyx":1257
  *                         value = (<PyType>pytype).stringify(value)
  *                     elif not python._isString(value):
  *                         value = unicode(value)             # <<<<<<<<<<<<<<
  *                     cetree.setAttributeValue(element, name, value)
  *             else:
  */
-          __pyx_t_11 = __Pyx_PyObject_Unicode(__pyx_v_value); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1182, __pyx_L1_error)
+          __pyx_t_11 = __Pyx_PyObject_Unicode(__pyx_v_value); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1257, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_11);
           __pyx_t_11 = 0;
 
-          /* "lxml/objectify.pyx":1181
+          /* "lxml/objectify.pyx":1256
  *                     if pytype is not None:
  *                         value = (<PyType>pytype).stringify(value)
  *                     elif not python._isString(value):             # <<<<<<<<<<<<<<
@@ -19181,16 +20870,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         }
         __pyx_L14:;
 
-        /* "lxml/objectify.pyx":1183
+        /* "lxml/objectify.pyx":1258
  *                     elif not python._isString(value):
  *                         value = unicode(value)
  *                     cetree.setAttributeValue(element, name, value)             # <<<<<<<<<<<<<<
  *             else:
  *                 if pytype_name is not None:
  */
-        __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1183, __pyx_L1_error)
+        __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1258, __pyx_L1_error)
 
-        /* "lxml/objectify.pyx":1174
+        /* "lxml/objectify.pyx":1249
  *                 has_children = True
  *             elif isinstance(child, dict):
  *                 for name, value in child.items():             # <<<<<<<<<<<<<<
@@ -19201,7 +20890,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       }
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1173
+      /* "lxml/objectify.pyx":1248
  *                     cetree.appendChildToElement(element, childElement)
  *                 has_children = True
  *             elif isinstance(child, dict):             # <<<<<<<<<<<<<<
@@ -19211,7 +20900,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       goto __pyx_L6;
     }
 
-    /* "lxml/objectify.pyx":1185
+    /* "lxml/objectify.pyx":1260
  *                     cetree.setAttributeValue(element, name, value)
  *             else:
  *                 if pytype_name is not None:             # <<<<<<<<<<<<<<
@@ -19223,7 +20912,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       __pyx_t_2 = (__pyx_t_1 != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":1187
+        /* "lxml/objectify.pyx":1262
  *                 if pytype_name is not None:
  *                     # concatenation always makes the result a string
  *                     has_string_value = True             # <<<<<<<<<<<<<<
@@ -19232,7 +20921,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
         __pyx_v_has_string_value = 1;
 
-        /* "lxml/objectify.pyx":1185
+        /* "lxml/objectify.pyx":1260
  *                     cetree.setAttributeValue(element, name, value)
  *             else:
  *                 if pytype_name is not None:             # <<<<<<<<<<<<<<
@@ -19241,19 +20930,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       }
 
-      /* "lxml/objectify.pyx":1188
+      /* "lxml/objectify.pyx":1263
  *                     # concatenation always makes the result a string
  *                     has_string_value = True
  *                 pytype_name = _typename(child)             # <<<<<<<<<<<<<<
  *                 pytype = _PYTYPE_DICT.get(_typename(child))
  *                 if pytype is not None:
  */
-      __pyx_t_4 = __pyx_f_4lxml_9objectify__typename(__pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_4lxml_9objectify__typename(__pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1263, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_pytype_name, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1189
+      /* "lxml/objectify.pyx":1264
  *                     has_string_value = True
  *                 pytype_name = _typename(child)
  *                 pytype = _PYTYPE_DICT.get(_typename(child))             # <<<<<<<<<<<<<<
@@ -19262,17 +20951,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-        __PYX_ERR(0, 1189, __pyx_L1_error)
+        __PYX_ERR(0, 1264, __pyx_L1_error)
       }
-      __pyx_t_4 = __pyx_f_4lxml_9objectify__typename(__pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_4lxml_9objectify__typename(__pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1264, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1189, __pyx_L1_error)
+      __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1264, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_XDECREF_SET(__pyx_v_pytype, __pyx_t_11);
       __pyx_t_11 = 0;
 
-      /* "lxml/objectify.pyx":1190
+      /* "lxml/objectify.pyx":1265
  *                 pytype_name = _typename(child)
  *                 pytype = _PYTYPE_DICT.get(_typename(child))
  *                 if pytype is not None:             # <<<<<<<<<<<<<<
@@ -19283,7 +20972,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       __pyx_t_1 = (__pyx_t_2 != 0);
       if (__pyx_t_1) {
 
-        /* "lxml/objectify.pyx":1191
+        /* "lxml/objectify.pyx":1266
  *                 pytype = _PYTYPE_DICT.get(_typename(child))
  *                 if pytype is not None:
  *                     _add_text(element, (<PyType>pytype).stringify(child))             # <<<<<<<<<<<<<<
@@ -19303,15 +20992,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         }
         __pyx_t_11 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_v_child) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_child);
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1191, __pyx_L1_error)
+        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1266, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_4 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1191, __pyx_L1_error)
+        __pyx_t_4 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1266, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-        /* "lxml/objectify.pyx":1190
+        /* "lxml/objectify.pyx":1265
  *                 pytype_name = _typename(child)
  *                 pytype = _PYTYPE_DICT.get(_typename(child))
  *                 if pytype is not None:             # <<<<<<<<<<<<<<
@@ -19321,7 +21010,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         goto __pyx_L16;
       }
 
-      /* "lxml/objectify.pyx":1193
+      /* "lxml/objectify.pyx":1268
  *                     _add_text(element, (<PyType>pytype).stringify(child))
  *                 else:
  *                     has_string_value = True             # <<<<<<<<<<<<<<
@@ -19331,26 +21020,26 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       /*else*/ {
         __pyx_v_has_string_value = 1;
 
-        /* "lxml/objectify.pyx":1194
+        /* "lxml/objectify.pyx":1269
  *                 else:
  *                     has_string_value = True
  *                     child = unicode(child)             # <<<<<<<<<<<<<<
  *                     _add_text(element, child)
  * 
  */
-        __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1194, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1269, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_child, __pyx_t_4);
         __pyx_t_4 = 0;
 
-        /* "lxml/objectify.pyx":1195
+        /* "lxml/objectify.pyx":1270
  *                     has_string_value = True
  *                     child = unicode(child)
  *                     _add_text(element, child)             # <<<<<<<<<<<<<<
  * 
  *         if self._annotate and not has_children:
  */
-        __pyx_t_4 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1195, __pyx_L1_error)
+        __pyx_t_4 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1270, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       }
@@ -19358,7 +21047,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     }
     __pyx_L6:;
 
-    /* "lxml/objectify.pyx":1152
+    /* "lxml/objectify.pyx":1227
  *         has_children = False
  *         has_string_value = False
  *         for child in children:             # <<<<<<<<<<<<<<
@@ -19368,7 +21057,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "lxml/objectify.pyx":1197
+  /* "lxml/objectify.pyx":1272
  *                     _add_text(element, child)
  * 
  *         if self._annotate and not has_children:             # <<<<<<<<<<<<<<
@@ -19386,7 +21075,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   __pyx_L18_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1198
+    /* "lxml/objectify.pyx":1273
  * 
  *         if self._annotate and not has_children:
  *             if has_string_value:             # <<<<<<<<<<<<<<
@@ -19396,19 +21085,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_1 = (__pyx_v_has_string_value != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1199
+      /* "lxml/objectify.pyx":1274
  *         if self._annotate and not has_children:
  *             if has_string_value:
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, u"str")             # <<<<<<<<<<<<<<
  *             elif pytype_name is not None:
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, pytype_name)
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1199, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1274, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_t_5, __pyx_n_u_str); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1199, __pyx_L1_error)
+      __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_t_5, __pyx_n_u_str); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1274, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":1198
+      /* "lxml/objectify.pyx":1273
  * 
  *         if self._annotate and not has_children:
  *             if has_string_value:             # <<<<<<<<<<<<<<
@@ -19418,7 +21107,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
       goto __pyx_L20;
     }
 
-    /* "lxml/objectify.pyx":1200
+    /* "lxml/objectify.pyx":1275
  *             if has_string_value:
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, u"str")
  *             elif pytype_name is not None:             # <<<<<<<<<<<<<<
@@ -19429,19 +21118,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1201
+      /* "lxml/objectify.pyx":1276
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, u"str")
  *             elif pytype_name is not None:
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, pytype_name)             # <<<<<<<<<<<<<<
  * 
  *         return element
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1201, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1276, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_t_5, __pyx_v_pytype_name); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1201, __pyx_L1_error)
+      __pyx_t_6 = setAttributeValue(__pyx_v_element, __pyx_t_5, __pyx_v_pytype_name); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1276, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":1200
+      /* "lxml/objectify.pyx":1275
  *             if has_string_value:
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, u"str")
  *             elif pytype_name is not None:             # <<<<<<<<<<<<<<
@@ -19451,7 +21140,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     }
     __pyx_L20:;
 
-    /* "lxml/objectify.pyx":1197
+    /* "lxml/objectify.pyx":1272
  *                     _add_text(element, child)
  * 
  *         if self._annotate and not has_children:             # <<<<<<<<<<<<<<
@@ -19460,7 +21149,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
   }
 
-  /* "lxml/objectify.pyx":1203
+  /* "lxml/objectify.pyx":1278
  *                 cetree.setAttributeValue(element, PYTYPE_ATTRIBUTE, pytype_name)
  * 
  *         return element             # <<<<<<<<<<<<<<
@@ -19472,7 +21161,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   __pyx_r = ((PyObject *)__pyx_v_element);
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1137
+  /* "lxml/objectify.pyx":1212
  *     cdef bint _annotate
  * 
  *     def __call__(self, *children, **attrib):             # <<<<<<<<<<<<<<
@@ -19504,7 +21193,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1205
+/* "lxml/objectify.pyx":1280
  *         return element
  * 
  * cdef _add_text(_Element elem, text):             # <<<<<<<<<<<<<<
@@ -19527,7 +21216,7 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
   __Pyx_RefNannySetupContext("_add_text", 0);
   __Pyx_INCREF(__pyx_v_text);
 
-  /* "lxml/objectify.pyx":1209
+  /* "lxml/objectify.pyx":1284
  *     # tail text, depending on the current tree state
  *     cdef tree.xmlNode* c_child
  *     c_child = cetree.findChildBackwards(elem._c_node, 0)             # <<<<<<<<<<<<<<
@@ -19536,7 +21225,7 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
  */
   __pyx_v_c_child = findChildBackwards(__pyx_v_elem->_c_node, 0);
 
-  /* "lxml/objectify.pyx":1210
+  /* "lxml/objectify.pyx":1285
  *     cdef tree.xmlNode* c_child
  *     c_child = cetree.findChildBackwards(elem._c_node, 0)
  *     if c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -19546,19 +21235,19 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
   __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1211
+    /* "lxml/objectify.pyx":1286
  *     c_child = cetree.findChildBackwards(elem._c_node, 0)
  *     if c_child is not NULL:
  *         old = cetree.tailOf(c_child)             # <<<<<<<<<<<<<<
  *         if old is not None:
  *             text = old + text
  */
-    __pyx_t_2 = tailOf(__pyx_v_c_child); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1211, __pyx_L1_error)
+    __pyx_t_2 = tailOf(__pyx_v_c_child); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1286, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_old = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "lxml/objectify.pyx":1212
+    /* "lxml/objectify.pyx":1287
  *     if c_child is not NULL:
  *         old = cetree.tailOf(c_child)
  *         if old is not None:             # <<<<<<<<<<<<<<
@@ -19569,19 +21258,19 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
     __pyx_t_3 = (__pyx_t_1 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1213
+      /* "lxml/objectify.pyx":1288
  *         old = cetree.tailOf(c_child)
  *         if old is not None:
  *             text = old + text             # <<<<<<<<<<<<<<
  *         cetree.setTailText(c_child, text)
  *     else:
  */
-      __pyx_t_2 = PyNumber_Add(__pyx_v_old, __pyx_v_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1213, __pyx_L1_error)
+      __pyx_t_2 = PyNumber_Add(__pyx_v_old, __pyx_v_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1288, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "lxml/objectify.pyx":1212
+      /* "lxml/objectify.pyx":1287
  *     if c_child is not NULL:
  *         old = cetree.tailOf(c_child)
  *         if old is not None:             # <<<<<<<<<<<<<<
@@ -19590,16 +21279,16 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1214
+    /* "lxml/objectify.pyx":1289
  *         if old is not None:
  *             text = old + text
  *         cetree.setTailText(c_child, text)             # <<<<<<<<<<<<<<
  *     else:
  *         old = cetree.textOf(elem._c_node)
  */
-    __pyx_t_4 = setTailText(__pyx_v_c_child, __pyx_v_text); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1214, __pyx_L1_error)
+    __pyx_t_4 = setTailText(__pyx_v_c_child, __pyx_v_text); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1289, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":1210
+    /* "lxml/objectify.pyx":1285
  *     cdef tree.xmlNode* c_child
  *     c_child = cetree.findChildBackwards(elem._c_node, 0)
  *     if c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -19609,7 +21298,7 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1216
+  /* "lxml/objectify.pyx":1291
  *         cetree.setTailText(c_child, text)
  *     else:
  *         old = cetree.textOf(elem._c_node)             # <<<<<<<<<<<<<<
@@ -19617,12 +21306,12 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
  *             text = old + text
  */
   /*else*/ {
-    __pyx_t_2 = textOf(__pyx_v_elem->_c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __pyx_L1_error)
+    __pyx_t_2 = textOf(__pyx_v_elem->_c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1291, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_old = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "lxml/objectify.pyx":1217
+    /* "lxml/objectify.pyx":1292
  *     else:
  *         old = cetree.textOf(elem._c_node)
  *         if old is not None:             # <<<<<<<<<<<<<<
@@ -19633,19 +21322,19 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
     __pyx_t_1 = (__pyx_t_3 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1218
+      /* "lxml/objectify.pyx":1293
  *         old = cetree.textOf(elem._c_node)
  *         if old is not None:
  *             text = old + text             # <<<<<<<<<<<<<<
  *         cetree.setNodeText(elem._c_node, text)
  * 
  */
-      __pyx_t_2 = PyNumber_Add(__pyx_v_old, __pyx_v_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1218, __pyx_L1_error)
+      __pyx_t_2 = PyNumber_Add(__pyx_v_old, __pyx_v_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1293, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "lxml/objectify.pyx":1217
+      /* "lxml/objectify.pyx":1292
  *     else:
  *         old = cetree.textOf(elem._c_node)
  *         if old is not None:             # <<<<<<<<<<<<<<
@@ -19654,18 +21343,18 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1219
+    /* "lxml/objectify.pyx":1294
  *         if old is not None:
  *             text = old + text
  *         cetree.setNodeText(elem._c_node, text)             # <<<<<<<<<<<<<<
  * 
  * cdef class ElementMaker:
  */
-    __pyx_t_4 = setNodeText(__pyx_v_elem->_c_node, __pyx_v_text); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1219, __pyx_L1_error)
+    __pyx_t_4 = setNodeText(__pyx_v_elem->_c_node, __pyx_v_text); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1294, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":1205
+  /* "lxml/objectify.pyx":1280
  *         return element
  * 
  * cdef _add_text(_Element elem, text):             # <<<<<<<<<<<<<<
@@ -19688,7 +21377,7 @@ static PyObject *__pyx_f_4lxml_9objectify__add_text(struct LxmlElement *__pyx_v_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1252
+/* "lxml/objectify.pyx":1327
  *     cdef bint _annotate
  *     cdef dict _cache
  *     def __init__(self, *, namespace=None, nsmap=None, annotate=True,             # <<<<<<<<<<<<<<
@@ -19716,7 +21405,7 @@ static int __pyx_pw_4lxml_9objectify_12ElementMaker_1__init__(PyObject *__pyx_v_
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_True);
 
-    /* "lxml/objectify.pyx":1253
+    /* "lxml/objectify.pyx":1328
  *     cdef dict _cache
  *     def __init__(self, *, namespace=None, nsmap=None, annotate=True,
  *                  makeelement=None):             # <<<<<<<<<<<<<<
@@ -19740,7 +21429,7 @@ static int __pyx_pw_4lxml_9objectify_12ElementMaker_1__init__(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(0, 1252, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(0, 1327, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -19753,7 +21442,7 @@ static int __pyx_pw_4lxml_9objectify_12ElementMaker_1__init__(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1252, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1327, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.ElementMaker.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -19761,7 +21450,7 @@ static int __pyx_pw_4lxml_9objectify_12ElementMaker_1__init__(PyObject *__pyx_v_
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_9objectify_12ElementMaker___init__(((struct __pyx_obj_4lxml_9objectify_ElementMaker *)__pyx_v_self), __pyx_v_namespace, __pyx_v_nsmap, __pyx_v_annotate, __pyx_v_makeelement);
 
-  /* "lxml/objectify.pyx":1252
+  /* "lxml/objectify.pyx":1327
  *     cdef bint _annotate
  *     cdef dict _cache
  *     def __init__(self, *, namespace=None, nsmap=None, annotate=True,             # <<<<<<<<<<<<<<
@@ -19787,7 +21476,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_nsmap);
 
-  /* "lxml/objectify.pyx":1254
+  /* "lxml/objectify.pyx":1329
  *     def __init__(self, *, namespace=None, nsmap=None, annotate=True,
  *                  makeelement=None):
  *         if nsmap is None:             # <<<<<<<<<<<<<<
@@ -19798,19 +21487,19 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1255
+    /* "lxml/objectify.pyx":1330
  *                  makeelement=None):
  *         if nsmap is None:
  *             nsmap = _DEFAULT_NSMAP if annotate else {}             # <<<<<<<<<<<<<<
  *         self._nsmap = nsmap
  *         self._namespace = None if namespace is None else u"{%s}" % namespace
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotate); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1255, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotate); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1330, __pyx_L1_error)
     if (__pyx_t_2) {
       __Pyx_INCREF(__pyx_v_4lxml_9objectify__DEFAULT_NSMAP);
       __pyx_t_3 = __pyx_v_4lxml_9objectify__DEFAULT_NSMAP;
     } else {
-      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1255, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1330, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_3 = __pyx_t_4;
       __pyx_t_4 = 0;
@@ -19818,7 +21507,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
     __Pyx_DECREF_SET(__pyx_v_nsmap, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":1254
+    /* "lxml/objectify.pyx":1329
  *     def __init__(self, *, namespace=None, nsmap=None, annotate=True,
  *                  makeelement=None):
  *         if nsmap is None:             # <<<<<<<<<<<<<<
@@ -19827,7 +21516,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
  */
   }
 
-  /* "lxml/objectify.pyx":1256
+  /* "lxml/objectify.pyx":1331
  *         if nsmap is None:
  *             nsmap = _DEFAULT_NSMAP if annotate else {}
  *         self._nsmap = nsmap             # <<<<<<<<<<<<<<
@@ -19840,7 +21529,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   __Pyx_DECREF(__pyx_v_self->_nsmap);
   __pyx_v_self->_nsmap = __pyx_v_nsmap;
 
-  /* "lxml/objectify.pyx":1257
+  /* "lxml/objectify.pyx":1332
  *             nsmap = _DEFAULT_NSMAP if annotate else {}
  *         self._nsmap = nsmap
  *         self._namespace = None if namespace is None else u"{%s}" % namespace             # <<<<<<<<<<<<<<
@@ -19852,7 +21541,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
     __Pyx_INCREF(Py_None);
     __pyx_t_3 = Py_None;
   } else {
-    __pyx_t_4 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s_2, __pyx_v_namespace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1257, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s_2, __pyx_v_namespace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1332, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -19863,17 +21552,17 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   __pyx_v_self->_namespace = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1258
+  /* "lxml/objectify.pyx":1333
  *         self._nsmap = nsmap
  *         self._namespace = None if namespace is None else u"{%s}" % namespace
  *         self._annotate = annotate             # <<<<<<<<<<<<<<
  *         if makeelement is not None:
  *             if not callable(makeelement):
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotate); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1258, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotate); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L1_error)
   __pyx_v_self->_annotate = __pyx_t_2;
 
-  /* "lxml/objectify.pyx":1259
+  /* "lxml/objectify.pyx":1334
  *         self._namespace = None if namespace is None else u"{%s}" % namespace
  *         self._annotate = annotate
  *         if makeelement is not None:             # <<<<<<<<<<<<<<
@@ -19884,45 +21573,45 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1260
+    /* "lxml/objectify.pyx":1335
  *         self._annotate = annotate
  *         if makeelement is not None:
  *             if not callable(makeelement):             # <<<<<<<<<<<<<<
  *                 raise TypeError(
  *                     f"argument of 'makeelement' parameter must be callable, got {type(makeelement)}")
  */
-    __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_makeelement); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1260, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_makeelement); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1335, __pyx_L1_error)
     __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/objectify.pyx":1262
+      /* "lxml/objectify.pyx":1337
  *             if not callable(makeelement):
  *                 raise TypeError(
  *                     f"argument of 'makeelement' parameter must be callable, got {type(makeelement)}")             # <<<<<<<<<<<<<<
  *             self._makeelement = makeelement
  *         else:
  */
-      __pyx_t_3 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_makeelement)), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1262, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_makeelement)), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1337, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_argument_of_makeelement_paramete, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1262, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_argument_of_makeelement_paramete, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1337, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "lxml/objectify.pyx":1261
+      /* "lxml/objectify.pyx":1336
  *         if makeelement is not None:
  *             if not callable(makeelement):
  *                 raise TypeError(             # <<<<<<<<<<<<<<
  *                     f"argument of 'makeelement' parameter must be callable, got {type(makeelement)}")
  *             self._makeelement = makeelement
  */
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1261, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1336, __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(0, 1261, __pyx_L1_error)
+      __PYX_ERR(0, 1336, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1260
+      /* "lxml/objectify.pyx":1335
  *         self._annotate = annotate
  *         if makeelement is not None:
  *             if not callable(makeelement):             # <<<<<<<<<<<<<<
@@ -19931,7 +21620,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
  */
     }
 
-    /* "lxml/objectify.pyx":1263
+    /* "lxml/objectify.pyx":1338
  *                 raise TypeError(
  *                     f"argument of 'makeelement' parameter must be callable, got {type(makeelement)}")
  *             self._makeelement = makeelement             # <<<<<<<<<<<<<<
@@ -19944,7 +21633,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
     __Pyx_DECREF(__pyx_v_self->_makeelement);
     __pyx_v_self->_makeelement = __pyx_v_makeelement;
 
-    /* "lxml/objectify.pyx":1259
+    /* "lxml/objectify.pyx":1334
  *         self._namespace = None if namespace is None else u"{%s}" % namespace
  *         self._annotate = annotate
  *         if makeelement is not None:             # <<<<<<<<<<<<<<
@@ -19954,7 +21643,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
     goto __pyx_L4;
   }
 
-  /* "lxml/objectify.pyx":1265
+  /* "lxml/objectify.pyx":1340
  *             self._makeelement = makeelement
  *         else:
  *             self._makeelement = None             # <<<<<<<<<<<<<<
@@ -19970,14 +21659,14 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   }
   __pyx_L4:;
 
-  /* "lxml/objectify.pyx":1266
+  /* "lxml/objectify.pyx":1341
  *         else:
  *             self._makeelement = None
  *         self._cache = {}             # <<<<<<<<<<<<<<
  * 
  *     @cython.final
  */
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1266, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __Pyx_GOTREF(__pyx_v_self->_cache);
@@ -19985,7 +21674,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   __pyx_v_self->_cache = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1252
+  /* "lxml/objectify.pyx":1327
  *     cdef bint _annotate
  *     cdef dict _cache
  *     def __init__(self, *, namespace=None, nsmap=None, annotate=True,             # <<<<<<<<<<<<<<
@@ -20007,7 +21696,7 @@ static int __pyx_pf_4lxml_9objectify_12ElementMaker___init__(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1269
+/* "lxml/objectify.pyx":1344
  * 
  *     @cython.final
  *     cdef _build_element_maker(self, tag, bint caching):             # <<<<<<<<<<<<<<
@@ -20030,19 +21719,19 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_build_element_maker", 0);
 
-  /* "lxml/objectify.pyx":1271
+  /* "lxml/objectify.pyx":1346
  *     cdef _build_element_maker(self, tag, bint caching):
  *         cdef _ObjectifyElementMakerCaller element_maker
  *         element_maker = _ObjectifyElementMakerCaller.__new__(_ObjectifyElementMakerCaller)             # <<<<<<<<<<<<<<
  *         if self._namespace is not None and tag[0] != u"{":
  *             element_maker._tag = self._namespace + tag
  */
-  __pyx_t_1 = ((PyObject *)__pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller(((PyTypeObject *)__pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1271, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller(((PyTypeObject *)__pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_element_maker = ((struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1272
+  /* "lxml/objectify.pyx":1347
  *         cdef _ObjectifyElementMakerCaller element_maker
  *         element_maker = _ObjectifyElementMakerCaller.__new__(_ObjectifyElementMakerCaller)
  *         if self._namespace is not None and tag[0] != u"{":             # <<<<<<<<<<<<<<
@@ -20056,22 +21745,22 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
     __pyx_t_2 = __pyx_t_4;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_tag, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1272, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_tag, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_kp_u__9, Py_NE)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1272, __pyx_L1_error)
+  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_kp_u__9, Py_NE)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1347, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_2 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1273
+    /* "lxml/objectify.pyx":1348
  *         element_maker = _ObjectifyElementMakerCaller.__new__(_ObjectifyElementMakerCaller)
  *         if self._namespace is not None and tag[0] != u"{":
  *             element_maker._tag = self._namespace + tag             # <<<<<<<<<<<<<<
  *         else:
  *             element_maker._tag = tag
  */
-    __pyx_t_1 = PyNumber_Add(__pyx_v_self->_namespace, __pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1273, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_v_self->_namespace, __pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_element_maker->_tag);
@@ -20079,7 +21768,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
     __pyx_v_element_maker->_tag = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1272
+    /* "lxml/objectify.pyx":1347
  *         cdef _ObjectifyElementMakerCaller element_maker
  *         element_maker = _ObjectifyElementMakerCaller.__new__(_ObjectifyElementMakerCaller)
  *         if self._namespace is not None and tag[0] != u"{":             # <<<<<<<<<<<<<<
@@ -20089,7 +21778,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1275
+  /* "lxml/objectify.pyx":1350
  *             element_maker._tag = self._namespace + tag
  *         else:
  *             element_maker._tag = tag             # <<<<<<<<<<<<<<
@@ -20105,7 +21794,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":1276
+  /* "lxml/objectify.pyx":1351
  *         else:
  *             element_maker._tag = tag
  *         element_maker._nsmap = self._nsmap             # <<<<<<<<<<<<<<
@@ -20120,7 +21809,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   __pyx_v_element_maker->_nsmap = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1277
+  /* "lxml/objectify.pyx":1352
  *             element_maker._tag = tag
  *         element_maker._nsmap = self._nsmap
  *         element_maker._annotate = self._annotate             # <<<<<<<<<<<<<<
@@ -20130,7 +21819,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   __pyx_t_2 = __pyx_v_self->_annotate;
   __pyx_v_element_maker->_annotate = __pyx_t_2;
 
-  /* "lxml/objectify.pyx":1278
+  /* "lxml/objectify.pyx":1353
  *         element_maker._nsmap = self._nsmap
  *         element_maker._annotate = self._annotate
  *         element_maker._element_factory = self._makeelement             # <<<<<<<<<<<<<<
@@ -20145,7 +21834,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   __pyx_v_element_maker->_element_factory = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1279
+  /* "lxml/objectify.pyx":1354
  *         element_maker._annotate = self._annotate
  *         element_maker._element_factory = self._makeelement
  *         if caching:             # <<<<<<<<<<<<<<
@@ -20155,7 +21844,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   __pyx_t_2 = (__pyx_v_caching != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1280
+    /* "lxml/objectify.pyx":1355
  *         element_maker._element_factory = self._makeelement
  *         if caching:
  *             if len(self._cache) > 200:             # <<<<<<<<<<<<<<
@@ -20166,14 +21855,14 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
     __Pyx_INCREF(__pyx_t_1);
     if (unlikely(__pyx_t_1 == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      __PYX_ERR(0, 1280, __pyx_L1_error)
+      __PYX_ERR(0, 1355, __pyx_L1_error)
     }
-    __pyx_t_5 = PyDict_Size(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1280, __pyx_L1_error)
+    __pyx_t_5 = PyDict_Size(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1355, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_2 = ((__pyx_t_5 > 0xC8) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1281
+      /* "lxml/objectify.pyx":1356
  *         if caching:
  *             if len(self._cache) > 200:
  *                 self._cache.clear()             # <<<<<<<<<<<<<<
@@ -20182,11 +21871,11 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
  */
       if (unlikely(__pyx_v_self->_cache == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
-        __PYX_ERR(0, 1281, __pyx_L1_error)
+        __PYX_ERR(0, 1356, __pyx_L1_error)
       }
-      __pyx_t_6 = __Pyx_PyDict_Clear(__pyx_v_self->_cache); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1281, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyDict_Clear(__pyx_v_self->_cache); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1356, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1280
+      /* "lxml/objectify.pyx":1355
  *         element_maker._element_factory = self._makeelement
  *         if caching:
  *             if len(self._cache) > 200:             # <<<<<<<<<<<<<<
@@ -20195,7 +21884,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
  */
     }
 
-    /* "lxml/objectify.pyx":1282
+    /* "lxml/objectify.pyx":1357
  *             if len(self._cache) > 200:
  *                 self._cache.clear()
  *             self._cache[tag] = element_maker             # <<<<<<<<<<<<<<
@@ -20204,11 +21893,11 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
  */
     if (unlikely(__pyx_v_self->_cache == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 1282, __pyx_L1_error)
+      __PYX_ERR(0, 1357, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->_cache, __pyx_v_tag, ((PyObject *)__pyx_v_element_maker)) < 0)) __PYX_ERR(0, 1282, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_self->_cache, __pyx_v_tag, ((PyObject *)__pyx_v_element_maker)) < 0)) __PYX_ERR(0, 1357, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":1279
+    /* "lxml/objectify.pyx":1354
  *         element_maker._annotate = self._annotate
  *         element_maker._element_factory = self._makeelement
  *         if caching:             # <<<<<<<<<<<<<<
@@ -20217,7 +21906,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
  */
   }
 
-  /* "lxml/objectify.pyx":1283
+  /* "lxml/objectify.pyx":1358
  *                 self._cache.clear()
  *             self._cache[tag] = element_maker
  *         return element_maker             # <<<<<<<<<<<<<<
@@ -20229,7 +21918,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   __pyx_r = ((PyObject *)__pyx_v_element_maker);
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1269
+  /* "lxml/objectify.pyx":1344
  * 
  *     @cython.final
  *     cdef _build_element_maker(self, tag, bint caching):             # <<<<<<<<<<<<<<
@@ -20249,7 +21938,7 @@ static PyObject *__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(st
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1285
+/* "lxml/objectify.pyx":1360
  *         return element_maker
  * 
  *     def __getattr__(self, tag):             # <<<<<<<<<<<<<<
@@ -20286,7 +21975,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "lxml/objectify.pyx":1286
+  /* "lxml/objectify.pyx":1361
  * 
  *     def __getattr__(self, tag):
  *         element_maker = self._cache.get(tag)             # <<<<<<<<<<<<<<
@@ -20295,14 +21984,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
  */
   if (unlikely(__pyx_v_self->_cache == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-    __PYX_ERR(0, 1286, __pyx_L1_error)
+    __PYX_ERR(0, 1361, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_self->_cache, __pyx_v_tag, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1286, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_self->_cache, __pyx_v_tag, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_element_maker = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1287
+  /* "lxml/objectify.pyx":1362
  *     def __getattr__(self, tag):
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:             # <<<<<<<<<<<<<<
@@ -20313,7 +22002,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1288
+    /* "lxml/objectify.pyx":1363
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:
  *             if is_special_method(tag):             # <<<<<<<<<<<<<<
@@ -20333,14 +22022,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
     }
     __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_tag) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_tag);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1288, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1288, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1363, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1289
+      /* "lxml/objectify.pyx":1364
  *         if element_maker is None:
  *             if is_special_method(tag):
  *                 return object.__getattr__(self, tag)             # <<<<<<<<<<<<<<
@@ -20348,7 +22037,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
  *         return element_maker
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_getattr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1289, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_getattr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1364, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       __pyx_t_6 = 0;
@@ -20365,7 +22054,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_4)) {
         PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_tag};
-        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1364, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_GOTREF(__pyx_t_1);
       } else
@@ -20373,13 +22062,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
         PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_tag};
-        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1364, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_GOTREF(__pyx_t_1);
       } else
       #endif
       {
-        __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1289, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1364, __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;
@@ -20390,7 +22079,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
         __Pyx_INCREF(__pyx_v_tag);
         __Pyx_GIVEREF(__pyx_v_tag);
         PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_tag);
-        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1364, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       }
@@ -20399,7 +22088,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
       __pyx_t_1 = 0;
       goto __pyx_L0;
 
-      /* "lxml/objectify.pyx":1288
+      /* "lxml/objectify.pyx":1363
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:
  *             if is_special_method(tag):             # <<<<<<<<<<<<<<
@@ -20408,7 +22097,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
  */
     }
 
-    /* "lxml/objectify.pyx":1290
+    /* "lxml/objectify.pyx":1365
  *             if is_special_method(tag):
  *                 return object.__getattr__(self, tag)
  *             return self._build_element_maker(tag, caching=True)             # <<<<<<<<<<<<<<
@@ -20416,13 +22105,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(__pyx_v_self, __pyx_v_tag, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1290, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(__pyx_v_self, __pyx_v_tag, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1365, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1287
+    /* "lxml/objectify.pyx":1362
  *     def __getattr__(self, tag):
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:             # <<<<<<<<<<<<<<
@@ -20431,7 +22120,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
  */
   }
 
-  /* "lxml/objectify.pyx":1291
+  /* "lxml/objectify.pyx":1366
  *                 return object.__getattr__(self, tag)
  *             return self._build_element_maker(tag, caching=True)
  *         return element_maker             # <<<<<<<<<<<<<<
@@ -20443,7 +22132,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
   __pyx_r = __pyx_v_element_maker;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1285
+  /* "lxml/objectify.pyx":1360
  *         return element_maker
  * 
  *     def __getattr__(self, tag):             # <<<<<<<<<<<<<<
@@ -20466,7 +22155,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1293
+/* "lxml/objectify.pyx":1368
  *         return element_maker
  * 
  *     def __call__(self, tag, *args, **kwargs):             # <<<<<<<<<<<<<<
@@ -20519,7 +22208,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_12ElementMaker_5__call__(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, __pyx_v_kwargs, values, used_pos_args, "__call__") < 0)) __PYX_ERR(0, 1293, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__call__") < 0)) __PYX_ERR(0, 1368, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -20530,7 +22219,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_12ElementMaker_5__call__(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1293, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1368, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
@@ -20561,7 +22250,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "lxml/objectify.pyx":1294
+  /* "lxml/objectify.pyx":1369
  * 
  *     def __call__(self, tag, *args, **kwargs):
  *         element_maker = self._cache.get(tag)             # <<<<<<<<<<<<<<
@@ -20570,14 +22259,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
  */
   if (unlikely(__pyx_v_self->_cache == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-    __PYX_ERR(0, 1294, __pyx_L1_error)
+    __PYX_ERR(0, 1369, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_self->_cache, __pyx_v_tag, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1294, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_self->_cache, __pyx_v_tag, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1369, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_element_maker = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1295
+  /* "lxml/objectify.pyx":1370
  *     def __call__(self, tag, *args, **kwargs):
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:             # <<<<<<<<<<<<<<
@@ -20588,7 +22277,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1297
+    /* "lxml/objectify.pyx":1372
  *         if element_maker is None:
  *             element_maker = self._build_element_maker(
  *                 tag, caching=not is_special_method(tag))             # <<<<<<<<<<<<<<
@@ -20608,25 +22297,25 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
     }
     __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_tag) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_tag);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1297, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1372, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1297, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1372, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1296
+    /* "lxml/objectify.pyx":1371
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:
  *             element_maker = self._build_element_maker(             # <<<<<<<<<<<<<<
  *                 tag, caching=not is_special_method(tag))
  *         return element_maker(*args, **kwargs)
  */
-    __pyx_t_1 = __pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(__pyx_v_self, __pyx_v_tag, (!__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1296, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker(__pyx_v_self, __pyx_v_tag, (!__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1371, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_element_maker, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1295
+    /* "lxml/objectify.pyx":1370
  *     def __call__(self, tag, *args, **kwargs):
  *         element_maker = self._cache.get(tag)
  *         if element_maker is None:             # <<<<<<<<<<<<<<
@@ -20635,7 +22324,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
  */
   }
 
-  /* "lxml/objectify.pyx":1298
+  /* "lxml/objectify.pyx":1373
  *             element_maker = self._build_element_maker(
  *                 tag, caching=not is_special_method(tag))
  *         return element_maker(*args, **kwargs)             # <<<<<<<<<<<<<<
@@ -20643,13 +22332,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
  * ################################################################################
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_element_maker, __pyx_v_args, __pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1298, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_element_maker, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1293
+  /* "lxml/objectify.pyx":1368
  *         return element_maker
  * 
  *     def __call__(self, tag, *args, **kwargs):             # <<<<<<<<<<<<<<
@@ -20671,7 +22363,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1305
+/* "lxml/objectify.pyx":1380
  * cdef bint __RECURSIVE_STR = 0 # default: off
  * 
  * def enable_recursive_str(on=True):             # <<<<<<<<<<<<<<
@@ -20713,7 +22405,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_13enable_recursive_str(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "enable_recursive_str") < 0)) __PYX_ERR(0, 1305, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "enable_recursive_str") < 0)) __PYX_ERR(0, 1380, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -20727,7 +22419,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_13enable_recursive_str(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("enable_recursive_str", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1305, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("enable_recursive_str", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1380, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.enable_recursive_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -20749,17 +22441,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_12enable_recursive_str(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("enable_recursive_str", 0);
 
-  /* "lxml/objectify.pyx":1312
+  /* "lxml/objectify.pyx":1387
  *     """
  *     global __RECURSIVE_STR
  *     __RECURSIVE_STR = on             # <<<<<<<<<<<<<<
  * 
  * def dump(_Element element not None):
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_on); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_on); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1387, __pyx_L1_error)
   __pyx_v_4lxml_9objectify___RECURSIVE_STR = __pyx_t_1;
 
-  /* "lxml/objectify.pyx":1305
+  /* "lxml/objectify.pyx":1380
  * cdef bint __RECURSIVE_STR = 0 # default: off
  * 
  * def enable_recursive_str(on=True):             # <<<<<<<<<<<<<<
@@ -20779,7 +22471,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12enable_recursive_str(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1314
+/* "lxml/objectify.pyx":1389
  *     __RECURSIVE_STR = on
  * 
  * def dump(_Element element not None):             # <<<<<<<<<<<<<<
@@ -20798,7 +22490,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_15dump(PyObject *__pyx_self, PyObject
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("dump (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_8includes_11etreepublic__Element, 0, "element", 0))) __PYX_ERR(0, 1314, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_8includes_11etreepublic__Element, 0, "element", 0))) __PYX_ERR(0, 1389, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_9objectify_14dump(__pyx_self, ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -20819,7 +22511,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_14dump(CYTHON_UNUSED PyObject *__pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("dump", 0);
 
-  /* "lxml/objectify.pyx":1319
+  /* "lxml/objectify.pyx":1394
  *     Return a recursively generated string representation of an element.
  *     """
  *     return _dump(element, 0)             # <<<<<<<<<<<<<<
@@ -20827,13 +22519,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_14dump(CYTHON_UNUSED PyObject *__pyx_
  * cdef object _dump(_Element element, int indent):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__dump(__pyx_v_element, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1319, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__dump(__pyx_v_element, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1394, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1314
+  /* "lxml/objectify.pyx":1389
  *     __RECURSIVE_STR = on
  * 
  * def dump(_Element element not None):             # <<<<<<<<<<<<<<
@@ -20852,7 +22544,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_14dump(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1321
+/* "lxml/objectify.pyx":1396
  *     return _dump(element, 0)
  * 
  * cdef object _dump(_Element element, int indent):             # <<<<<<<<<<<<<<
@@ -20889,23 +22581,23 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_dump", 0);
 
-  /* "lxml/objectify.pyx":1322
+  /* "lxml/objectify.pyx":1397
  * 
  * cdef object _dump(_Element element, int indent):
  *     indentstr = u"    " * indent             # <<<<<<<<<<<<<<
  *     if isinstance(element, ObjectifiedDataElement):
  *         value = repr(element)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_indent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1322, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_indent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1397, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Multiply(__pyx_kp_u__10, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1322, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Multiply(__pyx_kp_u__10, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1397, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1322, __pyx_L1_error)
+  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1397, __pyx_L1_error)
   __pyx_v_indentstr = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1323
+  /* "lxml/objectify.pyx":1398
  * cdef object _dump(_Element element, int indent):
  *     indentstr = u"    " * indent
  *     if isinstance(element, ObjectifiedDataElement):             # <<<<<<<<<<<<<<
@@ -20916,19 +22608,19 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/objectify.pyx":1324
+    /* "lxml/objectify.pyx":1399
  *     indentstr = u"    " * indent
  *     if isinstance(element, ObjectifiedDataElement):
  *         value = repr(element)             # <<<<<<<<<<<<<<
  *     else:
  *         value = textOf(element._c_node)
  */
-    __pyx_t_2 = PyObject_Repr(((PyObject *)__pyx_v_element)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1324, __pyx_L1_error)
+    __pyx_t_2 = PyObject_Repr(((PyObject *)__pyx_v_element)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_value = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "lxml/objectify.pyx":1323
+    /* "lxml/objectify.pyx":1398
  * cdef object _dump(_Element element, int indent):
  *     indentstr = u"    " * indent
  *     if isinstance(element, ObjectifiedDataElement):             # <<<<<<<<<<<<<<
@@ -20938,7 +22630,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1326
+  /* "lxml/objectify.pyx":1401
  *         value = repr(element)
  *     else:
  *         value = textOf(element._c_node)             # <<<<<<<<<<<<<<
@@ -20946,12 +22638,12 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  *             if not value.strip():
  */
   /*else*/ {
-    __pyx_t_2 = textOf(__pyx_v_element->_c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1326, __pyx_L1_error)
+    __pyx_t_2 = textOf(__pyx_v_element->_c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_value = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "lxml/objectify.pyx":1327
+    /* "lxml/objectify.pyx":1402
  *     else:
  *         value = textOf(element._c_node)
  *         if value is not None:             # <<<<<<<<<<<<<<
@@ -20962,14 +22654,14 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1328
+      /* "lxml/objectify.pyx":1403
  *         value = textOf(element._c_node)
  *         if value is not None:
  *             if not value.strip():             # <<<<<<<<<<<<<<
  *                 value = None
  *             else:
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_strip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1328, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_strip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1403, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_5 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -20983,15 +22675,15 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       }
       __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1328, __pyx_L1_error)
+      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1403, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1328, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1403, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_4 = ((!__pyx_t_3) != 0);
       if (__pyx_t_4) {
 
-        /* "lxml/objectify.pyx":1329
+        /* "lxml/objectify.pyx":1404
  *         if value is not None:
  *             if not value.strip():
  *                 value = None             # <<<<<<<<<<<<<<
@@ -21001,7 +22693,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
         __Pyx_INCREF(Py_None);
         __Pyx_DECREF_SET(__pyx_v_value, Py_None);
 
-        /* "lxml/objectify.pyx":1328
+        /* "lxml/objectify.pyx":1403
  *         value = textOf(element._c_node)
  *         if value is not None:
  *             if not value.strip():             # <<<<<<<<<<<<<<
@@ -21011,7 +22703,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
         goto __pyx_L5;
       }
 
-      /* "lxml/objectify.pyx":1331
+      /* "lxml/objectify.pyx":1406
  *                 value = None
  *             else:
  *                 value = repr(value)             # <<<<<<<<<<<<<<
@@ -21019,14 +22711,14 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  *     xsi_ns    = u"{%s}" % XML_SCHEMA_INSTANCE_NS
  */
       /*else*/ {
-        __pyx_t_2 = PyObject_Repr(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1331, __pyx_L1_error)
+        __pyx_t_2 = PyObject_Repr(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1406, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_2);
         __pyx_t_2 = 0;
       }
       __pyx_L5:;
 
-      /* "lxml/objectify.pyx":1327
+      /* "lxml/objectify.pyx":1402
  *     else:
  *         value = textOf(element._c_node)
  *         if value is not None:             # <<<<<<<<<<<<<<
@@ -21037,27 +22729,27 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":1332
+  /* "lxml/objectify.pyx":1407
  *             else:
  *                 value = repr(value)
  *     result = f"{indentstr}{element.tag} = {value} [{_typename(element)}]\n"             # <<<<<<<<<<<<<<
  *     xsi_ns    = u"{%s}" % XML_SCHEMA_INSTANCE_NS
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE
  */
-  __pyx_t_2 = PyTuple_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_6 = 0;
   __pyx_t_7 = 127;
-  __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_indentstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_indentstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
   __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7;
@@ -21069,7 +22761,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   __pyx_t_6 += 3;
   __Pyx_GIVEREF(__pyx_kp_u__11);
   PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__11);
-  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_7;
   __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
@@ -21080,9 +22772,9 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   __pyx_t_6 += 2;
   __Pyx_GIVEREF(__pyx_kp_u__12);
   PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u__12);
-  __pyx_t_5 = __pyx_f_4lxml_9objectify__typename(((PyObject *)__pyx_v_element)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_9objectify__typename(((PyObject *)__pyx_v_element)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
@@ -21094,63 +22786,63 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   __pyx_t_6 += 2;
   __Pyx_GIVEREF(__pyx_kp_u__13);
   PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_kp_u__13);
-  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 7, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 7, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_result = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1333
+  /* "lxml/objectify.pyx":1408
  *                 value = repr(value)
  *     result = f"{indentstr}{element.tag} = {value} [{_typename(element)}]\n"
  *     xsi_ns    = u"{%s}" % XML_SCHEMA_INSTANCE_NS             # <<<<<<<<<<<<<<
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE
  *     for name, value in sorted(cetree.iterattributes(element, 3)):
  */
-  __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s_2, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s_2, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1408, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xsi_ns = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1334
+  /* "lxml/objectify.pyx":1409
  *     result = f"{indentstr}{element.tag} = {value} [{_typename(element)}]\n"
  *     xsi_ns    = u"{%s}" % XML_SCHEMA_INSTANCE_NS
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE             # <<<<<<<<<<<<<<
  *     for name, value in sorted(cetree.iterattributes(element, 3)):
  *         if u'{' in name:
  */
-  __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s_2, __pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1334, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s_2, __pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1409, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_pytype_ns = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1335
+  /* "lxml/objectify.pyx":1410
  *     xsi_ns    = u"{%s}" % XML_SCHEMA_INSTANCE_NS
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE
  *     for name, value in sorted(cetree.iterattributes(element, 3)):             # <<<<<<<<<<<<<<
  *         if u'{' in name:
  *             if name == PYTYPE_ATTRIBUTE:
  */
-  __pyx_t_2 = iterattributes(__pyx_v_element, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1335, __pyx_L1_error)
+  __pyx_t_2 = iterattributes(__pyx_v_element, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1335, __pyx_L1_error)
+  __pyx_t_5 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_1 = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_8 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1335, __pyx_L1_error)
+  __pyx_t_8 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1410, __pyx_L1_error)
   if (unlikely(__pyx_t_1 == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    __PYX_ERR(0, 1335, __pyx_L1_error)
+    __PYX_ERR(0, 1410, __pyx_L1_error)
   }
   __pyx_t_5 = __pyx_t_1; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1335, __pyx_L1_error)
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1410, __pyx_L1_error)
     #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1335, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1410, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
@@ -21159,7 +22851,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 1335, __pyx_L1_error)
+        __PYX_ERR(0, 1410, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -21172,15 +22864,15 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       __Pyx_INCREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1335, __pyx_L1_error)
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1410, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1335, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1410, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       #endif
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1335, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1410, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -21188,7 +22880,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       __Pyx_GOTREF(__pyx_t_2);
       index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(0, 1335, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(0, 1410, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L9_unpacking_done;
@@ -21196,7 +22888,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 1335, __pyx_L1_error)
+      __PYX_ERR(0, 1410, __pyx_L1_error)
       __pyx_L9_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_2);
@@ -21204,43 +22896,43 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "lxml/objectify.pyx":1336
+    /* "lxml/objectify.pyx":1411
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE
  *     for name, value in sorted(cetree.iterattributes(element, 3)):
  *         if u'{' in name:             # <<<<<<<<<<<<<<
  *             if name == PYTYPE_ATTRIBUTE:
  *                 if value == TREE_PYTYPE_NAME:
  */
-    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__9, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1336, __pyx_L1_error)
+    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__9, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1411, __pyx_L1_error)
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1337
+      /* "lxml/objectify.pyx":1412
  *     for name, value in sorted(cetree.iterattributes(element, 3)):
  *         if u'{' in name:
  *             if name == PYTYPE_ATTRIBUTE:             # <<<<<<<<<<<<<<
  *                 if value == TREE_PYTYPE_NAME:
  *                     continue
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1337, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1412, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_9 = PyObject_RichCompare(__pyx_v_name, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1337, __pyx_L1_error)
+      __pyx_t_9 = PyObject_RichCompare(__pyx_v_name, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1412, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1337, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1412, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       if (__pyx_t_3) {
 
-        /* "lxml/objectify.pyx":1338
+        /* "lxml/objectify.pyx":1413
  *         if u'{' in name:
  *             if name == PYTYPE_ATTRIBUTE:
  *                 if value == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
  *                     continue
  *                 else:
  */
-        __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_value, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1338, __pyx_L1_error)
+        __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_value, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1413, __pyx_L1_error)
         if (__pyx_t_3) {
 
-          /* "lxml/objectify.pyx":1339
+          /* "lxml/objectify.pyx":1414
  *             if name == PYTYPE_ATTRIBUTE:
  *                 if value == TREE_PYTYPE_NAME:
  *                     continue             # <<<<<<<<<<<<<<
@@ -21249,7 +22941,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
           goto __pyx_L6_continue;
 
-          /* "lxml/objectify.pyx":1338
+          /* "lxml/objectify.pyx":1413
  *         if u'{' in name:
  *             if name == PYTYPE_ATTRIBUTE:
  *                 if value == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
@@ -21258,7 +22950,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
         }
 
-        /* "lxml/objectify.pyx":1341
+        /* "lxml/objectify.pyx":1416
  *                     continue
  *                 else:
  *                     name = name.replace(pytype_ns, u'py:')             # <<<<<<<<<<<<<<
@@ -21266,7 +22958,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  *         result += f"{indentstr}  * {name} = {value!r}\n"
  */
         /*else*/ {
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
+          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1416, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           __pyx_t_2 = NULL;
           __pyx_t_12 = 0;
@@ -21283,7 +22975,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
           #if CYTHON_FAST_PYCALL
           if (PyFunction_Check(__pyx_t_1)) {
             PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_pytype_ns, __pyx_kp_u_py};
-            __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1341, __pyx_L1_error)
+            __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1416, __pyx_L1_error)
             __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_GOTREF(__pyx_t_9);
           } else
@@ -21291,13 +22983,13 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
           #if CYTHON_FAST_PYCCALL
           if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
             PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_pytype_ns, __pyx_kp_u_py};
-            __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1341, __pyx_L1_error)
+            __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1416, __pyx_L1_error)
             __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_GOTREF(__pyx_t_9);
           } else
           #endif
           {
-            __pyx_t_10 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1341, __pyx_L1_error)
+            __pyx_t_10 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1416, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_10);
             if (__pyx_t_2) {
               __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2); __pyx_t_2 = NULL;
@@ -21308,7 +23000,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
             __Pyx_INCREF(__pyx_kp_u_py);
             __Pyx_GIVEREF(__pyx_kp_u_py);
             PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_12, __pyx_kp_u_py);
-            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1341, __pyx_L1_error)
+            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1416, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_9);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           }
@@ -21317,7 +23009,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
           __pyx_t_9 = 0;
         }
 
-        /* "lxml/objectify.pyx":1337
+        /* "lxml/objectify.pyx":1412
  *     for name, value in sorted(cetree.iterattributes(element, 3)):
  *         if u'{' in name:
  *             if name == PYTYPE_ATTRIBUTE:             # <<<<<<<<<<<<<<
@@ -21326,14 +23018,14 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
       }
 
-      /* "lxml/objectify.pyx":1342
+      /* "lxml/objectify.pyx":1417
  *                 else:
  *                     name = name.replace(pytype_ns, u'py:')
  *             name = name.replace(xsi_ns, u'xsi:')             # <<<<<<<<<<<<<<
  *         result += f"{indentstr}  * {name} = {value!r}\n"
  * 
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1417, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_10 = NULL;
       __pyx_t_12 = 0;
@@ -21350,7 +23042,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_1)) {
         PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_xsi_ns, __pyx_kp_u_xsi};
-        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1342, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1417, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_9);
       } else
@@ -21358,13 +23050,13 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
         PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_xsi_ns, __pyx_kp_u_xsi};
-        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1342, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1417, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_9);
       } else
       #endif
       {
-        __pyx_t_2 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1342, __pyx_L1_error)
+        __pyx_t_2 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1417, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         if (__pyx_t_10) {
           __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -21375,7 +23067,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
         __Pyx_INCREF(__pyx_kp_u_xsi);
         __Pyx_GIVEREF(__pyx_kp_u_xsi);
         PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_12, __pyx_kp_u_xsi);
-        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1342, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1417, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       }
@@ -21383,7 +23075,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_9);
       __pyx_t_9 = 0;
 
-      /* "lxml/objectify.pyx":1336
+      /* "lxml/objectify.pyx":1411
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE
  *     for name, value in sorted(cetree.iterattributes(element, 3)):
  *         if u'{' in name:             # <<<<<<<<<<<<<<
@@ -21392,18 +23084,18 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
     }
 
-    /* "lxml/objectify.pyx":1343
+    /* "lxml/objectify.pyx":1418
  *                     name = name.replace(pytype_ns, u'py:')
  *             name = name.replace(xsi_ns, u'xsi:')
  *         result += f"{indentstr}  * {name} = {value!r}\n"             # <<<<<<<<<<<<<<
  * 
  *     indent += 1
  */
-    __pyx_t_9 = PyTuple_New(6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_13 = 0;
     __pyx_t_7 = 127;
-    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_indentstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_indentstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
     __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -21414,7 +23106,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __pyx_t_13 += 4;
     __Pyx_GIVEREF(__pyx_kp_u__14);
     PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_kp_u__14);
-    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
     __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -21425,7 +23117,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __pyx_t_13 += 3;
     __Pyx_GIVEREF(__pyx_kp_u__11);
     PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_kp_u__11);
-    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
     __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -21436,16 +23128,16 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __pyx_t_13 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__15);
     PyTuple_SET_ITEM(__pyx_t_9, 5, __pyx_kp_u__15);
-    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_9, 6, __pyx_t_13, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_9, 6, __pyx_t_13, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_9 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_result, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_result, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "lxml/objectify.pyx":1335
+    /* "lxml/objectify.pyx":1410
  *     xsi_ns    = u"{%s}" % XML_SCHEMA_INSTANCE_NS
  *     pytype_ns = u"{%s}" % PYTYPE_NAMESPACE
  *     for name, value in sorted(cetree.iterattributes(element, 3)):             # <<<<<<<<<<<<<<
@@ -21456,7 +23148,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "lxml/objectify.pyx":1345
+  /* "lxml/objectify.pyx":1420
  *         result += f"{indentstr}  * {name} = {value!r}\n"
  * 
  *     indent += 1             # <<<<<<<<<<<<<<
@@ -21465,14 +23157,14 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
   __pyx_v_indent = (__pyx_v_indent + 1);
 
-  /* "lxml/objectify.pyx":1346
+  /* "lxml/objectify.pyx":1421
  * 
  *     indent += 1
  *     for child in element.iterchildren():             # <<<<<<<<<<<<<<
  *         result += _dump(child, indent)
  *     if indent == 1:
  */
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_iterchildren); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1346, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_iterchildren); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1421, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
@@ -21486,16 +23178,16 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   }
   __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1346, __pyx_L1_error)
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1421, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
     __pyx_t_9 = __pyx_t_5; __Pyx_INCREF(__pyx_t_9); __pyx_t_6 = 0;
     __pyx_t_14 = NULL;
   } else {
-    __pyx_t_6 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1346, __pyx_L1_error)
+    __pyx_t_6 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1421, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1346, __pyx_L1_error)
+    __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1421, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   for (;;) {
@@ -21503,17 +23195,17 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       if (likely(PyList_CheckExact(__pyx_t_9))) {
         if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_9)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1346, __pyx_L1_error)
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1421, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_9, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1346, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_9, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1421, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
         if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1346, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1421, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_9, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1346, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_9, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1421, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
@@ -21523,7 +23215,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1346, __pyx_L1_error)
+          else __PYX_ERR(0, 1421, __pyx_L1_error)
         }
         break;
       }
@@ -21532,23 +23224,23 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "lxml/objectify.pyx":1347
+    /* "lxml/objectify.pyx":1422
  *     indent += 1
  *     for child in element.iterchildren():
  *         result += _dump(child, indent)             # <<<<<<<<<<<<<<
  *     if indent == 1:
  *         return result[:-1] # strip last '\n'
  */
-    if (!(likely(((__pyx_v_child) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_child, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) __PYX_ERR(0, 1347, __pyx_L1_error)
-    __pyx_t_5 = __pyx_f_4lxml_9objectify__dump(((struct LxmlElement *)__pyx_v_child), __pyx_v_indent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1347, __pyx_L1_error)
+    if (!(likely(((__pyx_v_child) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_child, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) __PYX_ERR(0, 1422, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_9objectify__dump(((struct LxmlElement *)__pyx_v_child), __pyx_v_indent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1422, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1422, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1346
+    /* "lxml/objectify.pyx":1421
  * 
  *     indent += 1
  *     for child in element.iterchildren():             # <<<<<<<<<<<<<<
@@ -21558,7 +23250,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   }
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/objectify.pyx":1348
+  /* "lxml/objectify.pyx":1423
  *     for child in element.iterchildren():
  *         result += _dump(child, indent)
  *     if indent == 1:             # <<<<<<<<<<<<<<
@@ -21568,7 +23260,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   __pyx_t_3 = ((__pyx_v_indent == 1) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1349
+    /* "lxml/objectify.pyx":1424
  *         result += _dump(child, indent)
  *     if indent == 1:
  *         return result[:-1] # strip last '\n'             # <<<<<<<<<<<<<<
@@ -21576,13 +23268,13 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  *         return result
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_9 = __Pyx_PyObject_GetSlice(__pyx_v_result, 0, -1L, NULL, NULL, &__pyx_slice__16, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1349, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetSlice(__pyx_v_result, 0, -1L, NULL, NULL, &__pyx_slice__16, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_r = __pyx_t_9;
     __pyx_t_9 = 0;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1348
+    /* "lxml/objectify.pyx":1423
  *     for child in element.iterchildren():
  *         result += _dump(child, indent)
  *     if indent == 1:             # <<<<<<<<<<<<<<
@@ -21591,7 +23283,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
   }
 
-  /* "lxml/objectify.pyx":1351
+  /* "lxml/objectify.pyx":1426
  *         return result[:-1] # strip last '\n'
  *     else:
  *         return result             # <<<<<<<<<<<<<<
@@ -21605,7 +23297,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     goto __pyx_L0;
   }
 
-  /* "lxml/objectify.pyx":1321
+  /* "lxml/objectify.pyx":1396
  *     return _dump(element, 0)
  * 
  * cdef object _dump(_Element element, int indent):             # <<<<<<<<<<<<<<
@@ -21635,7 +23327,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1357
+/* "lxml/objectify.pyx":1432
  * # Pickle support for objectified ElementTree
  * 
  * def __unpickleElementTree(data):             # <<<<<<<<<<<<<<
@@ -21670,7 +23362,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__unpickleElementTree", 0);
 
-  /* "lxml/objectify.pyx":1358
+  /* "lxml/objectify.pyx":1433
  * 
  * def __unpickleElementTree(data):
  *     return etree.ElementTree(fromstring(data))             # <<<<<<<<<<<<<<
@@ -21678,9 +23370,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
  * cdef _setupPickle(elementTreeReduceFunction):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_ElementTree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1358, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_ElementTree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1358, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -21694,7 +23386,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
   }
   __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_data);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1358, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
@@ -21710,14 +23402,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1358, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1433, __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;
 
-  /* "lxml/objectify.pyx":1357
+  /* "lxml/objectify.pyx":1432
  * # Pickle support for objectified ElementTree
  * 
  * def __unpickleElementTree(data):             # <<<<<<<<<<<<<<
@@ -21740,7 +23432,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1360
+/* "lxml/objectify.pyx":1435
  *     return etree.ElementTree(fromstring(data))
  * 
  * cdef _setupPickle(elementTreeReduceFunction):             # <<<<<<<<<<<<<<
@@ -21765,7 +23457,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setupPickle", 0);
 
-  /* "lxml/objectify.pyx":1361
+  /* "lxml/objectify.pyx":1436
  * 
  * cdef _setupPickle(elementTreeReduceFunction):
  *     if python.IS_PYTHON2:             # <<<<<<<<<<<<<<
@@ -21775,19 +23467,19 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   __pyx_t_1 = (IS_PYTHON2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1362
+    /* "lxml/objectify.pyx":1437
  * cdef _setupPickle(elementTreeReduceFunction):
  *     if python.IS_PYTHON2:
  *         import copy_reg as copyreg             # <<<<<<<<<<<<<<
  *     else:
  *         import copyreg
  */
-    __pyx_t_2 = __Pyx_Import(__pyx_n_s_copy_reg, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1362, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_Import(__pyx_n_s_copy_reg, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1437, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_copyreg = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "lxml/objectify.pyx":1361
+    /* "lxml/objectify.pyx":1436
  * 
  * cdef _setupPickle(elementTreeReduceFunction):
  *     if python.IS_PYTHON2:             # <<<<<<<<<<<<<<
@@ -21797,7 +23489,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1364
+  /* "lxml/objectify.pyx":1439
  *         import copy_reg as copyreg
  *     else:
  *         import copyreg             # <<<<<<<<<<<<<<
@@ -21805,33 +23497,33 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
  *                    elementTreeReduceFunction, __unpickleElementTree)
  */
   /*else*/ {
-    __pyx_t_2 = __Pyx_Import(__pyx_n_s_copyreg, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1364, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_Import(__pyx_n_s_copyreg, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1439, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_copyreg = __pyx_t_2;
     __pyx_t_2 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":1365
+  /* "lxml/objectify.pyx":1440
  *     else:
  *         import copyreg
  *     copyreg.pickle(etree._ElementTree,             # <<<<<<<<<<<<<<
  *                    elementTreeReduceFunction, __unpickleElementTree)
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_copyreg, __pyx_n_s_pickle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1365, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_copyreg, __pyx_n_s_pickle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_ElementTree_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1365, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_ElementTree_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "lxml/objectify.pyx":1366
+  /* "lxml/objectify.pyx":1441
  *         import copyreg
  *     copyreg.pickle(etree._ElementTree,
  *                    elementTreeReduceFunction, __unpickleElementTree)             # <<<<<<<<<<<<<<
  * 
  * def pickleReduceElementTree(obj):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_unpickleElementTree); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1366, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_unpickleElementTree); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1441, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_6 = NULL;
   __pyx_t_7 = 0;
@@ -21848,7 +23540,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_4, __pyx_v_elementTreeReduceFunction, __pyx_t_5};
-    __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(0, 1365, __pyx_L1_error)
+    __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(0, 1440, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -21858,7 +23550,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_4, __pyx_v_elementTreeReduceFunction, __pyx_t_5};
-    __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(0, 1365, __pyx_L1_error)
+    __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(0, 1440, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -21866,7 +23558,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   } else
   #endif
   {
-    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1365, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1440, __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;
@@ -21880,14 +23572,14 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
     PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_5);
     __pyx_t_4 = 0;
     __pyx_t_5 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1365, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1440, __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;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1360
+  /* "lxml/objectify.pyx":1435
  *     return etree.ElementTree(fromstring(data))
  * 
  * cdef _setupPickle(elementTreeReduceFunction):             # <<<<<<<<<<<<<<
@@ -21914,7 +23606,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1368
+/* "lxml/objectify.pyx":1443
  *                    elementTreeReduceFunction, __unpickleElementTree)
  * 
  * def pickleReduceElementTree(obj):             # <<<<<<<<<<<<<<
@@ -21948,7 +23640,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18pickleReduceElementTree(CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pickleReduceElementTree", 0);
 
-  /* "lxml/objectify.pyx":1369
+  /* "lxml/objectify.pyx":1444
  * 
  * def pickleReduceElementTree(obj):
  *     return __unpickleElementTree, (etree.tostring(obj),)             # <<<<<<<<<<<<<<
@@ -21956,9 +23648,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_18pickleReduceElementTree(CYTHON_UNUS
  * _setupPickle(pickleReduceElementTree)
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_unpickleElementTree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1369, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_unpickleElementTree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1369, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1444, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -21972,15 +23664,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_18pickleReduceElementTree(CYTHON_UNUS
   }
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_obj) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_obj);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1369, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1444, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1369, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1444, __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 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1369, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1444, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -21992,7 +23684,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18pickleReduceElementTree(CYTHON_UNUS
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1368
+  /* "lxml/objectify.pyx":1443
  *                    elementTreeReduceFunction, __unpickleElementTree)
  * 
  * def pickleReduceElementTree(obj):             # <<<<<<<<<<<<<<
@@ -22014,7 +23706,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18pickleReduceElementTree(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1383
+/* "lxml/objectify.pyx":1458
  *     cdef object empty_data_class
  *     cdef object tree_class
  *     def __init__(self, tree_class=None, empty_data_class=None):             # <<<<<<<<<<<<<<
@@ -22068,7 +23760,7 @@ static int __pyx_pw_4lxml_9objectify_27ObjectifyElementClassLookup_1__init__(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1383, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1458, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -22085,7 +23777,7 @@ static int __pyx_pw_4lxml_9objectify_27ObjectifyElementClassLookup_1__init__(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1383, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1458, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.ObjectifyElementClassLookup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -22107,7 +23799,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
   __Pyx_INCREF(__pyx_v_tree_class);
   __Pyx_INCREF(__pyx_v_empty_data_class);
 
-  /* "lxml/objectify.pyx":1392
+  /* "lxml/objectify.pyx":1467
  *         empty data elements (defaults to StringElement).
  *         """
  *         self._lookup_function = _lookupElementClass             # <<<<<<<<<<<<<<
@@ -22116,7 +23808,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
  */
   __pyx_v_self->__pyx_base._lookup_function = __pyx_f_4lxml_9objectify__lookupElementClass;
 
-  /* "lxml/objectify.pyx":1393
+  /* "lxml/objectify.pyx":1468
  *         """
  *         self._lookup_function = _lookupElementClass
  *         if tree_class is None:             # <<<<<<<<<<<<<<
@@ -22127,7 +23819,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1394
+    /* "lxml/objectify.pyx":1469
  *         self._lookup_function = _lookupElementClass
  *         if tree_class is None:
  *             tree_class = ObjectifiedElement             # <<<<<<<<<<<<<<
@@ -22137,7 +23829,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
     __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedElement));
     __Pyx_DECREF_SET(__pyx_v_tree_class, ((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedElement));
 
-    /* "lxml/objectify.pyx":1393
+    /* "lxml/objectify.pyx":1468
  *         """
  *         self._lookup_function = _lookupElementClass
  *         if tree_class is None:             # <<<<<<<<<<<<<<
@@ -22146,7 +23838,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
  */
   }
 
-  /* "lxml/objectify.pyx":1395
+  /* "lxml/objectify.pyx":1470
  *         if tree_class is None:
  *             tree_class = ObjectifiedElement
  *         self.tree_class = tree_class             # <<<<<<<<<<<<<<
@@ -22159,7 +23851,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
   __Pyx_DECREF(__pyx_v_self->tree_class);
   __pyx_v_self->tree_class = __pyx_v_tree_class;
 
-  /* "lxml/objectify.pyx":1396
+  /* "lxml/objectify.pyx":1471
  *             tree_class = ObjectifiedElement
  *         self.tree_class = tree_class
  *         if empty_data_class is None:             # <<<<<<<<<<<<<<
@@ -22170,7 +23862,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1397
+    /* "lxml/objectify.pyx":1472
  *         self.tree_class = tree_class
  *         if empty_data_class is None:
  *             empty_data_class = StringElement             # <<<<<<<<<<<<<<
@@ -22180,7 +23872,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
     __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement));
     __Pyx_DECREF_SET(__pyx_v_empty_data_class, ((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement));
 
-    /* "lxml/objectify.pyx":1396
+    /* "lxml/objectify.pyx":1471
  *             tree_class = ObjectifiedElement
  *         self.tree_class = tree_class
  *         if empty_data_class is None:             # <<<<<<<<<<<<<<
@@ -22189,7 +23881,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
  */
   }
 
-  /* "lxml/objectify.pyx":1398
+  /* "lxml/objectify.pyx":1473
  *         if empty_data_class is None:
  *             empty_data_class = StringElement
  *         self.empty_data_class = empty_data_class             # <<<<<<<<<<<<<<
@@ -22202,7 +23894,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
   __Pyx_DECREF(__pyx_v_self->empty_data_class);
   __pyx_v_self->empty_data_class = __pyx_v_empty_data_class;
 
-  /* "lxml/objectify.pyx":1383
+  /* "lxml/objectify.pyx":1458
  *     cdef object empty_data_class
  *     cdef object tree_class
  *     def __init__(self, tree_class=None, empty_data_class=None):             # <<<<<<<<<<<<<<
@@ -22218,7 +23910,7 @@ static int __pyx_pf_4lxml_9objectify_27ObjectifyElementClassLookup___init__(stru
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1400
+/* "lxml/objectify.pyx":1475
  *         self.empty_data_class = empty_data_class
  * 
  * cdef object _lookupElementClass(state, _Document doc, tree.xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -22248,7 +23940,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_lookupElementClass", 0);
 
-  /* "lxml/objectify.pyx":1402
+  /* "lxml/objectify.pyx":1477
  * cdef object _lookupElementClass(state, _Document doc, tree.xmlNode* c_node):
  *     cdef ObjectifyElementClassLookup lookup
  *     lookup = <ObjectifyElementClassLookup>state             # <<<<<<<<<<<<<<
@@ -22260,7 +23952,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_v_lookup = ((struct __pyx_obj_4lxml_9objectify_ObjectifyElementClassLookup *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1404
+  /* "lxml/objectify.pyx":1479
  *     lookup = <ObjectifyElementClassLookup>state
  *     # if element has children => no data class
  *     if cetree.hasChild(c_node):             # <<<<<<<<<<<<<<
@@ -22270,7 +23962,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_t_2 = (hasChild(__pyx_v_c_node) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1405
+    /* "lxml/objectify.pyx":1480
  *     # if element has children => no data class
  *     if cetree.hasChild(c_node):
  *         return lookup.tree_class             # <<<<<<<<<<<<<<
@@ -22282,7 +23974,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_r = __pyx_v_lookup->tree_class;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1404
+    /* "lxml/objectify.pyx":1479
  *     lookup = <ObjectifyElementClassLookup>state
  *     # if element has children => no data class
  *     if cetree.hasChild(c_node):             # <<<<<<<<<<<<<<
@@ -22291,20 +23983,20 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1408
+  /* "lxml/objectify.pyx":1483
  * 
  *     # if element is defined as xsi:nil, return NoneElement class
  *     if u"true" == cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"nil"):
  *         return NoneElement
  */
-  __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"nil")))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1408, __pyx_L1_error)
+  __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"nil")))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_n_u_true, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1408, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_n_u_true, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1483, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1410
+    /* "lxml/objectify.pyx":1485
  *     if u"true" == cetree.attributeValueFromNsName(
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"nil"):
  *         return NoneElement             # <<<<<<<<<<<<<<
@@ -22316,7 +24008,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_r = ((PyObject *)__pyx_ptype_4lxml_9objectify_NoneElement);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1408
+    /* "lxml/objectify.pyx":1483
  * 
  *     # if element is defined as xsi:nil, return NoneElement class
  *     if u"true" == cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
@@ -22325,19 +24017,19 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1413
+  /* "lxml/objectify.pyx":1488
  * 
  *     # check for Python type hint
  *     value = cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
  *         c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *     if value is not None:
  */
-  __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__PYTYPE_NAMESPACE, __pyx_v_4lxml_9objectify__PYTYPE_ATTRIBUTE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1413, __pyx_L1_error)
+  __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__PYTYPE_NAMESPACE, __pyx_v_4lxml_9objectify__PYTYPE_ATTRIBUTE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_value = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1415
+  /* "lxml/objectify.pyx":1490
  *     value = cetree.attributeValueFromNsName(
  *         c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *     if value is not None:             # <<<<<<<<<<<<<<
@@ -22348,17 +24040,17 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1416
+    /* "lxml/objectify.pyx":1491
  *         c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *     if value is not None:
  *         if value == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
  *             return lookup.tree_class
  *         py_type = <PyType>_PYTYPE_DICT.get(value)
  */
-    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_value, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1416, __pyx_L1_error)
+    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_value, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1491, __pyx_L1_error)
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1417
+      /* "lxml/objectify.pyx":1492
  *     if value is not None:
  *         if value == TREE_PYTYPE_NAME:
  *             return lookup.tree_class             # <<<<<<<<<<<<<<
@@ -22370,7 +24062,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
       __pyx_r = __pyx_v_lookup->tree_class;
       goto __pyx_L0;
 
-      /* "lxml/objectify.pyx":1416
+      /* "lxml/objectify.pyx":1491
  *         c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *     if value is not None:
  *         if value == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
@@ -22379,7 +24071,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1418
+    /* "lxml/objectify.pyx":1493
  *         if value == TREE_PYTYPE_NAME:
  *             return lookup.tree_class
  *         py_type = <PyType>_PYTYPE_DICT.get(value)             # <<<<<<<<<<<<<<
@@ -22388,9 +24080,9 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
     if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-      __PYX_ERR(0, 1418, __pyx_L1_error)
+      __PYX_ERR(0, 1493, __pyx_L1_error)
     }
-    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_value, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1418, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_value, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1493, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = __pyx_t_1;
     __Pyx_INCREF(__pyx_t_4);
@@ -22398,7 +24090,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_v_py_type = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/objectify.pyx":1419
+    /* "lxml/objectify.pyx":1494
  *             return lookup.tree_class
  *         py_type = <PyType>_PYTYPE_DICT.get(value)
  *         if py_type is not None:             # <<<<<<<<<<<<<<
@@ -22409,7 +24101,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1420
+      /* "lxml/objectify.pyx":1495
  *         py_type = <PyType>_PYTYPE_DICT.get(value)
  *         if py_type is not None:
  *             return py_type._type             # <<<<<<<<<<<<<<
@@ -22421,7 +24113,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
       __pyx_r = __pyx_v_py_type->_type;
       goto __pyx_L0;
 
-      /* "lxml/objectify.pyx":1419
+      /* "lxml/objectify.pyx":1494
  *             return lookup.tree_class
  *         py_type = <PyType>_PYTYPE_DICT.get(value)
  *         if py_type is not None:             # <<<<<<<<<<<<<<
@@ -22430,7 +24122,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1415
+    /* "lxml/objectify.pyx":1490
  *     value = cetree.attributeValueFromNsName(
  *         c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *     if value is not None:             # <<<<<<<<<<<<<<
@@ -22439,19 +24131,19 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1424
+  /* "lxml/objectify.pyx":1499
  * 
  *     # check for XML Schema type hint
  *     value = cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  * 
  */
-  __pyx_t_4 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"type")))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1424, __pyx_L1_error)
+  __pyx_t_4 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"type")))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1499, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/objectify.pyx":1427
+  /* "lxml/objectify.pyx":1502
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  * 
  *     if value is not None:             # <<<<<<<<<<<<<<
@@ -22462,7 +24154,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1428
+    /* "lxml/objectify.pyx":1503
  * 
  *     if value is not None:
  *         schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)             # <<<<<<<<<<<<<<
@@ -22471,9 +24163,9 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
     if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-      __PYX_ERR(0, 1428, __pyx_L1_error)
+      __PYX_ERR(0, 1503, __pyx_L1_error)
     }
-    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_value, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1428, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_value, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1503, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_1 = __pyx_t_4;
     __Pyx_INCREF(__pyx_t_1);
@@ -22481,7 +24173,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_v_schema_type = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1429
+    /* "lxml/objectify.pyx":1504
  *     if value is not None:
  *         schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is None and u':' in value:             # <<<<<<<<<<<<<<
@@ -22495,22 +24187,22 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L10_bool_binop_done;
     }
-    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v_value, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1429, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v_value, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1504, __pyx_L1_error)
     __pyx_t_2 = (__pyx_t_5 != 0);
     __pyx_t_3 = __pyx_t_2;
     __pyx_L10_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1430
+      /* "lxml/objectify.pyx":1505
  *         schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is None and u':' in value:
  *             prefix, value = value.split(u':', 1)             # <<<<<<<<<<<<<<
  *             schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is not None:
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1430, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1505, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1430, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1505, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
@@ -22519,7 +24211,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(0, 1430, __pyx_L1_error)
+          __PYX_ERR(0, 1505, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -22532,15 +24224,15 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
         __Pyx_INCREF(__pyx_t_1);
         __Pyx_INCREF(__pyx_t_6);
         #else
-        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1430, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1505, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1430, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1505, __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(0, 1430, __pyx_L1_error)
+        __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1505, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -22548,7 +24240,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
         __Pyx_GOTREF(__pyx_t_1);
         index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L12_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_6);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1430, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1505, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         goto __pyx_L13_unpacking_done;
@@ -22556,7 +24248,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(0, 1430, __pyx_L1_error)
+        __PYX_ERR(0, 1505, __pyx_L1_error)
         __pyx_L13_unpacking_done:;
       }
       __pyx_v_prefix = __pyx_t_1;
@@ -22564,7 +24256,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
       __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1431
+      /* "lxml/objectify.pyx":1506
  *         if schema_type is None and u':' in value:
  *             prefix, value = value.split(u':', 1)
  *             schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)             # <<<<<<<<<<<<<<
@@ -22573,9 +24265,9 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
       if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-        __PYX_ERR(0, 1431, __pyx_L1_error)
+        __PYX_ERR(0, 1506, __pyx_L1_error)
       }
-      __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_value, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1431, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_value, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1506, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = __pyx_t_4;
       __Pyx_INCREF(__pyx_t_6);
@@ -22583,7 +24275,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
       __Pyx_DECREF_SET(__pyx_v_schema_type, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_6));
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1429
+      /* "lxml/objectify.pyx":1504
  *     if value is not None:
  *         schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is None and u':' in value:             # <<<<<<<<<<<<<<
@@ -22592,7 +24284,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1432
+    /* "lxml/objectify.pyx":1507
  *             prefix, value = value.split(u':', 1)
  *             schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is not None:             # <<<<<<<<<<<<<<
@@ -22603,7 +24295,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1433
+      /* "lxml/objectify.pyx":1508
  *             schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is not None:
  *             return schema_type._type             # <<<<<<<<<<<<<<
@@ -22615,7 +24307,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
       __pyx_r = __pyx_v_schema_type->_type;
       goto __pyx_L0;
 
-      /* "lxml/objectify.pyx":1432
+      /* "lxml/objectify.pyx":1507
  *             prefix, value = value.split(u':', 1)
  *             schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is not None:             # <<<<<<<<<<<<<<
@@ -22624,7 +24316,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1427
+    /* "lxml/objectify.pyx":1502
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  * 
  *     if value is not None:             # <<<<<<<<<<<<<<
@@ -22633,19 +24325,19 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1436
+  /* "lxml/objectify.pyx":1511
  * 
  *     # otherwise determine class based on text content type
  *     el_class = _guessElementClass(c_node)             # <<<<<<<<<<<<<<
  *     if el_class is not None:
  *         return el_class
  */
-  __pyx_t_6 = __pyx_f_4lxml_9objectify__guessElementClass(__pyx_v_c_node); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1436, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_4lxml_9objectify__guessElementClass(__pyx_v_c_node); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_el_class = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "lxml/objectify.pyx":1437
+  /* "lxml/objectify.pyx":1512
  *     # otherwise determine class based on text content type
  *     el_class = _guessElementClass(c_node)
  *     if el_class is not None:             # <<<<<<<<<<<<<<
@@ -22656,7 +24348,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1438
+    /* "lxml/objectify.pyx":1513
  *     el_class = _guessElementClass(c_node)
  *     if el_class is not None:
  *         return el_class             # <<<<<<<<<<<<<<
@@ -22668,7 +24360,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_r = __pyx_v_el_class;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1437
+    /* "lxml/objectify.pyx":1512
  *     # otherwise determine class based on text content type
  *     el_class = _guessElementClass(c_node)
  *     if el_class is not None:             # <<<<<<<<<<<<<<
@@ -22677,7 +24369,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1441
+  /* "lxml/objectify.pyx":1516
  * 
  *     # if element is a root node => default to tree node
  *     if c_node.parent is NULL or not tree._isElement(c_node.parent):             # <<<<<<<<<<<<<<
@@ -22695,7 +24387,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_L17_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1442
+    /* "lxml/objectify.pyx":1517
  *     # if element is a root node => default to tree node
  *     if c_node.parent is NULL or not tree._isElement(c_node.parent):
  *         return lookup.tree_class             # <<<<<<<<<<<<<<
@@ -22707,7 +24399,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
     __pyx_r = __pyx_v_lookup->tree_class;
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1441
+    /* "lxml/objectify.pyx":1516
  * 
  *     # if element is a root node => default to tree node
  *     if c_node.parent is NULL or not tree._isElement(c_node.parent):             # <<<<<<<<<<<<<<
@@ -22716,7 +24408,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1444
+  /* "lxml/objectify.pyx":1519
  *         return lookup.tree_class
  * 
  *     return lookup.empty_data_class             # <<<<<<<<<<<<<<
@@ -22728,7 +24420,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   __pyx_r = __pyx_v_lookup->empty_data_class;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1400
+  /* "lxml/objectify.pyx":1475
  *         self.empty_data_class = empty_data_class
  * 
  * cdef object _lookupElementClass(state, _Document doc, tree.xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -22756,7 +24448,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1450
+/* "lxml/objectify.pyx":1525
  * # Type annotations
  * 
  * cdef PyType _check_type(tree.xmlNode* c_node, PyType pytype):             # <<<<<<<<<<<<<<
@@ -22782,7 +24474,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_check_type", 0);
 
-  /* "lxml/objectify.pyx":1451
+  /* "lxml/objectify.pyx":1526
  * 
  * cdef PyType _check_type(tree.xmlNode* c_node, PyType pytype):
  *     if pytype is None:             # <<<<<<<<<<<<<<
@@ -22793,7 +24485,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1452
+    /* "lxml/objectify.pyx":1527
  * cdef PyType _check_type(tree.xmlNode* c_node, PyType pytype):
  *     if pytype is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -22804,7 +24496,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
     __pyx_r = ((struct __pyx_obj_4lxml_9objectify_PyType *)Py_None); __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1451
+    /* "lxml/objectify.pyx":1526
  * 
  * cdef PyType _check_type(tree.xmlNode* c_node, PyType pytype):
  *     if pytype is None:             # <<<<<<<<<<<<<<
@@ -22813,19 +24505,19 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
  */
   }
 
-  /* "lxml/objectify.pyx":1453
+  /* "lxml/objectify.pyx":1528
  *     if pytype is None:
  *         return None
  *     value = textOf(c_node)             # <<<<<<<<<<<<<<
  *     try:
  *         pytype.type_check(value)
  */
-  __pyx_t_3 = textOf(__pyx_v_c_node); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1453, __pyx_L1_error)
+  __pyx_t_3 = textOf(__pyx_v_c_node); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_value = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1454
+  /* "lxml/objectify.pyx":1529
  *         return None
  *     value = textOf(c_node)
  *     try:             # <<<<<<<<<<<<<<
@@ -22841,7 +24533,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "lxml/objectify.pyx":1455
+      /* "lxml/objectify.pyx":1530
  *     value = textOf(c_node)
  *     try:
  *         pytype.type_check(value)             # <<<<<<<<<<<<<<
@@ -22861,12 +24553,12 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
       }
       __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_value);
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1455, __pyx_L4_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "lxml/objectify.pyx":1456
+      /* "lxml/objectify.pyx":1531
  *     try:
  *         pytype.type_check(value)
  *         return pytype             # <<<<<<<<<<<<<<
@@ -22878,7 +24570,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
       __pyx_r = __pyx_v_pytype;
       goto __pyx_L8_try_return;
 
-      /* "lxml/objectify.pyx":1454
+      /* "lxml/objectify.pyx":1529
  *         return None
  *     value = textOf(c_node)
  *     try:             # <<<<<<<<<<<<<<
@@ -22891,7 +24583,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "lxml/objectify.pyx":1457
+    /* "lxml/objectify.pyx":1532
  *         pytype.type_check(value)
  *         return pytype
  *     except IGNORABLE_ERRORS:             # <<<<<<<<<<<<<<
@@ -22906,7 +24598,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
     goto __pyx_L6_except_error;
     __pyx_L6_except_error:;
 
-    /* "lxml/objectify.pyx":1454
+    /* "lxml/objectify.pyx":1529
  *         return None
  *     value = textOf(c_node)
  *     try:             # <<<<<<<<<<<<<<
@@ -22931,7 +24623,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
   }
 
-  /* "lxml/objectify.pyx":1460
+  /* "lxml/objectify.pyx":1535
  *         # could not be parsed as the specified type => ignore
  *         pass
  *     return None             # <<<<<<<<<<<<<<
@@ -22942,7 +24634,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
   __pyx_r = ((struct __pyx_obj_4lxml_9objectify_PyType *)Py_None); __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1450
+  /* "lxml/objectify.pyx":1525
  * # Type annotations
  * 
  * cdef PyType _check_type(tree.xmlNode* c_node, PyType pytype):             # <<<<<<<<<<<<<<
@@ -22964,7 +24656,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1462
+/* "lxml/objectify.pyx":1537
  *     return None
  * 
  * def pyannotate(element_or_tree, *, ignore_old=False, ignore_xsi=False,             # <<<<<<<<<<<<<<
@@ -22993,7 +24685,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_21pyannotate(PyObject *__pyx_self, Py
     values[1] = ((PyObject *)((PyObject *)Py_False));
     values[2] = ((PyObject *)((PyObject *)Py_False));
 
-    /* "lxml/objectify.pyx":1463
+    /* "lxml/objectify.pyx":1538
  * 
  * def pyannotate(element_or_tree, *, ignore_old=False, ignore_xsi=False,
  *              empty_pytype=None):             # <<<<<<<<<<<<<<
@@ -23024,7 +24716,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_21pyannotate(PyObject *__pyx_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pyannotate") < 0)) __PYX_ERR(0, 1462, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pyannotate") < 0)) __PYX_ERR(0, 1537, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -23038,7 +24730,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_21pyannotate(PyObject *__pyx_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pyannotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1462, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("pyannotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1537, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.pyannotate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -23046,7 +24738,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_21pyannotate(PyObject *__pyx_self, Py
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_9objectify_20pyannotate(__pyx_self, __pyx_v_element_or_tree, __pyx_v_ignore_old, __pyx_v_ignore_xsi, __pyx_v_empty_pytype);
 
-  /* "lxml/objectify.pyx":1462
+  /* "lxml/objectify.pyx":1537
  *     return None
  * 
  * def pyannotate(element_or_tree, *, ignore_old=False, ignore_xsi=False,             # <<<<<<<<<<<<<<
@@ -23071,32 +24763,32 @@ static PyObject *__pyx_pf_4lxml_9objectify_20pyannotate(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pyannotate", 0);
 
-  /* "lxml/objectify.pyx":1482
+  /* "lxml/objectify.pyx":1557
  *     """
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)             # <<<<<<<<<<<<<<
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
  * 
  */
-  __pyx_t_1 = ((PyObject *)rootNodeOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1482, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)rootNodeOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1557, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_element = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1483
+  /* "lxml/objectify.pyx":1558
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)             # <<<<<<<<<<<<<<
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_xsi); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1483, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_old); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1483, __pyx_L1_error)
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__annotate(__pyx_v_element, 0, 1, __pyx_t_2, __pyx_t_3, Py_None, __pyx_v_empty_pytype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1483, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_xsi); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1558, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_old); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1558, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__annotate(__pyx_v_element, 0, 1, __pyx_t_2, __pyx_t_3, Py_None, __pyx_v_empty_pytype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1558, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1462
+  /* "lxml/objectify.pyx":1537
  *     return None
  * 
  * def pyannotate(element_or_tree, *, ignore_old=False, ignore_xsi=False,             # <<<<<<<<<<<<<<
@@ -23118,7 +24810,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_20pyannotate(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1485
+/* "lxml/objectify.pyx":1560
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,             # <<<<<<<<<<<<<<
@@ -23147,7 +24839,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_23xsiannotate(PyObject *__pyx_self, P
     values[1] = ((PyObject *)((PyObject *)Py_False));
     values[2] = ((PyObject *)((PyObject *)Py_False));
 
-    /* "lxml/objectify.pyx":1486
+    /* "lxml/objectify.pyx":1561
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,
  *                 empty_type=None):             # <<<<<<<<<<<<<<
@@ -23178,7 +24870,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_23xsiannotate(PyObject *__pyx_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xsiannotate") < 0)) __PYX_ERR(0, 1485, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xsiannotate") < 0)) __PYX_ERR(0, 1560, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -23192,7 +24884,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_23xsiannotate(PyObject *__pyx_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("xsiannotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1485, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("xsiannotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1560, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.xsiannotate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -23200,7 +24892,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_23xsiannotate(PyObject *__pyx_self, P
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_9objectify_22xsiannotate(__pyx_self, __pyx_v_element_or_tree, __pyx_v_ignore_old, __pyx_v_ignore_pytype, __pyx_v_empty_type);
 
-  /* "lxml/objectify.pyx":1485
+  /* "lxml/objectify.pyx":1560
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,             # <<<<<<<<<<<<<<
@@ -23225,32 +24917,32 @@ static PyObject *__pyx_pf_4lxml_9objectify_22xsiannotate(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("xsiannotate", 0);
 
-  /* "lxml/objectify.pyx":1510
+  /* "lxml/objectify.pyx":1585
  *     """
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)             # <<<<<<<<<<<<<<
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
  * 
  */
-  __pyx_t_1 = ((PyObject *)rootNodeOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1510, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)rootNodeOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_element = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1511
+  /* "lxml/objectify.pyx":1586
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)             # <<<<<<<<<<<<<<
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_old); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1511, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_pytype); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1511, __pyx_L1_error)
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__annotate(__pyx_v_element, 1, 0, __pyx_t_2, __pyx_t_3, __pyx_v_empty_type, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_old); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1586, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_pytype); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1586, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__annotate(__pyx_v_element, 1, 0, __pyx_t_2, __pyx_t_3, __pyx_v_empty_type, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1586, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1485
+  /* "lxml/objectify.pyx":1560
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,             # <<<<<<<<<<<<<<
@@ -23272,7 +24964,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_22xsiannotate(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1513
+/* "lxml/objectify.pyx":1588
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,             # <<<<<<<<<<<<<<
@@ -23304,7 +24996,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_25annotate(PyObject *__pyx_self, PyOb
     values[1] = ((PyObject *)((PyObject *)Py_True));
     values[2] = ((PyObject *)((PyObject *)Py_False));
 
-    /* "lxml/objectify.pyx":1514
+    /* "lxml/objectify.pyx":1589
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,
  *              empty_pytype=None, empty_type=None, annotate_xsi=0,             # <<<<<<<<<<<<<<
@@ -23338,7 +25030,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_25annotate(PyObject *__pyx_self, PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "annotate") < 0)) __PYX_ERR(0, 1513, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "annotate") < 0)) __PYX_ERR(0, 1588, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -23355,7 +25047,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_25annotate(PyObject *__pyx_self, PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("annotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1513, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("annotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1588, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.annotate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -23363,7 +25055,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_25annotate(PyObject *__pyx_self, PyOb
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_9objectify_24annotate(__pyx_self, __pyx_v_element_or_tree, __pyx_v_ignore_old, __pyx_v_ignore_xsi, __pyx_v_empty_pytype, __pyx_v_empty_type, __pyx_v_annotate_xsi, __pyx_v_annotate_pytype);
 
-  /* "lxml/objectify.pyx":1513
+  /* "lxml/objectify.pyx":1588
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,             # <<<<<<<<<<<<<<
@@ -23390,50 +25082,50 @@ static PyObject *__pyx_pf_4lxml_9objectify_24annotate(CYTHON_UNUSED PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("annotate", 0);
 
-  /* "lxml/objectify.pyx":1547
+  /* "lxml/objectify.pyx":1622
  *     """
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)             # <<<<<<<<<<<<<<
  *     _annotate(element, annotate_xsi, annotate_pytype, ignore_xsi,
  *               ignore_old, empty_type, empty_pytype)
  */
-  __pyx_t_1 = ((PyObject *)rootNodeOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1547, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)rootNodeOrRaise(__pyx_v_element_or_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1622, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_element = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1548
+  /* "lxml/objectify.pyx":1623
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)
  *     _annotate(element, annotate_xsi, annotate_pytype, ignore_xsi,             # <<<<<<<<<<<<<<
  *               ignore_old, empty_type, empty_pytype)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotate_xsi); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1548, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_annotate_pytype); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1548, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_xsi); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotate_xsi); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1623, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_annotate_pytype); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1623, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_xsi); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1623, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1549
+  /* "lxml/objectify.pyx":1624
  *     element = cetree.rootNodeOrRaise(element_or_tree)
  *     _annotate(element, annotate_xsi, annotate_pytype, ignore_xsi,
  *               ignore_old, empty_type, empty_pytype)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_old); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_ignore_old); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1624, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1548
+  /* "lxml/objectify.pyx":1623
  *     cdef _Element  element
  *     element = cetree.rootNodeOrRaise(element_or_tree)
  *     _annotate(element, annotate_xsi, annotate_pytype, ignore_xsi,             # <<<<<<<<<<<<<<
  *               ignore_old, empty_type, empty_pytype)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__annotate(__pyx_v_element, __pyx_t_2, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_v_empty_type, __pyx_v_empty_pytype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__annotate(__pyx_v_element, __pyx_t_2, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_v_empty_type, __pyx_v_empty_pytype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1513
+  /* "lxml/objectify.pyx":1588
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,             # <<<<<<<<<<<<<<
@@ -23455,7 +25147,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_24annotate(CYTHON_UNUSED PyObject *__
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1552
+/* "lxml/objectify.pyx":1627
  * 
  * 
  * cdef _annotate(_Element element, bint annotate_xsi, bint annotate_pytype,             # <<<<<<<<<<<<<<
@@ -23484,7 +25176,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __Pyx_INCREF(__pyx_v_empty_type_name);
   __Pyx_INCREF(__pyx_v_empty_pytype_name);
 
-  /* "lxml/objectify.pyx":1559
+  /* "lxml/objectify.pyx":1634
  *     cdef PyType empty_pytype, StrType, NoneType
  * 
  *     if not annotate_xsi and not annotate_pytype:             # <<<<<<<<<<<<<<
@@ -23502,7 +25194,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1560
+    /* "lxml/objectify.pyx":1635
  * 
  *     if not annotate_xsi and not annotate_pytype:
  *         return             # <<<<<<<<<<<<<<
@@ -23513,7 +25205,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/objectify.pyx":1559
+    /* "lxml/objectify.pyx":1634
  *     cdef PyType empty_pytype, StrType, NoneType
  * 
  *     if not annotate_xsi and not annotate_pytype:             # <<<<<<<<<<<<<<
@@ -23522,7 +25214,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1562
+  /* "lxml/objectify.pyx":1637
  *         return
  * 
  *     if empty_type_name is not None:             # <<<<<<<<<<<<<<
@@ -23533,7 +25225,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1563
+    /* "lxml/objectify.pyx":1638
  * 
  *     if empty_type_name is not None:
  *         if isinstance(empty_type_name, bytes):             # <<<<<<<<<<<<<<
@@ -23544,7 +25236,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1564
+      /* "lxml/objectify.pyx":1639
  *     if empty_type_name is not None:
  *         if isinstance(empty_type_name, bytes):
  *             empty_type_name = (<bytes>empty_type_name).decode("ascii")             # <<<<<<<<<<<<<<
@@ -23553,14 +25245,14 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
       if (unlikely(__pyx_v_empty_type_name == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-        __PYX_ERR(0, 1564, __pyx_L1_error)
+        __PYX_ERR(0, 1639, __pyx_L1_error)
       }
-      __pyx_t_3 = __Pyx_decode_bytes(((PyObject*)__pyx_v_empty_type_name), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1564, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_decode_bytes(((PyObject*)__pyx_v_empty_type_name), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1639, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_empty_type_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/objectify.pyx":1563
+      /* "lxml/objectify.pyx":1638
  * 
  *     if empty_type_name is not None:
  *         if isinstance(empty_type_name, bytes):             # <<<<<<<<<<<<<<
@@ -23569,7 +25261,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1565
+    /* "lxml/objectify.pyx":1640
  *         if isinstance(empty_type_name, bytes):
  *             empty_type_name = (<bytes>empty_type_name).decode("ascii")
  *         empty_pytype = <PyType>_SCHEMA_TYPE_DICT.get(empty_type_name)             # <<<<<<<<<<<<<<
@@ -23578,9 +25270,9 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
     if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-      __PYX_ERR(0, 1565, __pyx_L1_error)
+      __PYX_ERR(0, 1640, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_empty_type_name, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1565, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_empty_type_name, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = __pyx_t_3;
     __Pyx_INCREF(__pyx_t_4);
@@ -23588,7 +25280,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     __pyx_v_empty_pytype = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/objectify.pyx":1562
+    /* "lxml/objectify.pyx":1637
  *         return
  * 
  *     if empty_type_name is not None:             # <<<<<<<<<<<<<<
@@ -23598,7 +25290,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     goto __pyx_L6;
   }
 
-  /* "lxml/objectify.pyx":1566
+  /* "lxml/objectify.pyx":1641
  *             empty_type_name = (<bytes>empty_type_name).decode("ascii")
  *         empty_pytype = <PyType>_SCHEMA_TYPE_DICT.get(empty_type_name)
  *     elif empty_pytype_name is not None:             # <<<<<<<<<<<<<<
@@ -23609,7 +25301,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1567
+    /* "lxml/objectify.pyx":1642
  *         empty_pytype = <PyType>_SCHEMA_TYPE_DICT.get(empty_type_name)
  *     elif empty_pytype_name is not None:
  *         if isinstance(empty_pytype_name, bytes):             # <<<<<<<<<<<<<<
@@ -23620,7 +25312,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1568
+      /* "lxml/objectify.pyx":1643
  *     elif empty_pytype_name is not None:
  *         if isinstance(empty_pytype_name, bytes):
  *             empty_pytype_name = (<bytes>empty_pytype_name).decode("ascii")             # <<<<<<<<<<<<<<
@@ -23629,14 +25321,14 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
       if (unlikely(__pyx_v_empty_pytype_name == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-        __PYX_ERR(0, 1568, __pyx_L1_error)
+        __PYX_ERR(0, 1643, __pyx_L1_error)
       }
-      __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_v_empty_pytype_name), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1568, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_v_empty_pytype_name), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1643, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_empty_pytype_name, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1567
+      /* "lxml/objectify.pyx":1642
  *         empty_pytype = <PyType>_SCHEMA_TYPE_DICT.get(empty_type_name)
  *     elif empty_pytype_name is not None:
  *         if isinstance(empty_pytype_name, bytes):             # <<<<<<<<<<<<<<
@@ -23645,7 +25337,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
     }
 
-    /* "lxml/objectify.pyx":1569
+    /* "lxml/objectify.pyx":1644
  *         if isinstance(empty_pytype_name, bytes):
  *             empty_pytype_name = (<bytes>empty_pytype_name).decode("ascii")
  *         empty_pytype = <PyType>_PYTYPE_DICT.get(empty_pytype_name)             # <<<<<<<<<<<<<<
@@ -23654,9 +25346,9 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
     if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-      __PYX_ERR(0, 1569, __pyx_L1_error)
+      __PYX_ERR(0, 1644, __pyx_L1_error)
     }
-    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_empty_pytype_name, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1569, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_empty_pytype_name, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __Pyx_INCREF(__pyx_t_3);
@@ -23664,7 +25356,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     __pyx_v_empty_pytype = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/objectify.pyx":1566
+    /* "lxml/objectify.pyx":1641
  *             empty_type_name = (<bytes>empty_type_name).decode("ascii")
  *         empty_pytype = <PyType>_SCHEMA_TYPE_DICT.get(empty_type_name)
  *     elif empty_pytype_name is not None:             # <<<<<<<<<<<<<<
@@ -23674,7 +25366,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
     goto __pyx_L6;
   }
 
-  /* "lxml/objectify.pyx":1571
+  /* "lxml/objectify.pyx":1646
  *         empty_pytype = <PyType>_PYTYPE_DICT.get(empty_pytype_name)
  *     else:
  *         empty_pytype = None             # <<<<<<<<<<<<<<
@@ -23687,7 +25379,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   }
   __pyx_L6:;
 
-  /* "lxml/objectify.pyx":1573
+  /* "lxml/objectify.pyx":1648
  *         empty_pytype = None
  * 
  *     StrType  = <PyType>_PYTYPE_DICT.get(u'str')             # <<<<<<<<<<<<<<
@@ -23696,9 +25388,9 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
   if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-    __PYX_ERR(0, 1573, __pyx_L1_error)
+    __PYX_ERR(0, 1648, __pyx_L1_error)
   }
-  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_n_u_str, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1573, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_n_u_str, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1648, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = __pyx_t_3;
   __Pyx_INCREF(__pyx_t_4);
@@ -23706,7 +25398,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_v_StrType = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/objectify.pyx":1574
+  /* "lxml/objectify.pyx":1649
  * 
  *     StrType  = <PyType>_PYTYPE_DICT.get(u'str')
  *     NoneType = <PyType>_PYTYPE_DICT.get(u'NoneType')             # <<<<<<<<<<<<<<
@@ -23715,9 +25407,9 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
   if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-    __PYX_ERR(0, 1574, __pyx_L1_error)
+    __PYX_ERR(0, 1649, __pyx_L1_error)
   }
-  __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_n_u_NoneType, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1574, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_n_u_NoneType, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1649, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_3 = __pyx_t_4;
   __Pyx_INCREF(__pyx_t_3);
@@ -23725,7 +25417,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_v_NoneType = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1576
+  /* "lxml/objectify.pyx":1651
  *     NoneType = <PyType>_PYTYPE_DICT.get(u'NoneType')
  * 
  *     doc = element._doc             # <<<<<<<<<<<<<<
@@ -23737,7 +25429,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1577
+  /* "lxml/objectify.pyx":1652
  * 
  *     doc = element._doc
  *     c_node = element._c_node             # <<<<<<<<<<<<<<
@@ -23747,7 +25439,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_t_5 = __pyx_v_element->_c_node;
   __pyx_v_c_node = __pyx_t_5;
 
-  /* "lxml/objectify.pyx":1578
+  /* "lxml/objectify.pyx":1653
  *     doc = element._doc
  *     c_node = element._c_node
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_node, c_node, 1)             # <<<<<<<<<<<<<<
@@ -23756,7 +25448,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node, __pyx_v_c_node, 1);
 
-  /* "lxml/objectify.pyx":1579
+  /* "lxml/objectify.pyx":1654
  *     c_node = element._c_node
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_node, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -23766,16 +25458,16 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1580
+    /* "lxml/objectify.pyx":1655
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_node, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         _annotate_element(c_node, doc, annotate_xsi, annotate_pytype,             # <<<<<<<<<<<<<<
  *                           ignore_xsi, ignore_pytype,
  *                           empty_type_name, empty_pytype, StrType, NoneType)
  */
-    __pyx_t_6 = __pyx_f_4lxml_9objectify__annotate_element(__pyx_v_c_node, __pyx_v_doc, __pyx_v_annotate_xsi, __pyx_v_annotate_pytype, __pyx_v_ignore_xsi, __pyx_v_ignore_pytype, __pyx_v_empty_type_name, __pyx_v_empty_pytype, __pyx_v_StrType, __pyx_v_NoneType); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1580, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_9objectify__annotate_element(__pyx_v_c_node, __pyx_v_doc, __pyx_v_annotate_xsi, __pyx_v_annotate_pytype, __pyx_v_ignore_xsi, __pyx_v_ignore_pytype, __pyx_v_empty_type_name, __pyx_v_empty_pytype, __pyx_v_StrType, __pyx_v_NoneType); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1655, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":1579
+    /* "lxml/objectify.pyx":1654
  *     c_node = element._c_node
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_node, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -23784,7 +25476,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
   }
 
-  /* "lxml/objectify.pyx":1583
+  /* "lxml/objectify.pyx":1658
  *                           ignore_xsi, ignore_pytype,
  *                           empty_type_name, empty_pytype, StrType, NoneType)
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -23793,7 +25485,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "lxml/objectify.pyx":1552
+  /* "lxml/objectify.pyx":1627
  * 
  * 
  * cdef _annotate(_Element element, bint annotate_xsi, bint annotate_pytype,             # <<<<<<<<<<<<<<
@@ -23821,7 +25513,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1585
+/* "lxml/objectify.pyx":1660
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  * 
  * cdef int _annotate_element(tree.xmlNode* c_node, _Document doc,             # <<<<<<<<<<<<<<
@@ -23854,7 +25546,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_annotate_element", 0);
 
-  /* "lxml/objectify.pyx":1591
+  /* "lxml/objectify.pyx":1666
  *                            PyType StrType, PyType NoneType) except -1:
  *     cdef tree.xmlNs*   c_ns
  *     cdef PyType pytype = None             # <<<<<<<<<<<<<<
@@ -23864,7 +25556,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __Pyx_INCREF(Py_None);
   __pyx_v_pytype = ((struct __pyx_obj_4lxml_9objectify_PyType *)Py_None);
 
-  /* "lxml/objectify.pyx":1592
+  /* "lxml/objectify.pyx":1667
  *     cdef tree.xmlNs*   c_ns
  *     cdef PyType pytype = None
  *     typename = None             # <<<<<<<<<<<<<<
@@ -23874,7 +25566,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __Pyx_INCREF(Py_None);
   __pyx_v_typename = Py_None;
 
-  /* "lxml/objectify.pyx":1593
+  /* "lxml/objectify.pyx":1668
  *     cdef PyType pytype = None
  *     typename = None
  *     istree = 0             # <<<<<<<<<<<<<<
@@ -23883,20 +25575,20 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   __pyx_v_istree = 0;
 
-  /* "lxml/objectify.pyx":1596
+  /* "lxml/objectify.pyx":1671
  * 
  *     # if element is defined as xsi:nil, represent it as None
  *     if cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"nil") == "true":
  *         pytype = NoneType
  */
-  __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"nil")))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1596, __pyx_L1_error)
+  __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"nil")))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1671, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_true, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1597, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_true, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1672, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1598
+    /* "lxml/objectify.pyx":1673
  *     if cetree.attributeValueFromNsName(
  *         c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"nil") == "true":
  *         pytype = NoneType             # <<<<<<<<<<<<<<
@@ -23906,7 +25598,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __Pyx_INCREF(((PyObject *)__pyx_v_NoneType));
     __Pyx_DECREF_SET(__pyx_v_pytype, __pyx_v_NoneType);
 
-    /* "lxml/objectify.pyx":1596
+    /* "lxml/objectify.pyx":1671
  * 
  *     # if element is defined as xsi:nil, represent it as None
  *     if cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
@@ -23915,7 +25607,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1600
+  /* "lxml/objectify.pyx":1675
  *         pytype = NoneType
  * 
  *     if pytype is None and not ignore_xsi:             # <<<<<<<<<<<<<<
@@ -23934,19 +25626,19 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1602
+    /* "lxml/objectify.pyx":1677
  *     if pytype is None and not ignore_xsi:
  *         # check that old xsi type value is valid
  *         typename = cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
  *             c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  *         if typename is not None:
  */
-    __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"type")))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1602, __pyx_L1_error)
+    __pyx_t_1 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"type")))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1677, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_typename, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1604
+    /* "lxml/objectify.pyx":1679
  *         typename = cetree.attributeValueFromNsName(
  *             c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  *         if typename is not None:             # <<<<<<<<<<<<<<
@@ -23957,7 +25649,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_t_4 = (__pyx_t_2 != 0);
     if (__pyx_t_4) {
 
-      /* "lxml/objectify.pyx":1605
+      /* "lxml/objectify.pyx":1680
  *             c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  *         if typename is not None:
  *             pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)             # <<<<<<<<<<<<<<
@@ -23966,9 +25658,9 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-        __PYX_ERR(0, 1605, __pyx_L1_error)
+        __PYX_ERR(0, 1680, __pyx_L1_error)
       }
-      __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_typename, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_typename, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_5 = __pyx_t_1;
       __Pyx_INCREF(__pyx_t_5);
@@ -23976,7 +25668,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_5));
       __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":1606
+      /* "lxml/objectify.pyx":1681
  *         if typename is not None:
  *             pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)
  *             if pytype is None and u':' in typename:             # <<<<<<<<<<<<<<
@@ -23990,22 +25682,22 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __pyx_t_4 = __pyx_t_3;
         goto __pyx_L9_bool_binop_done;
       }
-      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v_typename, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1606, __pyx_L1_error)
+      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v_typename, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1681, __pyx_L1_error)
       __pyx_t_2 = (__pyx_t_3 != 0);
       __pyx_t_4 = __pyx_t_2;
       __pyx_L9_bool_binop_done:;
       if (__pyx_t_4) {
 
-        /* "lxml/objectify.pyx":1607
+        /* "lxml/objectify.pyx":1682
  *             pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)
  *             if pytype is None and u':' in typename:
  *                 prefix, typename = typename.split(u':', 1)             # <<<<<<<<<<<<<<
  *                 pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)
  *             if pytype is not None and pytype is not StrType:
  */
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_typename, __pyx_n_s_split); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1607, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_typename, __pyx_n_s_split); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1682, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1607, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1682, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
@@ -24014,7 +25706,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(0, 1607, __pyx_L1_error)
+            __PYX_ERR(0, 1682, __pyx_L1_error)
           }
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -24027,15 +25719,15 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __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, 1607, __pyx_L1_error)
+          __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1682, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1607, __pyx_L1_error)
+          __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1682, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           #endif
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         } else {
           Py_ssize_t index = -1;
-          __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1607, __pyx_L1_error)
+          __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1682, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -24043,7 +25735,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __Pyx_GOTREF(__pyx_t_5);
           index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L11_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_6);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1607, __pyx_L1_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1682, __pyx_L1_error)
           __pyx_t_8 = NULL;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           goto __pyx_L12_unpacking_done;
@@ -24051,7 +25743,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           __pyx_t_8 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(0, 1607, __pyx_L1_error)
+          __PYX_ERR(0, 1682, __pyx_L1_error)
           __pyx_L12_unpacking_done:;
         }
         __pyx_v_prefix = __pyx_t_5;
@@ -24059,7 +25751,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __Pyx_DECREF_SET(__pyx_v_typename, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":1608
+        /* "lxml/objectify.pyx":1683
  *             if pytype is None and u':' in typename:
  *                 prefix, typename = typename.split(u':', 1)
  *                 pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)             # <<<<<<<<<<<<<<
@@ -24068,9 +25760,9 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-          __PYX_ERR(0, 1608, __pyx_L1_error)
+          __PYX_ERR(0, 1683, __pyx_L1_error)
         }
-        __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_typename, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1608, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_typename, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_t_6 = __pyx_t_1;
         __Pyx_INCREF(__pyx_t_6);
@@ -24078,7 +25770,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_6));
         __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":1606
+        /* "lxml/objectify.pyx":1681
  *         if typename is not None:
  *             pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)
  *             if pytype is None and u':' in typename:             # <<<<<<<<<<<<<<
@@ -24087,7 +25779,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       }
 
-      /* "lxml/objectify.pyx":1609
+      /* "lxml/objectify.pyx":1684
  *                 prefix, typename = typename.split(u':', 1)
  *                 pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)
  *             if pytype is not None and pytype is not StrType:             # <<<<<<<<<<<<<<
@@ -24107,19 +25799,19 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __pyx_L14_bool_binop_done:;
       if (__pyx_t_4) {
 
-        /* "lxml/objectify.pyx":1613
+        /* "lxml/objectify.pyx":1688
  *                 # anyway, so just accept it if given as type
  *                 # information
  *                 pytype = _check_type(c_node, pytype)             # <<<<<<<<<<<<<<
  *                 if pytype is None:
  *                     typename = None
  */
-        __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_9objectify__check_type(__pyx_v_c_node, __pyx_v_pytype)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1613, __pyx_L1_error)
+        __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_9objectify__check_type(__pyx_v_c_node, __pyx_v_pytype)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1688, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_6));
         __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":1614
+        /* "lxml/objectify.pyx":1689
  *                 # information
  *                 pytype = _check_type(c_node, pytype)
  *                 if pytype is None:             # <<<<<<<<<<<<<<
@@ -24130,7 +25822,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __pyx_t_2 = (__pyx_t_4 != 0);
         if (__pyx_t_2) {
 
-          /* "lxml/objectify.pyx":1615
+          /* "lxml/objectify.pyx":1690
  *                 pytype = _check_type(c_node, pytype)
  *                 if pytype is None:
  *                     typename = None             # <<<<<<<<<<<<<<
@@ -24140,7 +25832,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __Pyx_INCREF(Py_None);
           __Pyx_DECREF_SET(__pyx_v_typename, Py_None);
 
-          /* "lxml/objectify.pyx":1614
+          /* "lxml/objectify.pyx":1689
  *                 # information
  *                 pytype = _check_type(c_node, pytype)
  *                 if pytype is None:             # <<<<<<<<<<<<<<
@@ -24149,7 +25841,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         }
 
-        /* "lxml/objectify.pyx":1609
+        /* "lxml/objectify.pyx":1684
  *                 prefix, typename = typename.split(u':', 1)
  *                 pytype = <PyType>_SCHEMA_TYPE_DICT.get(typename)
  *             if pytype is not None and pytype is not StrType:             # <<<<<<<<<<<<<<
@@ -24158,7 +25850,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       }
 
-      /* "lxml/objectify.pyx":1604
+      /* "lxml/objectify.pyx":1679
  *         typename = cetree.attributeValueFromNsName(
  *             c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>"type")
  *         if typename is not None:             # <<<<<<<<<<<<<<
@@ -24167,7 +25859,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
     }
 
-    /* "lxml/objectify.pyx":1600
+    /* "lxml/objectify.pyx":1675
  *         pytype = NoneType
  * 
  *     if pytype is None and not ignore_xsi:             # <<<<<<<<<<<<<<
@@ -24176,7 +25868,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1617
+  /* "lxml/objectify.pyx":1692
  *                     typename = None
  * 
  *     if pytype is None and not ignore_pytype:             # <<<<<<<<<<<<<<
@@ -24195,19 +25887,19 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_L18_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1619
+    /* "lxml/objectify.pyx":1694
  *     if pytype is None and not ignore_pytype:
  *         # check that old pytype value is valid
  *         old_pytypename = cetree.attributeValueFromNsName(             # <<<<<<<<<<<<<<
  *             c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *         if old_pytypename is not None:
  */
-    __pyx_t_6 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__PYTYPE_NAMESPACE, __pyx_v_4lxml_9objectify__PYTYPE_ATTRIBUTE_NAME); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1619, __pyx_L1_error)
+    __pyx_t_6 = attributeValueFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__PYTYPE_NAMESPACE, __pyx_v_4lxml_9objectify__PYTYPE_ATTRIBUTE_NAME); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1694, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_v_old_pytypename = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "lxml/objectify.pyx":1621
+    /* "lxml/objectify.pyx":1696
  *         old_pytypename = cetree.attributeValueFromNsName(
  *             c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *         if old_pytypename is not None:             # <<<<<<<<<<<<<<
@@ -24218,17 +25910,17 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_t_3 = (__pyx_t_2 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1622
+      /* "lxml/objectify.pyx":1697
  *             c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *         if old_pytypename is not None:
  *             if old_pytypename == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
  *                 if not cetree.hasChild(c_node):
  *                     # only case where we should keep it,
  */
-      __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_old_pytypename, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_old_pytypename, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1697, __pyx_L1_error)
       if (__pyx_t_3) {
 
-        /* "lxml/objectify.pyx":1623
+        /* "lxml/objectify.pyx":1698
  *         if old_pytypename is not None:
  *             if old_pytypename == TREE_PYTYPE_NAME:
  *                 if not cetree.hasChild(c_node):             # <<<<<<<<<<<<<<
@@ -24238,7 +25930,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __pyx_t_3 = ((!(hasChild(__pyx_v_c_node) != 0)) != 0);
         if (__pyx_t_3) {
 
-          /* "lxml/objectify.pyx":1626
+          /* "lxml/objectify.pyx":1701
  *                     # only case where we should keep it,
  *                     # everything else is clear enough
  *                     pytype = TREE_PYTYPE             # <<<<<<<<<<<<<<
@@ -24248,7 +25940,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __Pyx_INCREF(((PyObject *)__pyx_v_4lxml_9objectify_TREE_PYTYPE));
           __Pyx_DECREF_SET(__pyx_v_pytype, __pyx_v_4lxml_9objectify_TREE_PYTYPE);
 
-          /* "lxml/objectify.pyx":1623
+          /* "lxml/objectify.pyx":1698
  *         if old_pytypename is not None:
  *             if old_pytypename == TREE_PYTYPE_NAME:
  *                 if not cetree.hasChild(c_node):             # <<<<<<<<<<<<<<
@@ -24257,7 +25949,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         }
 
-        /* "lxml/objectify.pyx":1622
+        /* "lxml/objectify.pyx":1697
  *             c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *         if old_pytypename is not None:
  *             if old_pytypename == TREE_PYTYPE_NAME:             # <<<<<<<<<<<<<<
@@ -24267,7 +25959,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         goto __pyx_L21;
       }
 
-      /* "lxml/objectify.pyx":1628
+      /* "lxml/objectify.pyx":1703
  *                     pytype = TREE_PYTYPE
  *             else:
  *                 if old_pytypename == 'none':             # <<<<<<<<<<<<<<
@@ -24275,10 +25967,10 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  *                     old_pytypename = "NoneType"
  */
       /*else*/ {
-        __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_old_pytypename, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1628, __pyx_L1_error)
+        __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_old_pytypename, __pyx_n_s_none, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1703, __pyx_L1_error)
         if (__pyx_t_3) {
 
-          /* "lxml/objectify.pyx":1630
+          /* "lxml/objectify.pyx":1705
  *                 if old_pytypename == 'none':
  *                     # transition from lxml 1.x
  *                     old_pytypename = "NoneType"             # <<<<<<<<<<<<<<
@@ -24288,7 +25980,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __Pyx_INCREF(__pyx_n_s_NoneType);
           __Pyx_DECREF_SET(__pyx_v_old_pytypename, __pyx_n_s_NoneType);
 
-          /* "lxml/objectify.pyx":1628
+          /* "lxml/objectify.pyx":1703
  *                     pytype = TREE_PYTYPE
  *             else:
  *                 if old_pytypename == 'none':             # <<<<<<<<<<<<<<
@@ -24297,7 +25989,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         }
 
-        /* "lxml/objectify.pyx":1631
+        /* "lxml/objectify.pyx":1706
  *                     # transition from lxml 1.x
  *                     old_pytypename = "NoneType"
  *                 pytype = <PyType>_PYTYPE_DICT.get(old_pytypename)             # <<<<<<<<<<<<<<
@@ -24306,9 +25998,9 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-          __PYX_ERR(0, 1631, __pyx_L1_error)
+          __PYX_ERR(0, 1706, __pyx_L1_error)
         }
-        __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_old_pytypename, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1631, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v_old_pytypename, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1706, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_1 = __pyx_t_6;
         __Pyx_INCREF(__pyx_t_1);
@@ -24316,7 +26008,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_1));
         __pyx_t_1 = 0;
 
-        /* "lxml/objectify.pyx":1632
+        /* "lxml/objectify.pyx":1707
  *                     old_pytypename = "NoneType"
  *                 pytype = <PyType>_PYTYPE_DICT.get(old_pytypename)
  *                 if pytype is not None and pytype is not StrType:             # <<<<<<<<<<<<<<
@@ -24336,19 +26028,19 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __pyx_L25_bool_binop_done:;
         if (__pyx_t_3) {
 
-          /* "lxml/objectify.pyx":1636
+          /* "lxml/objectify.pyx":1711
  *                     # default anyway, so just accept it if given as
  *                     # type information
  *                     pytype = _check_type(c_node, pytype)             # <<<<<<<<<<<<<<
  * 
  *     if pytype is None:
  */
-          __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_9objectify__check_type(__pyx_v_c_node, __pyx_v_pytype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1636, __pyx_L1_error)
+          __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_9objectify__check_type(__pyx_v_c_node, __pyx_v_pytype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1711, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_1));
           __pyx_t_1 = 0;
 
-          /* "lxml/objectify.pyx":1632
+          /* "lxml/objectify.pyx":1707
  *                     old_pytypename = "NoneType"
  *                 pytype = <PyType>_PYTYPE_DICT.get(old_pytypename)
  *                 if pytype is not None and pytype is not StrType:             # <<<<<<<<<<<<<<
@@ -24359,7 +26051,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       }
       __pyx_L21:;
 
-      /* "lxml/objectify.pyx":1621
+      /* "lxml/objectify.pyx":1696
  *         old_pytypename = cetree.attributeValueFromNsName(
  *             c_node, _PYTYPE_NAMESPACE, _PYTYPE_ATTRIBUTE_NAME)
  *         if old_pytypename is not None:             # <<<<<<<<<<<<<<
@@ -24368,7 +26060,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
     }
 
-    /* "lxml/objectify.pyx":1617
+    /* "lxml/objectify.pyx":1692
  *                     typename = None
  * 
  *     if pytype is None and not ignore_pytype:             # <<<<<<<<<<<<<<
@@ -24377,7 +26069,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1638
+  /* "lxml/objectify.pyx":1713
  *                     pytype = _check_type(c_node, pytype)
  * 
  *     if pytype is None:             # <<<<<<<<<<<<<<
@@ -24388,7 +26080,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1640
+    /* "lxml/objectify.pyx":1715
  *     if pytype is None:
  *         # try to guess type
  *         if not cetree.hasChild(c_node):             # <<<<<<<<<<<<<<
@@ -24398,22 +26090,22 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_t_2 = ((!(hasChild(__pyx_v_c_node) != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1642
+      /* "lxml/objectify.pyx":1717
  *         if not cetree.hasChild(c_node):
  *             # element has no children => data class
  *             pytype = _guessPyType(textOf(c_node), StrType)             # <<<<<<<<<<<<<<
  *         else:
  *             istree = 1
  */
-      __pyx_t_1 = textOf(__pyx_v_c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L1_error)
+      __pyx_t_1 = textOf(__pyx_v_c_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_9objectify__guessPyType(__pyx_t_1, __pyx_v_StrType)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1642, __pyx_L1_error)
+      __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_9objectify__guessPyType(__pyx_t_1, __pyx_v_StrType)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1717, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_6));
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1640
+      /* "lxml/objectify.pyx":1715
  *     if pytype is None:
  *         # try to guess type
  *         if not cetree.hasChild(c_node):             # <<<<<<<<<<<<<<
@@ -24423,7 +26115,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       goto __pyx_L28;
     }
 
-    /* "lxml/objectify.pyx":1644
+    /* "lxml/objectify.pyx":1719
  *             pytype = _guessPyType(textOf(c_node), StrType)
  *         else:
  *             istree = 1             # <<<<<<<<<<<<<<
@@ -24435,7 +26127,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     }
     __pyx_L28:;
 
-    /* "lxml/objectify.pyx":1638
+    /* "lxml/objectify.pyx":1713
  *                     pytype = _check_type(c_node, pytype)
  * 
  *     if pytype is None:             # <<<<<<<<<<<<<<
@@ -24444,7 +26136,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1646
+  /* "lxml/objectify.pyx":1721
  *             istree = 1
  * 
  *     if pytype is None:             # <<<<<<<<<<<<<<
@@ -24455,7 +26147,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1648
+    /* "lxml/objectify.pyx":1723
  *     if pytype is None:
  *         # use default type for empty elements
  *         if cetree.hasText(c_node):             # <<<<<<<<<<<<<<
@@ -24465,7 +26157,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_t_3 = (hasText(__pyx_v_c_node) != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1649
+      /* "lxml/objectify.pyx":1724
  *         # use default type for empty elements
  *         if cetree.hasText(c_node):
  *             pytype = StrType             # <<<<<<<<<<<<<<
@@ -24475,7 +26167,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __Pyx_INCREF(((PyObject *)__pyx_v_StrType));
       __Pyx_DECREF_SET(__pyx_v_pytype, __pyx_v_StrType);
 
-      /* "lxml/objectify.pyx":1648
+      /* "lxml/objectify.pyx":1723
  *     if pytype is None:
  *         # use default type for empty elements
  *         if cetree.hasText(c_node):             # <<<<<<<<<<<<<<
@@ -24485,7 +26177,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       goto __pyx_L30;
     }
 
-    /* "lxml/objectify.pyx":1651
+    /* "lxml/objectify.pyx":1726
  *             pytype = StrType
  *         else:
  *             pytype = empty_pytype             # <<<<<<<<<<<<<<
@@ -24496,7 +26188,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __Pyx_INCREF(((PyObject *)__pyx_v_empty_pytype));
       __Pyx_DECREF_SET(__pyx_v_pytype, __pyx_v_empty_pytype);
 
-      /* "lxml/objectify.pyx":1652
+      /* "lxml/objectify.pyx":1727
  *         else:
  *             pytype = empty_pytype
  *             if typename is None:             # <<<<<<<<<<<<<<
@@ -24507,7 +26199,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __pyx_t_2 = (__pyx_t_3 != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":1653
+        /* "lxml/objectify.pyx":1728
  *             pytype = empty_pytype
  *             if typename is None:
  *                 typename = empty_type_name             # <<<<<<<<<<<<<<
@@ -24517,7 +26209,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __Pyx_INCREF(__pyx_v_empty_type_name);
         __Pyx_DECREF_SET(__pyx_v_typename, __pyx_v_empty_type_name);
 
-        /* "lxml/objectify.pyx":1652
+        /* "lxml/objectify.pyx":1727
  *         else:
  *             pytype = empty_pytype
  *             if typename is None:             # <<<<<<<<<<<<<<
@@ -24528,7 +26220,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     }
     __pyx_L30:;
 
-    /* "lxml/objectify.pyx":1646
+    /* "lxml/objectify.pyx":1721
  *             istree = 1
  * 
  *     if pytype is None:             # <<<<<<<<<<<<<<
@@ -24537,7 +26229,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1655
+  /* "lxml/objectify.pyx":1730
  *                 typename = empty_type_name
  * 
  *     if pytype is not None:             # <<<<<<<<<<<<<<
@@ -24548,7 +26240,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1656
+    /* "lxml/objectify.pyx":1731
  * 
  *     if pytype is not None:
  *         if typename is None:             # <<<<<<<<<<<<<<
@@ -24559,7 +26251,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1657
+      /* "lxml/objectify.pyx":1732
  *     if pytype is not None:
  *         if typename is None:
  *             if not istree:             # <<<<<<<<<<<<<<
@@ -24569,7 +26261,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __pyx_t_2 = ((!(__pyx_v_istree != 0)) != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":1658
+        /* "lxml/objectify.pyx":1733
  *         if typename is None:
  *             if not istree:
  *                 if pytype._schema_types:             # <<<<<<<<<<<<<<
@@ -24579,7 +26271,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __pyx_t_2 = (__pyx_v_pytype->_schema_types != Py_None)&&(PyList_GET_SIZE(__pyx_v_pytype->_schema_types) != 0);
         if (__pyx_t_2) {
 
-          /* "lxml/objectify.pyx":1661
+          /* "lxml/objectify.pyx":1736
  *                     # pytype->xsi:type is a 1:n mapping
  *                     # simply take the first
  *                     typename = pytype._schema_types[0]             # <<<<<<<<<<<<<<
@@ -24588,14 +26280,14 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
           if (unlikely(__pyx_v_pytype->_schema_types == Py_None)) {
             PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-            __PYX_ERR(0, 1661, __pyx_L1_error)
+            __PYX_ERR(0, 1736, __pyx_L1_error)
           }
-          __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_pytype->_schema_types, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1661, __pyx_L1_error)
+          __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_pytype->_schema_types, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1736, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF_SET(__pyx_v_typename, __pyx_t_6);
           __pyx_t_6 = 0;
 
-          /* "lxml/objectify.pyx":1658
+          /* "lxml/objectify.pyx":1733
  *         if typename is None:
  *             if not istree:
  *                 if pytype._schema_types:             # <<<<<<<<<<<<<<
@@ -24604,7 +26296,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         }
 
-        /* "lxml/objectify.pyx":1657
+        /* "lxml/objectify.pyx":1732
  *     if pytype is not None:
  *         if typename is None:
  *             if not istree:             # <<<<<<<<<<<<<<
@@ -24613,7 +26305,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       }
 
-      /* "lxml/objectify.pyx":1656
+      /* "lxml/objectify.pyx":1731
  * 
  *     if pytype is not None:
  *         if typename is None:             # <<<<<<<<<<<<<<
@@ -24623,18 +26315,18 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       goto __pyx_L33;
     }
 
-    /* "lxml/objectify.pyx":1662
+    /* "lxml/objectify.pyx":1737
  *                     # simply take the first
  *                     typename = pytype._schema_types[0]
  *         elif typename not in pytype._schema_types:             # <<<<<<<<<<<<<<
  *             typename = pytype._schema_types[0]
  * 
  */
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_typename, __pyx_v_pytype->_schema_types, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1662, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_typename, __pyx_v_pytype->_schema_types, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1737, __pyx_L1_error)
     __pyx_t_3 = (__pyx_t_2 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1663
+      /* "lxml/objectify.pyx":1738
  *                     typename = pytype._schema_types[0]
  *         elif typename not in pytype._schema_types:
  *             typename = pytype._schema_types[0]             # <<<<<<<<<<<<<<
@@ -24643,14 +26335,14 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       if (unlikely(__pyx_v_pytype->_schema_types == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 1663, __pyx_L1_error)
+        __PYX_ERR(0, 1738, __pyx_L1_error)
       }
-      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_pytype->_schema_types, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_pytype->_schema_types, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1738, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_typename, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1662
+      /* "lxml/objectify.pyx":1737
  *                     # simply take the first
  *                     typename = pytype._schema_types[0]
  *         elif typename not in pytype._schema_types:             # <<<<<<<<<<<<<<
@@ -24660,7 +26352,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     }
     __pyx_L33:;
 
-    /* "lxml/objectify.pyx":1655
+    /* "lxml/objectify.pyx":1730
  *                 typename = empty_type_name
  * 
  *     if pytype is not None:             # <<<<<<<<<<<<<<
@@ -24669,7 +26361,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1665
+  /* "lxml/objectify.pyx":1740
  *             typename = pytype._schema_types[0]
  * 
  *     if annotate_xsi:             # <<<<<<<<<<<<<<
@@ -24679,7 +26371,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_t_3 = (__pyx_v_annotate_xsi != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1666
+    /* "lxml/objectify.pyx":1741
  * 
  *     if annotate_xsi:
  *         if typename is None or istree:             # <<<<<<<<<<<<<<
@@ -24698,7 +26390,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_L38_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1667
+      /* "lxml/objectify.pyx":1742
  *     if annotate_xsi:
  *         if typename is None or istree:
  *             cetree.delAttributeFromNsName(             # <<<<<<<<<<<<<<
@@ -24707,7 +26399,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       (void)(delAttributeFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"type")))));
 
-      /* "lxml/objectify.pyx":1666
+      /* "lxml/objectify.pyx":1741
  * 
  *     if annotate_xsi:
  *         if typename is None or istree:             # <<<<<<<<<<<<<<
@@ -24717,7 +26409,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       goto __pyx_L37;
     }
 
-    /* "lxml/objectify.pyx":1671
+    /* "lxml/objectify.pyx":1746
  *         else:
  *             # update or create attribute
  *             typename_utf8 = cetree.utf8(typename)             # <<<<<<<<<<<<<<
@@ -24725,12 +26417,12 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  *                 doc, c_node, _XML_SCHEMA_NS, <unsigned char*>'xsd')
  */
     /*else*/ {
-      __pyx_t_6 = utf8(__pyx_v_typename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1671, __pyx_L1_error)
+      __pyx_t_6 = utf8(__pyx_v_typename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1746, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_v_typename_utf8 = __pyx_t_6;
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1672
+      /* "lxml/objectify.pyx":1747
  *             # update or create attribute
  *             typename_utf8 = cetree.utf8(typename)
  *             c_ns = cetree.findOrBuildNodeNsPrefix(             # <<<<<<<<<<<<<<
@@ -24739,7 +26431,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       __pyx_v_c_ns = findOrBuildNodeNsPrefix(__pyx_v_doc, __pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_NS, ((unsigned char *)((unsigned char *)((char const *)"xsd"))));
 
-      /* "lxml/objectify.pyx":1674
+      /* "lxml/objectify.pyx":1749
  *             c_ns = cetree.findOrBuildNodeNsPrefix(
  *                 doc, c_node, _XML_SCHEMA_NS, <unsigned char*>'xsd')
  *             if c_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -24749,25 +26441,25 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __pyx_t_3 = ((__pyx_v_c_ns != NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/objectify.pyx":1675
+        /* "lxml/objectify.pyx":1750
  *                 doc, c_node, _XML_SCHEMA_NS, <unsigned char*>'xsd')
  *             if c_ns is not NULL:
  *                 if b':' in typename_utf8:             # <<<<<<<<<<<<<<
  *                     prefix, name = typename_utf8.split(b':', 1)
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':
  */
-        __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__17, __pyx_v_typename_utf8, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1675, __pyx_L1_error)
+        __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__17, __pyx_v_typename_utf8, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1750, __pyx_L1_error)
         __pyx_t_4 = (__pyx_t_3 != 0);
         if (__pyx_t_4) {
 
-          /* "lxml/objectify.pyx":1676
+          /* "lxml/objectify.pyx":1751
  *             if c_ns is not NULL:
  *                 if b':' in typename_utf8:
  *                     prefix, name = typename_utf8.split(b':', 1)             # <<<<<<<<<<<<<<
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':
  *                         typename_utf8 = name
  */
-          __pyx_t_6 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_split, __pyx_v_typename_utf8, __pyx_kp_b__17, __pyx_int_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1676, __pyx_L1_error)
+          __pyx_t_6 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_split, __pyx_v_typename_utf8, __pyx_kp_b__17, __pyx_int_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1751, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
             PyObject* sequence = __pyx_t_6;
@@ -24775,7 +26467,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
             if (unlikely(size != 2)) {
               if (size > 2) __Pyx_RaiseTooManyValuesError(2);
               else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-              __PYX_ERR(0, 1676, __pyx_L1_error)
+              __PYX_ERR(0, 1751, __pyx_L1_error)
             }
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             if (likely(PyTuple_CheckExact(sequence))) {
@@ -24788,15 +26480,15 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
             __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(0, 1676, __pyx_L1_error)
+            __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1751, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1676, __pyx_L1_error)
+            __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1751, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_5);
             #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(0, 1676, __pyx_L1_error)
+            __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1751, __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;
@@ -24804,7 +26496,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
             __Pyx_GOTREF(__pyx_t_1);
             index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L42_unpacking_failed;
             __Pyx_GOTREF(__pyx_t_5);
-            if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1676, __pyx_L1_error)
+            if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1751, __pyx_L1_error)
             __pyx_t_8 = NULL;
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             goto __pyx_L43_unpacking_done;
@@ -24812,7 +26504,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             __pyx_t_8 = NULL;
             if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-            __PYX_ERR(0, 1676, __pyx_L1_error)
+            __PYX_ERR(0, 1751, __pyx_L1_error)
             __pyx_L43_unpacking_done:;
           }
           __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_1);
@@ -24820,7 +26512,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __pyx_v_name = __pyx_t_5;
           __pyx_t_5 = 0;
 
-          /* "lxml/objectify.pyx":1677
+          /* "lxml/objectify.pyx":1752
  *                 if b':' in typename_utf8:
  *                     prefix, name = typename_utf8.split(b':', 1)
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':             # <<<<<<<<<<<<<<
@@ -24838,7 +26530,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __pyx_L45_bool_binop_done:;
           if (__pyx_t_4) {
 
-            /* "lxml/objectify.pyx":1678
+            /* "lxml/objectify.pyx":1753
  *                     prefix, name = typename_utf8.split(b':', 1)
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':
  *                         typename_utf8 = name             # <<<<<<<<<<<<<<
@@ -24848,7 +26540,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
             __Pyx_INCREF(__pyx_v_name);
             __Pyx_DECREF_SET(__pyx_v_typename_utf8, __pyx_v_name);
 
-            /* "lxml/objectify.pyx":1677
+            /* "lxml/objectify.pyx":1752
  *                 if b':' in typename_utf8:
  *                     prefix, name = typename_utf8.split(b':', 1)
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':             # <<<<<<<<<<<<<<
@@ -24858,7 +26550,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
             goto __pyx_L44;
           }
 
-          /* "lxml/objectify.pyx":1679
+          /* "lxml/objectify.pyx":1754
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':
  *                         typename_utf8 = name
  *                     elif tree.xmlStrcmp(_xcstr(prefix), c_ns.prefix) != 0:             # <<<<<<<<<<<<<<
@@ -24868,25 +26560,25 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           __pyx_t_4 = ((xmlStrcmp((const xmlChar*)PyBytes_AS_STRING(__pyx_v_prefix), __pyx_v_c_ns->prefix) != 0) != 0);
           if (__pyx_t_4) {
 
-            /* "lxml/objectify.pyx":1680
+            /* "lxml/objectify.pyx":1755
  *                         typename_utf8 = name
  *                     elif tree.xmlStrcmp(_xcstr(prefix), c_ns.prefix) != 0:
  *                         typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + name             # <<<<<<<<<<<<<<
  *                 elif c_ns.prefix is not NULL and c_ns.prefix[0] != c'\0':
  *                     typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + typename_utf8
  */
-            __pyx_t_6 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_ns->prefix)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1680, __pyx_L1_error)
+            __pyx_t_6 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_ns->prefix)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1755, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_6);
-            __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_kp_b__17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1680, __pyx_L1_error)
+            __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_kp_b__17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1755, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_5);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-            __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1680, __pyx_L1_error)
+            __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1755, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_6);
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
             __Pyx_DECREF_SET(__pyx_v_typename_utf8, __pyx_t_6);
             __pyx_t_6 = 0;
 
-            /* "lxml/objectify.pyx":1679
+            /* "lxml/objectify.pyx":1754
  *                     if c_ns.prefix is NULL or c_ns.prefix[0] == c'\0':
  *                         typename_utf8 = name
  *                     elif tree.xmlStrcmp(_xcstr(prefix), c_ns.prefix) != 0:             # <<<<<<<<<<<<<<
@@ -24896,7 +26588,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           }
           __pyx_L44:;
 
-          /* "lxml/objectify.pyx":1675
+          /* "lxml/objectify.pyx":1750
  *                 doc, c_node, _XML_SCHEMA_NS, <unsigned char*>'xsd')
  *             if c_ns is not NULL:
  *                 if b':' in typename_utf8:             # <<<<<<<<<<<<<<
@@ -24906,7 +26598,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
           goto __pyx_L41;
         }
 
-        /* "lxml/objectify.pyx":1681
+        /* "lxml/objectify.pyx":1756
  *                     elif tree.xmlStrcmp(_xcstr(prefix), c_ns.prefix) != 0:
  *                         typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + name
  *                 elif c_ns.prefix is not NULL and c_ns.prefix[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -24924,25 +26616,25 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         __pyx_L47_bool_binop_done:;
         if (__pyx_t_4) {
 
-          /* "lxml/objectify.pyx":1682
+          /* "lxml/objectify.pyx":1757
  *                         typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + name
  *                 elif c_ns.prefix is not NULL and c_ns.prefix[0] != c'\0':
  *                     typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + typename_utf8             # <<<<<<<<<<<<<<
  *             c_ns = cetree.findOrBuildNodeNsPrefix(
  *                 doc, c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>'xsi')
  */
-          __pyx_t_6 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_ns->prefix)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1682, __pyx_L1_error)
+          __pyx_t_6 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_ns->prefix)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1757, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
-          __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_kp_b__17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1682, __pyx_L1_error)
+          __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_kp_b__17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1757, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-          __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_typename_utf8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1682, __pyx_L1_error)
+          __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_typename_utf8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1757, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF_SET(__pyx_v_typename_utf8, __pyx_t_6);
           __pyx_t_6 = 0;
 
-          /* "lxml/objectify.pyx":1681
+          /* "lxml/objectify.pyx":1756
  *                     elif tree.xmlStrcmp(_xcstr(prefix), c_ns.prefix) != 0:
  *                         typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + name
  *                 elif c_ns.prefix is not NULL and c_ns.prefix[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -24952,7 +26644,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
         }
         __pyx_L41:;
 
-        /* "lxml/objectify.pyx":1674
+        /* "lxml/objectify.pyx":1749
  *             c_ns = cetree.findOrBuildNodeNsPrefix(
  *                 doc, c_node, _XML_SCHEMA_NS, <unsigned char*>'xsd')
  *             if c_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -24961,7 +26653,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       }
 
-      /* "lxml/objectify.pyx":1683
+      /* "lxml/objectify.pyx":1758
  *                 elif c_ns.prefix is not NULL and c_ns.prefix[0] != c'\0':
  *                     typename_utf8 = (<unsigned char*>c_ns.prefix) + b':' + typename_utf8
  *             c_ns = cetree.findOrBuildNodeNsPrefix(             # <<<<<<<<<<<<<<
@@ -24970,7 +26662,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       __pyx_v_c_ns = findOrBuildNodeNsPrefix(__pyx_v_doc, __pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"xsi"))));
 
-      /* "lxml/objectify.pyx":1685
+      /* "lxml/objectify.pyx":1760
  *             c_ns = cetree.findOrBuildNodeNsPrefix(
  *                 doc, c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>'xsi')
  *             tree.xmlSetNsProp(c_node, c_ns, <unsigned char*>"type", _xcstr(typename_utf8))             # <<<<<<<<<<<<<<
@@ -24981,7 +26673,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     }
     __pyx_L37:;
 
-    /* "lxml/objectify.pyx":1665
+    /* "lxml/objectify.pyx":1740
  *             typename = pytype._schema_types[0]
  * 
  *     if annotate_xsi:             # <<<<<<<<<<<<<<
@@ -24990,7 +26682,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1687
+  /* "lxml/objectify.pyx":1762
  *             tree.xmlSetNsProp(c_node, c_ns, <unsigned char*>"type", _xcstr(typename_utf8))
  * 
  *     if annotate_pytype:             # <<<<<<<<<<<<<<
@@ -25000,7 +26692,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_t_4 = (__pyx_v_annotate_pytype != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/objectify.pyx":1688
+    /* "lxml/objectify.pyx":1763
  * 
  *     if annotate_pytype:
  *         if pytype is None:             # <<<<<<<<<<<<<<
@@ -25011,7 +26703,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1690
+      /* "lxml/objectify.pyx":1765
  *         if pytype is None:
  *             # delete attribute if it exists
  *             cetree.delAttributeFromNsName(             # <<<<<<<<<<<<<<
@@ -25020,7 +26712,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       (void)(delAttributeFromNsName(__pyx_v_c_node, __pyx_v_4lxml_9objectify__PYTYPE_NAMESPACE, __pyx_v_4lxml_9objectify__PYTYPE_ATTRIBUTE_NAME));
 
-      /* "lxml/objectify.pyx":1688
+      /* "lxml/objectify.pyx":1763
  * 
  *     if annotate_pytype:
  *         if pytype is None:             # <<<<<<<<<<<<<<
@@ -25030,7 +26722,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       goto __pyx_L50;
     }
 
-    /* "lxml/objectify.pyx":1694
+    /* "lxml/objectify.pyx":1769
  *         else:
  *             # update or create attribute
  *             c_ns = cetree.findOrBuildNodeNsPrefix(             # <<<<<<<<<<<<<<
@@ -25039,7 +26731,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
     /*else*/ {
 
-      /* "lxml/objectify.pyx":1695
+      /* "lxml/objectify.pyx":1770
  *             # update or create attribute
  *             c_ns = cetree.findOrBuildNodeNsPrefix(
  *                 doc, c_node, _PYTYPE_NAMESPACE, <unsigned char*>'py')             # <<<<<<<<<<<<<<
@@ -25048,7 +26740,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       __pyx_v_c_ns = findOrBuildNodeNsPrefix(__pyx_v_doc, __pyx_v_c_node, __pyx_v_4lxml_9objectify__PYTYPE_NAMESPACE, ((unsigned char *)((unsigned char *)((char const *)"py"))));
 
-      /* "lxml/objectify.pyx":1696
+      /* "lxml/objectify.pyx":1771
  *             c_ns = cetree.findOrBuildNodeNsPrefix(
  *                 doc, c_node, _PYTYPE_NAMESPACE, <unsigned char*>'py')
  *             pytype_name = cetree.utf8(pytype.name)             # <<<<<<<<<<<<<<
@@ -25057,13 +26749,13 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       __pyx_t_6 = __pyx_v_pytype->name;
       __Pyx_INCREF(__pyx_t_6);
-      __pyx_t_5 = utf8(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1696, __pyx_L1_error)
+      __pyx_t_5 = utf8(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1771, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_v_pytype_name = ((PyObject*)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":1697
+      /* "lxml/objectify.pyx":1772
  *                 doc, c_node, _PYTYPE_NAMESPACE, <unsigned char*>'py')
  *             pytype_name = cetree.utf8(pytype.name)
  *             tree.xmlSetNsProp(c_node, c_ns, _PYTYPE_ATTRIBUTE_NAME,             # <<<<<<<<<<<<<<
@@ -25072,7 +26764,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
       (void)(xmlSetNsProp(__pyx_v_c_node, __pyx_v_c_ns, __pyx_v_4lxml_9objectify__PYTYPE_ATTRIBUTE_NAME, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_pytype_name)));
 
-      /* "lxml/objectify.pyx":1699
+      /* "lxml/objectify.pyx":1774
  *             tree.xmlSetNsProp(c_node, c_ns, _PYTYPE_ATTRIBUTE_NAME,
  *                               _xcstr(pytype_name))
  *             if pytype is NoneType:             # <<<<<<<<<<<<<<
@@ -25083,7 +26775,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
       __pyx_t_4 = (__pyx_t_3 != 0);
       if (__pyx_t_4) {
 
-        /* "lxml/objectify.pyx":1700
+        /* "lxml/objectify.pyx":1775
  *                               _xcstr(pytype_name))
  *             if pytype is NoneType:
  *                 c_ns = cetree.findOrBuildNodeNsPrefix(             # <<<<<<<<<<<<<<
@@ -25092,7 +26784,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         __pyx_v_c_ns = findOrBuildNodeNsPrefix(__pyx_v_doc, __pyx_v_c_node, __pyx_v_4lxml_9objectify__XML_SCHEMA_INSTANCE_NS, ((unsigned char *)((unsigned char *)((char const *)"xsi"))));
 
-        /* "lxml/objectify.pyx":1702
+        /* "lxml/objectify.pyx":1777
  *                 c_ns = cetree.findOrBuildNodeNsPrefix(
  *                     doc, c_node, _XML_SCHEMA_INSTANCE_NS, <unsigned char*>'xsi')
  *                 tree.xmlSetNsProp(c_node, c_ns, <unsigned char*>"nil", <unsigned char*>"true")             # <<<<<<<<<<<<<<
@@ -25101,7 +26793,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         (void)(xmlSetNsProp(__pyx_v_c_node, __pyx_v_c_ns, ((unsigned char *)((unsigned char *)((char const *)"nil"))), ((unsigned char *)((unsigned char *)((char const *)"true")))));
 
-        /* "lxml/objectify.pyx":1699
+        /* "lxml/objectify.pyx":1774
  *             tree.xmlSetNsProp(c_node, c_ns, _PYTYPE_ATTRIBUTE_NAME,
  *                               _xcstr(pytype_name))
  *             if pytype is NoneType:             # <<<<<<<<<<<<<<
@@ -25112,7 +26804,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
     }
     __pyx_L50:;
 
-    /* "lxml/objectify.pyx":1687
+    /* "lxml/objectify.pyx":1762
  *             tree.xmlSetNsProp(c_node, c_ns, <unsigned char*>"type", _xcstr(typename_utf8))
  * 
  *     if annotate_pytype:             # <<<<<<<<<<<<<<
@@ -25121,7 +26813,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
   }
 
-  /* "lxml/objectify.pyx":1704
+  /* "lxml/objectify.pyx":1779
  *                 tree.xmlSetNsProp(c_node, c_ns, <unsigned char*>"nil", <unsigned char*>"true")
  * 
  *     return 0             # <<<<<<<<<<<<<<
@@ -25131,7 +26823,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1585
+  /* "lxml/objectify.pyx":1660
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  * 
  * cdef int _annotate_element(tree.xmlNode* c_node, _Document doc,             # <<<<<<<<<<<<<<
@@ -25159,7 +26851,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1709
+/* "lxml/objectify.pyx":1784
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,             # <<<<<<<<<<<<<<
@@ -25209,7 +26901,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_27deannotate(PyObject *__pyx_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "deannotate") < 0)) __PYX_ERR(0, 1709, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "deannotate") < 0)) __PYX_ERR(0, 1784, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -25218,20 +26910,20 @@ static PyObject *__pyx_pw_4lxml_9objectify_27deannotate(PyObject *__pyx_self, Py
     }
     __pyx_v_element_or_tree = values[0];
     if (values[1]) {
-      __pyx_v_pytype = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pytype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1709, __pyx_L3_error)
+      __pyx_v_pytype = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pytype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1784, __pyx_L3_error)
     } else {
       __pyx_v_pytype = ((int)((int)1));
     }
     if (values[2]) {
-      __pyx_v_xsi = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_xsi == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1709, __pyx_L3_error)
+      __pyx_v_xsi = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_xsi == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1784, __pyx_L3_error)
     } else {
       __pyx_v_xsi = ((int)((int)1));
     }
     if (values[3]) {
-      __pyx_v_xsi_nil = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_xsi_nil == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1710, __pyx_L3_error)
+      __pyx_v_xsi_nil = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_xsi_nil == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1785, __pyx_L3_error)
     } else {
 
-      /* "lxml/objectify.pyx":1710
+      /* "lxml/objectify.pyx":1785
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,
  *                bint xsi_nil=False, bint cleanup_namespaces=False):             # <<<<<<<<<<<<<<
@@ -25241,14 +26933,14 @@ static PyObject *__pyx_pw_4lxml_9objectify_27deannotate(PyObject *__pyx_self, Py
       __pyx_v_xsi_nil = ((int)((int)0));
     }
     if (values[4]) {
-      __pyx_v_cleanup_namespaces = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_cleanup_namespaces == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1710, __pyx_L3_error)
+      __pyx_v_cleanup_namespaces = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_cleanup_namespaces == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1785, __pyx_L3_error)
     } else {
       __pyx_v_cleanup_namespaces = ((int)((int)0));
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("deannotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1709, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("deannotate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1784, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.deannotate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -25256,7 +26948,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_27deannotate(PyObject *__pyx_self, Py
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_9objectify_26deannotate(__pyx_self, __pyx_v_element_or_tree, __pyx_v_pytype, __pyx_v_xsi, __pyx_v_xsi_nil, __pyx_v_cleanup_namespaces);
 
-  /* "lxml/objectify.pyx":1709
+  /* "lxml/objectify.pyx":1784
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,             # <<<<<<<<<<<<<<
@@ -25283,19 +26975,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("deannotate", 0);
 
-  /* "lxml/objectify.pyx":1726
+  /* "lxml/objectify.pyx":1801
  *     the tree, pass the option ``cleanup_namespaces=True``.
  *     """
  *     cdef list attribute_names = []             # <<<<<<<<<<<<<<
  * 
  *     if pytype:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1726, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_attribute_names = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1728
+  /* "lxml/objectify.pyx":1803
  *     cdef list attribute_names = []
  * 
  *     if pytype:             # <<<<<<<<<<<<<<
@@ -25305,19 +26997,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_v_pytype != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1729
+    /* "lxml/objectify.pyx":1804
  * 
  *     if pytype:
  *         attribute_names.append(PYTYPE_ATTRIBUTE)             # <<<<<<<<<<<<<<
  *     if xsi:
  *         attribute_names.append(XML_SCHEMA_INSTANCE_TYPE_ATTR)
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1729, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1804, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_attribute_names, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1729, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_attribute_names, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1804, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1728
+    /* "lxml/objectify.pyx":1803
  *     cdef list attribute_names = []
  * 
  *     if pytype:             # <<<<<<<<<<<<<<
@@ -25326,7 +27018,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":1730
+  /* "lxml/objectify.pyx":1805
  *     if pytype:
  *         attribute_names.append(PYTYPE_ATTRIBUTE)
  *     if xsi:             # <<<<<<<<<<<<<<
@@ -25336,7 +27028,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_v_xsi != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1731
+    /* "lxml/objectify.pyx":1806
  *         attribute_names.append(PYTYPE_ATTRIBUTE)
  *     if xsi:
  *         attribute_names.append(XML_SCHEMA_INSTANCE_TYPE_ATTR)             # <<<<<<<<<<<<<<
@@ -25345,10 +27037,10 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
  */
     __pyx_t_1 = __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_TYPE_ATTR;
     __Pyx_INCREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_attribute_names, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1731, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_attribute_names, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1806, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1730
+    /* "lxml/objectify.pyx":1805
  *     if pytype:
  *         attribute_names.append(PYTYPE_ATTRIBUTE)
  *     if xsi:             # <<<<<<<<<<<<<<
@@ -25357,7 +27049,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":1732
+  /* "lxml/objectify.pyx":1807
  *     if xsi:
  *         attribute_names.append(XML_SCHEMA_INSTANCE_TYPE_ATTR)
  *     if xsi_nil:             # <<<<<<<<<<<<<<
@@ -25367,7 +27059,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_v_xsi_nil != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1733
+    /* "lxml/objectify.pyx":1808
  *         attribute_names.append(XML_SCHEMA_INSTANCE_TYPE_ATTR)
  *     if xsi_nil:
  *         attribute_names.append(XML_SCHEMA_INSTANCE_NIL_ATTR)             # <<<<<<<<<<<<<<
@@ -25376,10 +27068,10 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
  */
     __pyx_t_1 = __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NIL_ATTR;
     __Pyx_INCREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_attribute_names, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1733, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyList_Append(__pyx_v_attribute_names, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1808, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/objectify.pyx":1732
+    /* "lxml/objectify.pyx":1807
  *     if xsi:
  *         attribute_names.append(XML_SCHEMA_INSTANCE_TYPE_ATTR)
  *     if xsi_nil:             # <<<<<<<<<<<<<<
@@ -25388,30 +27080,30 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":1735
+  /* "lxml/objectify.pyx":1810
  *         attribute_names.append(XML_SCHEMA_INSTANCE_NIL_ATTR)
  * 
  *     _strip_attributes(element_or_tree, *attribute_names)             # <<<<<<<<<<<<<<
  *     if cleanup_namespaces:
  *         _cleanup_namespaces(element_or_tree)
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1735, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_element_or_tree);
   __Pyx_GIVEREF(__pyx_v_element_or_tree);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_element_or_tree);
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_attribute_names); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1735, __pyx_L1_error)
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_attribute_names); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1810, __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(0, 1735, __pyx_L1_error)
+  __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1810, __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;
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__strip_attributes, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1735, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__strip_attributes, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1810, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/objectify.pyx":1736
+  /* "lxml/objectify.pyx":1811
  * 
  *     _strip_attributes(element_or_tree, *attribute_names)
  *     if cleanup_namespaces:             # <<<<<<<<<<<<<<
@@ -25421,7 +27113,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_v_cleanup_namespaces != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1737
+    /* "lxml/objectify.pyx":1812
  *     _strip_attributes(element_or_tree, *attribute_names)
  *     if cleanup_namespaces:
  *         _cleanup_namespaces(element_or_tree)             # <<<<<<<<<<<<<<
@@ -25441,12 +27133,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
     }
     __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_v_element_or_tree) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_element_or_tree);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1812, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "lxml/objectify.pyx":1736
+    /* "lxml/objectify.pyx":1811
  * 
  *     _strip_attributes(element_or_tree, *attribute_names)
  *     if cleanup_namespaces:             # <<<<<<<<<<<<<<
@@ -25455,7 +27147,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":1709
+  /* "lxml/objectify.pyx":1784
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,             # <<<<<<<<<<<<<<
@@ -25479,7 +27171,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1749
+/* "lxml/objectify.pyx":1824
  * objectify_parser = __DEFAULT_PARSER
  * 
  * def set_default_parser(new_parser = None):             # <<<<<<<<<<<<<<
@@ -25521,7 +27213,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_29set_default_parser(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_default_parser") < 0)) __PYX_ERR(0, 1749, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_default_parser") < 0)) __PYX_ERR(0, 1824, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -25535,7 +27227,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_29set_default_parser(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_default_parser", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1749, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_default_parser", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1824, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.set_default_parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -25559,7 +27251,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_default_parser", 0);
 
-  /* "lxml/objectify.pyx":1760
+  /* "lxml/objectify.pyx":1835
  *     """
  *     global objectify_parser
  *     if new_parser is None:             # <<<<<<<<<<<<<<
@@ -25570,7 +27262,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1761
+    /* "lxml/objectify.pyx":1836
  *     global objectify_parser
  *     if new_parser is None:
  *         objectify_parser = __DEFAULT_PARSER             # <<<<<<<<<<<<<<
@@ -25582,7 +27274,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
     __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify_objectify_parser, __pyx_v_4lxml_9objectify___DEFAULT_PARSER);
     __Pyx_GIVEREF(__pyx_v_4lxml_9objectify___DEFAULT_PARSER);
 
-    /* "lxml/objectify.pyx":1760
+    /* "lxml/objectify.pyx":1835
  *     """
  *     global objectify_parser
  *     if new_parser is None:             # <<<<<<<<<<<<<<
@@ -25592,21 +27284,21 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1762
+  /* "lxml/objectify.pyx":1837
  *     if new_parser is None:
  *         objectify_parser = __DEFAULT_PARSER
  *     elif isinstance(new_parser, etree.XMLParser):             # <<<<<<<<<<<<<<
  *         objectify_parser = new_parser
  *     else:
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_XMLParser); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1762, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_XMLParser); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1837, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_new_parser, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1762, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_new_parser, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1837, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (likely(__pyx_t_1)) {
 
-    /* "lxml/objectify.pyx":1763
+    /* "lxml/objectify.pyx":1838
  *         objectify_parser = __DEFAULT_PARSER
  *     elif isinstance(new_parser, etree.XMLParser):
  *         objectify_parser = new_parser             # <<<<<<<<<<<<<<
@@ -25618,7 +27310,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
     __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify_objectify_parser, __pyx_v_new_parser);
     __Pyx_GIVEREF(__pyx_v_new_parser);
 
-    /* "lxml/objectify.pyx":1762
+    /* "lxml/objectify.pyx":1837
  *     if new_parser is None:
  *         objectify_parser = __DEFAULT_PARSER
  *     elif isinstance(new_parser, etree.XMLParser):             # <<<<<<<<<<<<<<
@@ -25628,7 +27320,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
     goto __pyx_L3;
   }
 
-  /* "lxml/objectify.pyx":1765
+  /* "lxml/objectify.pyx":1840
  *         objectify_parser = new_parser
  *     else:
  *         raise TypeError, u"parser must inherit from lxml.etree.XMLParser"             # <<<<<<<<<<<<<<
@@ -25637,11 +27329,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_parser_must_inherit_from_lxml_et, 0, 0);
-    __PYX_ERR(0, 1765, __pyx_L1_error)
+    __PYX_ERR(0, 1840, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "lxml/objectify.pyx":1749
+  /* "lxml/objectify.pyx":1824
  * objectify_parser = __DEFAULT_PARSER
  * 
  * def set_default_parser(new_parser = None):             # <<<<<<<<<<<<<<
@@ -25662,7 +27354,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28set_default_parser(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1767
+/* "lxml/objectify.pyx":1842
  *         raise TypeError, u"parser must inherit from lxml.etree.XMLParser"
  * 
  * def makeparser(**kw):             # <<<<<<<<<<<<<<
@@ -25707,27 +27399,27 @@ static PyObject *__pyx_pf_4lxml_9objectify_30makeparser(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("makeparser", 0);
 
-  /* "lxml/objectify.pyx":1777
+  /* "lxml/objectify.pyx":1852
  *     ``remove_blank_text`` boolean keyword option yourself.
  *     """
  *     if 'remove_blank_text' not in kw:             # <<<<<<<<<<<<<<
  *         kw['remove_blank_text'] = True
  *     parser = etree.XMLParser(**kw)
  */
-  __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_remove_blank_text, __pyx_v_kw, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1777, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_remove_blank_text, __pyx_v_kw, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1852, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1778
+    /* "lxml/objectify.pyx":1853
  *     """
  *     if 'remove_blank_text' not in kw:
  *         kw['remove_blank_text'] = True             # <<<<<<<<<<<<<<
  *     parser = etree.XMLParser(**kw)
  *     parser.set_element_class_lookup( ObjectifyElementClassLookup() )
  */
-    if (unlikely(PyDict_SetItem(__pyx_v_kw, __pyx_n_s_remove_blank_text, Py_True) < 0)) __PYX_ERR(0, 1778, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_kw, __pyx_n_s_remove_blank_text, Py_True) < 0)) __PYX_ERR(0, 1853, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":1777
+    /* "lxml/objectify.pyx":1852
  *     ``remove_blank_text`` boolean keyword option yourself.
  *     """
  *     if 'remove_blank_text' not in kw:             # <<<<<<<<<<<<<<
@@ -25736,51 +27428,54 @@ static PyObject *__pyx_pf_4lxml_9objectify_30makeparser(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":1779
+  /* "lxml/objectify.pyx":1854
  *     if 'remove_blank_text' not in kw:
  *         kw['remove_blank_text'] = True
  *     parser = etree.XMLParser(**kw)             # <<<<<<<<<<<<<<
  *     parser.set_element_class_lookup( ObjectifyElementClassLookup() )
  *     return parser
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_XMLParser); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1779, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_XMLParser); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_v_kw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __pyx_L1_error)
+  __pyx_t_4 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1854, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1854, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_v_parser = __pyx_t_4;
-  __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_parser = __pyx_t_5;
+  __pyx_t_5 = 0;
 
-  /* "lxml/objectify.pyx":1780
+  /* "lxml/objectify.pyx":1855
  *         kw['remove_blank_text'] = True
  *     parser = etree.XMLParser(**kw)
  *     parser.set_element_class_lookup( ObjectifyElementClassLookup() )             # <<<<<<<<<<<<<<
  *     return parser
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_parser, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1780, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_parser, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1855, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1780, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_6 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
-    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
+  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_3);
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_6);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_3, function);
+      __Pyx_DECREF_SET(__pyx_t_4, function);
     }
   }
-  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
+  __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
   __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1780, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1855, __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;
 
-  /* "lxml/objectify.pyx":1781
+  /* "lxml/objectify.pyx":1856
  *     parser = etree.XMLParser(**kw)
  *     parser.set_element_class_lookup( ObjectifyElementClassLookup() )
  *     return parser             # <<<<<<<<<<<<<<
@@ -25792,7 +27487,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_30makeparser(CYTHON_UNUSED PyObject *
   __pyx_r = __pyx_v_parser;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1767
+  /* "lxml/objectify.pyx":1842
  *         raise TypeError, u"parser must inherit from lxml.etree.XMLParser"
  * 
  * def makeparser(**kw):             # <<<<<<<<<<<<<<
@@ -25815,7 +27510,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_30makeparser(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1783
+/* "lxml/objectify.pyx":1858
  *     return parser
  * 
  * cdef _Element _makeElement(tag, text, attrib, nsmap):             # <<<<<<<<<<<<<<
@@ -25833,7 +27528,7 @@ static struct LxmlElement *__pyx_f_4lxml_9objectify__makeElement(PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_makeElement", 0);
 
-  /* "lxml/objectify.pyx":1784
+  /* "lxml/objectify.pyx":1859
  * 
  * cdef _Element _makeElement(tag, text, attrib, nsmap):
  *     return cetree.makeElement(tag, None, objectify_parser, text, None, attrib, nsmap)             # <<<<<<<<<<<<<<
@@ -25843,14 +27538,14 @@ static struct LxmlElement *__pyx_f_4lxml_9objectify__makeElement(PyObject *__pyx
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   __pyx_t_1 = __pyx_v_4lxml_9objectify_objectify_parser;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = ((PyObject *)makeElement(__pyx_v_tag, ((struct LxmlDocument *)Py_None), __pyx_t_1, __pyx_v_text, Py_None, __pyx_v_attrib, __pyx_v_nsmap)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1784, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)makeElement(__pyx_v_tag, ((struct LxmlDocument *)Py_None), __pyx_t_1, __pyx_v_text, Py_None, __pyx_v_attrib, __pyx_v_nsmap)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1859, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((struct LxmlElement *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1783
+  /* "lxml/objectify.pyx":1858
  *     return parser
  * 
  * cdef _Element _makeElement(tag, text, attrib, nsmap):             # <<<<<<<<<<<<<<
@@ -25870,7 +27565,7 @@ static struct LxmlElement *__pyx_f_4lxml_9objectify__makeElement(PyObject *__pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1794
+/* "lxml/objectify.pyx":1869
  * SubElement = etree.SubElement
  * 
  * def fromstring(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -25926,7 +27621,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_33fromstring(PyObject *__pyx_self, Py
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromstring") < 0)) __PYX_ERR(0, 1794, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromstring") < 0)) __PYX_ERR(0, 1869, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -25943,7 +27638,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_33fromstring(PyObject *__pyx_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("fromstring", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1794, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("fromstring", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1869, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.fromstring", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -25970,7 +27665,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
   __Pyx_RefNannySetupContext("fromstring", 0);
   __Pyx_INCREF(__pyx_v_parser);
 
-  /* "lxml/objectify.pyx":1806
+  /* "lxml/objectify.pyx":1881
  *     (DTD, XInclude, ...).
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -25981,7 +27676,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1807
+    /* "lxml/objectify.pyx":1882
  *     """
  *     if parser is None:
  *         parser = objectify_parser             # <<<<<<<<<<<<<<
@@ -25991,7 +27686,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
     __Pyx_INCREF(__pyx_v_4lxml_9objectify_objectify_parser);
     __Pyx_DECREF_SET(__pyx_v_parser, __pyx_v_4lxml_9objectify_objectify_parser);
 
-    /* "lxml/objectify.pyx":1806
+    /* "lxml/objectify.pyx":1881
  *     (DTD, XInclude, ...).
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -26000,7 +27695,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/objectify.pyx":1808
+  /* "lxml/objectify.pyx":1883
  *     if parser is None:
  *         parser = objectify_parser
  *     return _fromstring(xml, parser, base_url=base_url)             # <<<<<<<<<<<<<<
@@ -26008,7 +27703,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
  * def XML(xml, parser=None, *, base_url=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1808, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_xml);
   __Pyx_GIVEREF(__pyx_v_xml);
@@ -26016,10 +27711,10 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
   __Pyx_INCREF(__pyx_v_parser);
   __Pyx_GIVEREF(__pyx_v_parser);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_parser);
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1808, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) __PYX_ERR(0, 1808, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1808, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) __PYX_ERR(0, 1883, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -26027,7 +27722,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1794
+  /* "lxml/objectify.pyx":1869
  * SubElement = etree.SubElement
  * 
  * def fromstring(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -26049,7 +27744,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1810
+/* "lxml/objectify.pyx":1885
  *     return _fromstring(xml, parser, base_url=base_url)
  * 
  * def XML(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -26105,7 +27800,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_35XML(PyObject *__pyx_self, PyObject
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "XML") < 0)) __PYX_ERR(0, 1810, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "XML") < 0)) __PYX_ERR(0, 1885, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -26122,7 +27817,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_35XML(PyObject *__pyx_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("XML", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1810, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("XML", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1885, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.XML", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -26149,7 +27844,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
   __Pyx_RefNannySetupContext("XML", 0);
   __Pyx_INCREF(__pyx_v_parser);
 
-  /* "lxml/objectify.pyx":1822
+  /* "lxml/objectify.pyx":1897
  *     (DTD, XInclude, ...).
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -26160,7 +27855,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1823
+    /* "lxml/objectify.pyx":1898
  *     """
  *     if parser is None:
  *         parser = objectify_parser             # <<<<<<<<<<<<<<
@@ -26170,7 +27865,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
     __Pyx_INCREF(__pyx_v_4lxml_9objectify_objectify_parser);
     __Pyx_DECREF_SET(__pyx_v_parser, __pyx_v_4lxml_9objectify_objectify_parser);
 
-    /* "lxml/objectify.pyx":1822
+    /* "lxml/objectify.pyx":1897
  *     (DTD, XInclude, ...).
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -26179,7 +27874,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
  */
   }
 
-  /* "lxml/objectify.pyx":1824
+  /* "lxml/objectify.pyx":1899
  *     if parser is None:
  *         parser = objectify_parser
  *     return _fromstring(xml, parser, base_url=base_url)             # <<<<<<<<<<<<<<
@@ -26187,7 +27882,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
  * cdef object _parse
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_xml);
   __Pyx_GIVEREF(__pyx_v_xml);
@@ -26195,10 +27890,10 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
   __Pyx_INCREF(__pyx_v_parser);
   __Pyx_GIVEREF(__pyx_v_parser);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_parser);
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) __PYX_ERR(0, 1824, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) __PYX_ERR(0, 1899, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -26206,7 +27901,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1810
+  /* "lxml/objectify.pyx":1885
  *     return _fromstring(xml, parser, base_url=base_url)
  * 
  * def XML(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -26228,7 +27923,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1829
+/* "lxml/objectify.pyx":1904
  * _parse = etree.parse
  * 
  * def parse(f, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -26284,7 +27979,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_37parse(PyObject *__pyx_self, PyObjec
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parse") < 0)) __PYX_ERR(0, 1829, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parse") < 0)) __PYX_ERR(0, 1904, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -26301,7 +27996,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_37parse(PyObject *__pyx_self, PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1829, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1904, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.objectify.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -26328,7 +28023,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
   __Pyx_RefNannySetupContext("parse", 0);
   __Pyx_INCREF(__pyx_v_parser);
 
-  /* "lxml/objectify.pyx":1840
+  /* "lxml/objectify.pyx":1915
  *     up external entities (DTD, XInclude, ...) with relative paths.
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -26339,7 +28034,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1841
+    /* "lxml/objectify.pyx":1916
  *     """
  *     if parser is None:
  *         parser = objectify_parser             # <<<<<<<<<<<<<<
@@ -26349,7 +28044,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
     __Pyx_INCREF(__pyx_v_4lxml_9objectify_objectify_parser);
     __Pyx_DECREF_SET(__pyx_v_parser, __pyx_v_4lxml_9objectify_objectify_parser);
 
-    /* "lxml/objectify.pyx":1840
+    /* "lxml/objectify.pyx":1915
  *     up external entities (DTD, XInclude, ...) with relative paths.
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -26358,7 +28053,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
  */
   }
 
-  /* "lxml/objectify.pyx":1842
+  /* "lxml/objectify.pyx":1917
  *     if parser is None:
  *         parser = objectify_parser
  *     return _parse(f, parser, base_url=base_url)             # <<<<<<<<<<<<<<
@@ -26366,7 +28061,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
  * cdef dict _DEFAULT_NSMAP = {
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1917, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_f);
   __Pyx_GIVEREF(__pyx_v_f);
@@ -26374,10 +28069,10 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
   __Pyx_INCREF(__pyx_v_parser);
   __Pyx_GIVEREF(__pyx_v_parser);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_parser);
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1842, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1917, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) __PYX_ERR(0, 1842, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__parse, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1842, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) __PYX_ERR(0, 1917, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__parse, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1917, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -26385,7 +28080,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1829
+  /* "lxml/objectify.pyx":1904
  * _parse = etree.parse
  * 
  * def parse(f, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -26407,7 +28102,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1852
+/* "lxml/objectify.pyx":1927
  * E = ElementMaker()
  * 
  * def Element(_tag, attrib=None, nsmap=None, *, _pytype=None, **_attributes):             # <<<<<<<<<<<<<<
@@ -26476,7 +28171,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_39Element(PyObject *__pyx_self, PyObj
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__attributes, values, pos_args, "Element") < 0)) __PYX_ERR(0, 1852, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__attributes, values, pos_args, "Element") < 0)) __PYX_ERR(0, 1927, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -26496,7 +28191,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_39Element(PyObject *__pyx_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("Element", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1852, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("Element", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1927, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__attributes); __pyx_v__attributes = 0;
   __Pyx_AddTraceback("lxml.objectify.Element", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -26528,7 +28223,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
   __Pyx_INCREF(__pyx_v__pytype);
   __Pyx_INCREF(__pyx_v__attributes);
 
-  /* "lxml/objectify.pyx":1860
+  /* "lxml/objectify.pyx":1935
  *     NOTE: requires parser based element class lookup activated in lxml.etree!
  *     """
  *     if attrib is not None:             # <<<<<<<<<<<<<<
@@ -26539,36 +28234,36 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1861
+    /* "lxml/objectify.pyx":1936
  *     """
  *     if attrib is not None:
  *         if _attributes:             # <<<<<<<<<<<<<<
  *             attrib = dict(attrib)
  *             attrib.update(_attributes)
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__attributes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1861, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__attributes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1936, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1862
+      /* "lxml/objectify.pyx":1937
  *     if attrib is not None:
  *         if _attributes:
  *             attrib = dict(attrib)             # <<<<<<<<<<<<<<
  *             attrib.update(_attributes)
  *         _attributes = attrib
  */
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_attrib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1862, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_attrib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1937, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/objectify.pyx":1863
+      /* "lxml/objectify.pyx":1938
  *         if _attributes:
  *             attrib = dict(attrib)
  *             attrib.update(_attributes)             # <<<<<<<<<<<<<<
  *         _attributes = attrib
  *     if _pytype is None:
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_update); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1863, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_update); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1938, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -26582,12 +28277,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v__attributes) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v__attributes);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1863, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1938, __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;
 
-      /* "lxml/objectify.pyx":1861
+      /* "lxml/objectify.pyx":1936
  *     """
  *     if attrib is not None:
  *         if _attributes:             # <<<<<<<<<<<<<<
@@ -26596,7 +28291,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
  */
     }
 
-    /* "lxml/objectify.pyx":1864
+    /* "lxml/objectify.pyx":1939
  *             attrib = dict(attrib)
  *             attrib.update(_attributes)
  *         _attributes = attrib             # <<<<<<<<<<<<<<
@@ -26606,7 +28301,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
     __Pyx_INCREF(__pyx_v_attrib);
     __Pyx_DECREF_SET(__pyx_v__attributes, __pyx_v_attrib);
 
-    /* "lxml/objectify.pyx":1860
+    /* "lxml/objectify.pyx":1935
  *     NOTE: requires parser based element class lookup activated in lxml.etree!
  *     """
  *     if attrib is not None:             # <<<<<<<<<<<<<<
@@ -26615,7 +28310,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":1865
+  /* "lxml/objectify.pyx":1940
  *             attrib.update(_attributes)
  *         _attributes = attrib
  *     if _pytype is None:             # <<<<<<<<<<<<<<
@@ -26626,7 +28321,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1866
+    /* "lxml/objectify.pyx":1941
  *         _attributes = attrib
  *     if _pytype is None:
  *         _pytype = TREE_PYTYPE_NAME             # <<<<<<<<<<<<<<
@@ -26636,7 +28331,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
     __Pyx_INCREF(__pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME);
     __Pyx_DECREF_SET(__pyx_v__pytype, __pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME);
 
-    /* "lxml/objectify.pyx":1865
+    /* "lxml/objectify.pyx":1940
  *             attrib.update(_attributes)
  *         _attributes = attrib
  *     if _pytype is None:             # <<<<<<<<<<<<<<
@@ -26645,7 +28340,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":1867
+  /* "lxml/objectify.pyx":1942
  *     if _pytype is None:
  *         _pytype = TREE_PYTYPE_NAME
  *     if nsmap is None:             # <<<<<<<<<<<<<<
@@ -26656,7 +28351,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1868
+    /* "lxml/objectify.pyx":1943
  *         _pytype = TREE_PYTYPE_NAME
  *     if nsmap is None:
  *         nsmap = _DEFAULT_NSMAP             # <<<<<<<<<<<<<<
@@ -26666,7 +28361,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
     __Pyx_INCREF(__pyx_v_4lxml_9objectify__DEFAULT_NSMAP);
     __Pyx_DECREF_SET(__pyx_v_nsmap, __pyx_v_4lxml_9objectify__DEFAULT_NSMAP);
 
-    /* "lxml/objectify.pyx":1867
+    /* "lxml/objectify.pyx":1942
  *     if _pytype is None:
  *         _pytype = TREE_PYTYPE_NAME
  *     if nsmap is None:             # <<<<<<<<<<<<<<
@@ -26675,19 +28370,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
  */
   }
 
-  /* "lxml/objectify.pyx":1869
+  /* "lxml/objectify.pyx":1944
  *     if nsmap is None:
  *         nsmap = _DEFAULT_NSMAP
  *     _attributes[PYTYPE_ATTRIBUTE] = _pytype             # <<<<<<<<<<<<<<
  *     return _makeElement(_tag, None, _attributes, nsmap)
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1944, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_t_3, __pyx_v__pytype) < 0)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_t_3, __pyx_v__pytype) < 0)) __PYX_ERR(0, 1944, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/objectify.pyx":1870
+  /* "lxml/objectify.pyx":1945
  *         nsmap = _DEFAULT_NSMAP
  *     _attributes[PYTYPE_ATTRIBUTE] = _pytype
  *     return _makeElement(_tag, None, _attributes, nsmap)             # <<<<<<<<<<<<<<
@@ -26695,13 +28390,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
  * def DataElement(_value, attrib=None, nsmap=None, *, _pytype=None, _xsi=None,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_9objectify__makeElement(__pyx_v__tag, Py_None, __pyx_v__attributes, __pyx_v_nsmap)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1870, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_9objectify__makeElement(__pyx_v__tag, Py_None, __pyx_v__attributes, __pyx_v_nsmap)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1945, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1852
+  /* "lxml/objectify.pyx":1927
  * E = ElementMaker()
  * 
  * def Element(_tag, attrib=None, nsmap=None, *, _pytype=None, **_attributes):             # <<<<<<<<<<<<<<
@@ -26726,7 +28421,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "lxml/objectify.pyx":1872
+/* "lxml/objectify.pyx":1947
  *     return _makeElement(_tag, None, _attributes, nsmap)
  * 
  * def DataElement(_value, attrib=None, nsmap=None, *, _pytype=None, _xsi=None,             # <<<<<<<<<<<<<<
@@ -26799,7 +28494,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_41DataElement(PyObject *__pyx_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__attributes, values, pos_args, "DataElement") < 0)) __PYX_ERR(0, 1872, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__attributes, values, pos_args, "DataElement") < 0)) __PYX_ERR(0, 1947, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -26820,7 +28515,7 @@ static PyObject *__pyx_pw_4lxml_9objectify_41DataElement(PyObject *__pyx_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("DataElement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1872, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("DataElement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1947, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__attributes); __pyx_v__attributes = 0;
   __Pyx_AddTraceback("lxml.objectify.DataElement", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -26866,7 +28561,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __Pyx_INCREF(__pyx_v__xsi);
   __Pyx_INCREF(__pyx_v__attributes);
 
-  /* "lxml/objectify.pyx":1887
+  /* "lxml/objectify.pyx":1962
  *     in attrib and/or keyword arguments.
  *     """
  *     if nsmap is None:             # <<<<<<<<<<<<<<
@@ -26877,7 +28572,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1888
+    /* "lxml/objectify.pyx":1963
  *     """
  *     if nsmap is None:
  *         nsmap = _DEFAULT_NSMAP             # <<<<<<<<<<<<<<
@@ -26887,7 +28582,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_INCREF(__pyx_v_4lxml_9objectify__DEFAULT_NSMAP);
     __Pyx_DECREF_SET(__pyx_v_nsmap, __pyx_v_4lxml_9objectify__DEFAULT_NSMAP);
 
-    /* "lxml/objectify.pyx":1887
+    /* "lxml/objectify.pyx":1962
  *     in attrib and/or keyword arguments.
  *     """
  *     if nsmap is None:             # <<<<<<<<<<<<<<
@@ -26896,7 +28591,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1889
+  /* "lxml/objectify.pyx":1964
  *     if nsmap is None:
  *         nsmap = _DEFAULT_NSMAP
  *     if attrib is not None and attrib:             # <<<<<<<<<<<<<<
@@ -26910,41 +28605,41 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_t_2 = __pyx_t_3;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1889, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1964, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_3;
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1890
+    /* "lxml/objectify.pyx":1965
  *         nsmap = _DEFAULT_NSMAP
  *     if attrib is not None and attrib:
  *         if _attributes:             # <<<<<<<<<<<<<<
  *             attrib = dict(attrib)
  *             attrib.update(_attributes)
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__attributes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1890, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__attributes); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1965, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1891
+      /* "lxml/objectify.pyx":1966
  *     if attrib is not None and attrib:
  *         if _attributes:
  *             attrib = dict(attrib)             # <<<<<<<<<<<<<<
  *             attrib.update(_attributes)
  *         _attributes = attrib
  */
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_attrib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1891, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_attrib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1966, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1892
+      /* "lxml/objectify.pyx":1967
  *         if _attributes:
  *             attrib = dict(attrib)
  *             attrib.update(_attributes)             # <<<<<<<<<<<<<<
  *         _attributes = attrib
  *     if isinstance(_value, ObjectifiedElement):
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_update); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1892, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_update); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1967, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -26958,12 +28653,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v__attributes) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v__attributes);
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1892, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1967, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1890
+      /* "lxml/objectify.pyx":1965
  *         nsmap = _DEFAULT_NSMAP
  *     if attrib is not None and attrib:
  *         if _attributes:             # <<<<<<<<<<<<<<
@@ -26972,7 +28667,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/objectify.pyx":1893
+    /* "lxml/objectify.pyx":1968
  *             attrib = dict(attrib)
  *             attrib.update(_attributes)
  *         _attributes = attrib             # <<<<<<<<<<<<<<
@@ -26982,7 +28677,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_INCREF(__pyx_v_attrib);
     __Pyx_DECREF_SET(__pyx_v__attributes, __pyx_v_attrib);
 
-    /* "lxml/objectify.pyx":1889
+    /* "lxml/objectify.pyx":1964
  *     if nsmap is None:
  *         nsmap = _DEFAULT_NSMAP
  *     if attrib is not None and attrib:             # <<<<<<<<<<<<<<
@@ -26991,7 +28686,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1894
+  /* "lxml/objectify.pyx":1969
  *             attrib.update(_attributes)
  *         _attributes = attrib
  *     if isinstance(_value, ObjectifiedElement):             # <<<<<<<<<<<<<<
@@ -27002,7 +28697,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/objectify.pyx":1895
+    /* "lxml/objectify.pyx":1970
  *         _attributes = attrib
  *     if isinstance(_value, ObjectifiedElement):
  *         if _pytype is None:             # <<<<<<<<<<<<<<
@@ -27013,7 +28708,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1896
+      /* "lxml/objectify.pyx":1971
  *     if isinstance(_value, ObjectifiedElement):
  *         if _pytype is None:
  *             if _xsi is None and not _attributes and nsmap is _DEFAULT_NSMAP:             # <<<<<<<<<<<<<<
@@ -27027,7 +28722,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __pyx_t_2 = __pyx_t_1;
         goto __pyx_L11_bool_binop_done;
       }
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v__attributes); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1896, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v__attributes); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1971, __pyx_L1_error)
       __pyx_t_3 = ((!__pyx_t_1) != 0);
       if (__pyx_t_3) {
       } else {
@@ -27040,7 +28735,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_L11_bool_binop_done:;
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":1898
+        /* "lxml/objectify.pyx":1973
  *             if _xsi is None and not _attributes and nsmap is _DEFAULT_NSMAP:
  *                 # special case: no change!
  *                 return _value.__copy__()             # <<<<<<<<<<<<<<
@@ -27048,7 +28743,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  *         # reuse existing nsmap unless redefined in nsmap parameter
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1898, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1973, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_6 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -27062,14 +28757,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         }
         __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1898, __pyx_L1_error)
+        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1973, __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;
 
-        /* "lxml/objectify.pyx":1896
+        /* "lxml/objectify.pyx":1971
  *     if isinstance(_value, ObjectifiedElement):
  *         if _pytype is None:
  *             if _xsi is None and not _attributes and nsmap is _DEFAULT_NSMAP:             # <<<<<<<<<<<<<<
@@ -27078,7 +28773,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/objectify.pyx":1895
+      /* "lxml/objectify.pyx":1970
  *         _attributes = attrib
  *     if isinstance(_value, ObjectifiedElement):
  *         if _pytype is None:             # <<<<<<<<<<<<<<
@@ -27087,7 +28782,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/objectify.pyx":1894
+    /* "lxml/objectify.pyx":1969
  *             attrib.update(_attributes)
  *         _attributes = attrib
  *     if isinstance(_value, ObjectifiedElement):             # <<<<<<<<<<<<<<
@@ -27096,7 +28791,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1899
+  /* "lxml/objectify.pyx":1974
  *                 # special case: no change!
  *                 return _value.__copy__()
  *     if isinstance(_value, ObjectifiedDataElement):             # <<<<<<<<<<<<<<
@@ -27107,19 +28802,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1901
+    /* "lxml/objectify.pyx":1976
  *     if isinstance(_value, ObjectifiedDataElement):
  *         # reuse existing nsmap unless redefined in nsmap parameter
  *         temp = _value.nsmap             # <<<<<<<<<<<<<<
  *         if temp is not None and temp:
  *             temp = dict(temp)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_nsmap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1901, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_nsmap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1976, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_temp = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "lxml/objectify.pyx":1902
+    /* "lxml/objectify.pyx":1977
  *         # reuse existing nsmap unless redefined in nsmap parameter
  *         temp = _value.nsmap
  *         if temp is not None and temp:             # <<<<<<<<<<<<<<
@@ -27133,31 +28828,31 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_t_1 = __pyx_t_3;
       goto __pyx_L16_bool_binop_done;
     }
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_temp); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1902, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_temp); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1977, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_3;
     __pyx_L16_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1903
+      /* "lxml/objectify.pyx":1978
  *         temp = _value.nsmap
  *         if temp is not None and temp:
  *             temp = dict(temp)             # <<<<<<<<<<<<<<
  *             temp.update(nsmap)
  *             nsmap = temp
  */
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_temp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1903, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_temp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1978, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1904
+      /* "lxml/objectify.pyx":1979
  *         if temp is not None and temp:
  *             temp = dict(temp)
  *             temp.update(nsmap)             # <<<<<<<<<<<<<<
  *             nsmap = temp
  *         # reuse existing attributes unless redefined in attrib/_attributes
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_temp, __pyx_n_s_update); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1904, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_temp, __pyx_n_s_update); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1979, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -27171,12 +28866,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_nsmap) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_nsmap);
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1904, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1979, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1905
+      /* "lxml/objectify.pyx":1980
  *             temp = dict(temp)
  *             temp.update(nsmap)
  *             nsmap = temp             # <<<<<<<<<<<<<<
@@ -27186,7 +28881,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_temp);
       __Pyx_DECREF_SET(__pyx_v_nsmap, __pyx_v_temp);
 
-      /* "lxml/objectify.pyx":1902
+      /* "lxml/objectify.pyx":1977
  *         # reuse existing nsmap unless redefined in nsmap parameter
  *         temp = _value.nsmap
  *         if temp is not None and temp:             # <<<<<<<<<<<<<<
@@ -27195,19 +28890,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/objectify.pyx":1907
+    /* "lxml/objectify.pyx":1982
  *             nsmap = temp
  *         # reuse existing attributes unless redefined in attrib/_attributes
  *         temp = _value.attrib             # <<<<<<<<<<<<<<
  *         if temp is not None and temp:
  *             temp = dict(temp)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_attrib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1907, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_attrib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1982, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/objectify.pyx":1908
+    /* "lxml/objectify.pyx":1983
  *         # reuse existing attributes unless redefined in attrib/_attributes
  *         temp = _value.attrib
  *         if temp is not None and temp:             # <<<<<<<<<<<<<<
@@ -27221,31 +28916,31 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_t_1 = __pyx_t_2;
       goto __pyx_L19_bool_binop_done;
     }
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_temp); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1908, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_temp); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1983, __pyx_L1_error)
     __pyx_t_1 = __pyx_t_2;
     __pyx_L19_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1909
+      /* "lxml/objectify.pyx":1984
  *         temp = _value.attrib
  *         if temp is not None and temp:
  *             temp = dict(temp)             # <<<<<<<<<<<<<<
  *             temp.update(_attributes)
  *             _attributes = temp
  */
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_temp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1909, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_temp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1984, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1910
+      /* "lxml/objectify.pyx":1985
  *         if temp is not None and temp:
  *             temp = dict(temp)
  *             temp.update(_attributes)             # <<<<<<<<<<<<<<
  *             _attributes = temp
  *         # reuse existing xsi:type or py:pytype attributes, unless provided as
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_temp, __pyx_n_s_update); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1910, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_temp, __pyx_n_s_update); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1985, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -27259,12 +28954,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v__attributes) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v__attributes);
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1910, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1985, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1911
+      /* "lxml/objectify.pyx":1986
  *             temp = dict(temp)
  *             temp.update(_attributes)
  *             _attributes = temp             # <<<<<<<<<<<<<<
@@ -27274,7 +28969,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_temp);
       __Pyx_DECREF_SET(__pyx_v__attributes, __pyx_v_temp);
 
-      /* "lxml/objectify.pyx":1908
+      /* "lxml/objectify.pyx":1983
  *         # reuse existing attributes unless redefined in attrib/_attributes
  *         temp = _value.attrib
  *         if temp is not None and temp:             # <<<<<<<<<<<<<<
@@ -27283,7 +28978,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/objectify.pyx":1914
+    /* "lxml/objectify.pyx":1989
  *         # reuse existing xsi:type or py:pytype attributes, unless provided as
  *         # arguments
  *         if _xsi is None and _pytype is None:             # <<<<<<<<<<<<<<
@@ -27303,14 +28998,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_L22_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1915
+      /* "lxml/objectify.pyx":1990
  *         # arguments
  *         if _xsi is None and _pytype is None:
  *             _xsi = _attributes.get(XML_SCHEMA_INSTANCE_TYPE_ATTR)             # <<<<<<<<<<<<<<
  *             _pytype = _attributes.get(PYTYPE_ATTRIBUTE)
  * 
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v__attributes, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1915, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v__attributes, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1990, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -27324,22 +29019,22 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_TYPE_ATTR) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_TYPE_ATTR);
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1915, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1990, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v__xsi, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1916
+      /* "lxml/objectify.pyx":1991
  *         if _xsi is None and _pytype is None:
  *             _xsi = _attributes.get(XML_SCHEMA_INSTANCE_TYPE_ATTR)
  *             _pytype = _attributes.get(PYTYPE_ATTRIBUTE)             # <<<<<<<<<<<<<<
  * 
  *     if _xsi is not None:
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v__attributes, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1916, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v__attributes, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1916, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -27354,13 +29049,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1916, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1991, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v__pytype, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/objectify.pyx":1914
+      /* "lxml/objectify.pyx":1989
  *         # reuse existing xsi:type or py:pytype attributes, unless provided as
  *         # arguments
  *         if _xsi is None and _pytype is None:             # <<<<<<<<<<<<<<
@@ -27369,7 +29064,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/objectify.pyx":1899
+    /* "lxml/objectify.pyx":1974
  *                 # special case: no change!
  *                 return _value.__copy__()
  *     if isinstance(_value, ObjectifiedDataElement):             # <<<<<<<<<<<<<<
@@ -27378,7 +29073,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1918
+  /* "lxml/objectify.pyx":1993
  *             _pytype = _attributes.get(PYTYPE_ATTRIBUTE)
  * 
  *     if _xsi is not None:             # <<<<<<<<<<<<<<
@@ -27389,27 +29084,27 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1919
+    /* "lxml/objectify.pyx":1994
  * 
  *     if _xsi is not None:
  *         if u':' in _xsi:             # <<<<<<<<<<<<<<
  *             prefix, name = _xsi.split(u':', 1)
  *             ns = nsmap.get(prefix)
  */
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v__xsi, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1919, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__17, __pyx_v__xsi, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1994, __pyx_L1_error)
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1920
+      /* "lxml/objectify.pyx":1995
  *     if _xsi is not None:
  *         if u':' in _xsi:
  *             prefix, name = _xsi.split(u':', 1)             # <<<<<<<<<<<<<<
  *             ns = nsmap.get(prefix)
  *             if ns != XML_SCHEMA_NS:
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__xsi, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1920, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__xsi, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1920, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1995, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -27418,7 +29113,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(0, 1920, __pyx_L1_error)
+          __PYX_ERR(0, 1995, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -27431,15 +29126,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_INCREF(__pyx_t_4);
         __Pyx_INCREF(__pyx_t_6);
         #else
-        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1920, __pyx_L1_error)
+        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1995, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1920, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1995, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_7 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1920, __pyx_L1_error)
+        __pyx_t_7 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1995, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -27447,7 +29142,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_GOTREF(__pyx_t_4);
         index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L26_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_6);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1920, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1995, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         goto __pyx_L27_unpacking_done;
@@ -27455,7 +29150,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(0, 1920, __pyx_L1_error)
+        __PYX_ERR(0, 1995, __pyx_L1_error)
         __pyx_L27_unpacking_done:;
       }
       __pyx_v_prefix = __pyx_t_4;
@@ -27463,14 +29158,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_v_name = __pyx_t_6;
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1921
+      /* "lxml/objectify.pyx":1996
  *         if u':' in _xsi:
  *             prefix, name = _xsi.split(u':', 1)
  *             ns = nsmap.get(prefix)             # <<<<<<<<<<<<<<
  *             if ns != XML_SCHEMA_NS:
  *                 raise ValueError, u"XSD types require the XSD namespace"
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1921, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1996, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_4 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -27484,25 +29179,25 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_v_prefix) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_prefix);
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1921, __pyx_L1_error)
+      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1996, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_v_ns = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":1922
+      /* "lxml/objectify.pyx":1997
  *             prefix, name = _xsi.split(u':', 1)
  *             ns = nsmap.get(prefix)
  *             if ns != XML_SCHEMA_NS:             # <<<<<<<<<<<<<<
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         elif nsmap is _DEFAULT_NSMAP:
  */
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_ns, __pyx_v_4lxml_9objectify_XML_SCHEMA_NS, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1922, __pyx_L1_error)
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1922, __pyx_L1_error)
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_ns, __pyx_v_4lxml_9objectify_XML_SCHEMA_NS, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1997, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1997, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       if (unlikely(__pyx_t_1)) {
 
-        /* "lxml/objectify.pyx":1923
+        /* "lxml/objectify.pyx":1998
  *             ns = nsmap.get(prefix)
  *             if ns != XML_SCHEMA_NS:
  *                 raise ValueError, u"XSD types require the XSD namespace"             # <<<<<<<<<<<<<<
@@ -27510,9 +29205,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  *             name = _xsi
  */
         __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_XSD_types_require_the_XSD_namesp, 0, 0);
-        __PYX_ERR(0, 1923, __pyx_L1_error)
+        __PYX_ERR(0, 1998, __pyx_L1_error)
 
-        /* "lxml/objectify.pyx":1922
+        /* "lxml/objectify.pyx":1997
  *             prefix, name = _xsi.split(u':', 1)
  *             ns = nsmap.get(prefix)
  *             if ns != XML_SCHEMA_NS:             # <<<<<<<<<<<<<<
@@ -27521,7 +29216,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/objectify.pyx":1919
+      /* "lxml/objectify.pyx":1994
  * 
  *     if _xsi is not None:
  *         if u':' in _xsi:             # <<<<<<<<<<<<<<
@@ -27531,7 +29226,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       goto __pyx_L25;
     }
 
-    /* "lxml/objectify.pyx":1924
+    /* "lxml/objectify.pyx":1999
  *             if ns != XML_SCHEMA_NS:
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         elif nsmap is _DEFAULT_NSMAP:             # <<<<<<<<<<<<<<
@@ -27542,7 +29237,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1925
+      /* "lxml/objectify.pyx":2000
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         elif nsmap is _DEFAULT_NSMAP:
  *             name = _xsi             # <<<<<<<<<<<<<<
@@ -27552,19 +29247,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v__xsi);
       __pyx_v_name = __pyx_v__xsi;
 
-      /* "lxml/objectify.pyx":1926
+      /* "lxml/objectify.pyx":2001
  *         elif nsmap is _DEFAULT_NSMAP:
  *             name = _xsi
  *             _xsi = u'xsd:' + _xsi             # <<<<<<<<<<<<<<
  *         else:
  *             name = _xsi
  */
-      __pyx_t_5 = PyNumber_Add(__pyx_kp_u_xsd, __pyx_v__xsi); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1926, __pyx_L1_error)
+      __pyx_t_5 = PyNumber_Add(__pyx_kp_u_xsd, __pyx_v__xsi); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2001, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF_SET(__pyx_v__xsi, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/objectify.pyx":1924
+      /* "lxml/objectify.pyx":1999
  *             if ns != XML_SCHEMA_NS:
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         elif nsmap is _DEFAULT_NSMAP:             # <<<<<<<<<<<<<<
@@ -27574,7 +29269,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       goto __pyx_L25;
     }
 
-    /* "lxml/objectify.pyx":1928
+    /* "lxml/objectify.pyx":2003
  *             _xsi = u'xsd:' + _xsi
  *         else:
  *             name = _xsi             # <<<<<<<<<<<<<<
@@ -27585,14 +29280,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v__xsi);
       __pyx_v_name = __pyx_v__xsi;
 
-      /* "lxml/objectify.pyx":1929
+      /* "lxml/objectify.pyx":2004
  *         else:
  *             name = _xsi
  *             for prefix, ns in nsmap.items():             # <<<<<<<<<<<<<<
  *                 if ns == XML_SCHEMA_NS:
  *                     if prefix is not None and prefix:
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1929, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2004, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_4 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -27606,16 +29301,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1929, __pyx_L1_error)
+      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2004, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
         __pyx_t_6 = __pyx_t_5; __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_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1929, __pyx_L1_error)
+        __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2004, __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, 1929, __pyx_L1_error)
+        __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2004, __pyx_L1_error)
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       for (;;) {
@@ -27623,17 +29318,17 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           if (likely(PyList_CheckExact(__pyx_t_6))) {
             if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1929, __pyx_L1_error)
+            __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 2004, __pyx_L1_error)
             #else
-            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1929, __pyx_L1_error)
+            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2004, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_5);
             #endif
           } else {
             if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1929, __pyx_L1_error)
+            __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 2004, __pyx_L1_error)
             #else
-            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1929, __pyx_L1_error)
+            __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2004, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_5);
             #endif
           }
@@ -27643,7 +29338,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(0, 1929, __pyx_L1_error)
+              else __PYX_ERR(0, 2004, __pyx_L1_error)
             }
             break;
           }
@@ -27655,7 +29350,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(0, 1929, __pyx_L1_error)
+            __PYX_ERR(0, 2004, __pyx_L1_error)
           }
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
@@ -27668,15 +29363,15 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           __Pyx_INCREF(__pyx_t_4);
           __Pyx_INCREF(__pyx_t_7);
           #else
-          __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1929, __pyx_L1_error)
+          __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2004, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1929, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2004, __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_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1929, __pyx_L1_error)
+          __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2004, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext;
@@ -27684,7 +29379,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           __Pyx_GOTREF(__pyx_t_4);
           index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L31_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_7);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_11), 2) < 0) __PYX_ERR(0, 1929, __pyx_L1_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_11), 2) < 0) __PYX_ERR(0, 2004, __pyx_L1_error)
           __pyx_t_8 = NULL;
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           goto __pyx_L32_unpacking_done;
@@ -27692,7 +29387,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __pyx_t_8 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(0, 1929, __pyx_L1_error)
+          __PYX_ERR(0, 2004, __pyx_L1_error)
           __pyx_L32_unpacking_done:;
         }
         __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_4);
@@ -27700,19 +29395,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_7);
         __pyx_t_7 = 0;
 
-        /* "lxml/objectify.pyx":1930
+        /* "lxml/objectify.pyx":2005
  *             name = _xsi
  *             for prefix, ns in nsmap.items():
  *                 if ns == XML_SCHEMA_NS:             # <<<<<<<<<<<<<<
  *                     if prefix is not None and prefix:
  *                         _xsi = prefix + u':' + _xsi
  */
-        __pyx_t_5 = PyObject_RichCompare(__pyx_v_ns, __pyx_v_4lxml_9objectify_XML_SCHEMA_NS, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1930, __pyx_L1_error)
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1930, __pyx_L1_error)
+        __pyx_t_5 = PyObject_RichCompare(__pyx_v_ns, __pyx_v_4lxml_9objectify_XML_SCHEMA_NS, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2005, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2005, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         if (__pyx_t_2) {
 
-          /* "lxml/objectify.pyx":1931
+          /* "lxml/objectify.pyx":2006
  *             for prefix, ns in nsmap.items():
  *                 if ns == XML_SCHEMA_NS:
  *                     if prefix is not None and prefix:             # <<<<<<<<<<<<<<
@@ -27726,27 +29421,27 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
             __pyx_t_2 = __pyx_t_3;
             goto __pyx_L35_bool_binop_done;
           }
-          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1931, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_prefix); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2006, __pyx_L1_error)
           __pyx_t_2 = __pyx_t_3;
           __pyx_L35_bool_binop_done:;
           if (__pyx_t_2) {
 
-            /* "lxml/objectify.pyx":1932
+            /* "lxml/objectify.pyx":2007
  *                 if ns == XML_SCHEMA_NS:
  *                     if prefix is not None and prefix:
  *                         _xsi = prefix + u':' + _xsi             # <<<<<<<<<<<<<<
  *                     break
  *             else:
  */
-            __pyx_t_5 = PyNumber_Add(__pyx_v_prefix, __pyx_kp_u__17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1932, __pyx_L1_error)
+            __pyx_t_5 = PyNumber_Add(__pyx_v_prefix, __pyx_kp_u__17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2007, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_5);
-            __pyx_t_7 = PyNumber_Add(__pyx_t_5, __pyx_v__xsi); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1932, __pyx_L1_error)
+            __pyx_t_7 = PyNumber_Add(__pyx_t_5, __pyx_v__xsi); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2007, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_7);
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
             __Pyx_DECREF_SET(__pyx_v__xsi, __pyx_t_7);
             __pyx_t_7 = 0;
 
-            /* "lxml/objectify.pyx":1931
+            /* "lxml/objectify.pyx":2006
  *             for prefix, ns in nsmap.items():
  *                 if ns == XML_SCHEMA_NS:
  *                     if prefix is not None and prefix:             # <<<<<<<<<<<<<<
@@ -27755,7 +29450,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
           }
 
-          /* "lxml/objectify.pyx":1933
+          /* "lxml/objectify.pyx":2008
  *                     if prefix is not None and prefix:
  *                         _xsi = prefix + u':' + _xsi
  *                     break             # <<<<<<<<<<<<<<
@@ -27764,7 +29459,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
           goto __pyx_L30_break;
 
-          /* "lxml/objectify.pyx":1930
+          /* "lxml/objectify.pyx":2005
  *             name = _xsi
  *             for prefix, ns in nsmap.items():
  *                 if ns == XML_SCHEMA_NS:             # <<<<<<<<<<<<<<
@@ -27773,7 +29468,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
         }
 
-        /* "lxml/objectify.pyx":1929
+        /* "lxml/objectify.pyx":2004
  *         else:
  *             name = _xsi
  *             for prefix, ns in nsmap.items():             # <<<<<<<<<<<<<<
@@ -27783,7 +29478,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       }
       /*else*/ {
 
-        /* "lxml/objectify.pyx":1935
+        /* "lxml/objectify.pyx":2010
  *                     break
  *             else:
  *                 raise ValueError, u"XSD types require the XSD namespace"             # <<<<<<<<<<<<<<
@@ -27791,10 +29486,10 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  *         if _pytype is None:
  */
         __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_XSD_types_require_the_XSD_namesp, 0, 0);
-        __PYX_ERR(0, 1935, __pyx_L1_error)
+        __PYX_ERR(0, 2010, __pyx_L1_error)
       }
 
-      /* "lxml/objectify.pyx":1929
+      /* "lxml/objectify.pyx":2004
  *         else:
  *             name = _xsi
  *             for prefix, ns in nsmap.items():             # <<<<<<<<<<<<<<
@@ -27806,16 +29501,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     }
     __pyx_L25:;
 
-    /* "lxml/objectify.pyx":1936
+    /* "lxml/objectify.pyx":2011
  *             else:
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         _attributes[XML_SCHEMA_INSTANCE_TYPE_ATTR] = _xsi             # <<<<<<<<<<<<<<
  *         if _pytype is None:
  *             # allow using unregistered or even wrong xsi:type names
  */
-    if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_TYPE_ATTR, __pyx_v__xsi) < 0)) __PYX_ERR(0, 1936, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_TYPE_ATTR, __pyx_v__xsi) < 0)) __PYX_ERR(0, 2011, __pyx_L1_error)
 
-    /* "lxml/objectify.pyx":1937
+    /* "lxml/objectify.pyx":2012
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         _attributes[XML_SCHEMA_INSTANCE_TYPE_ATTR] = _xsi
  *         if _pytype is None:             # <<<<<<<<<<<<<<
@@ -27826,7 +29521,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_t_3 = (__pyx_t_2 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/objectify.pyx":1939
+      /* "lxml/objectify.pyx":2014
  *         if _pytype is None:
  *             # allow using unregistered or even wrong xsi:type names
  *             py_type = <PyType>_SCHEMA_TYPE_DICT.get(_xsi)             # <<<<<<<<<<<<<<
@@ -27835,9 +29530,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-        __PYX_ERR(0, 1939, __pyx_L1_error)
+        __PYX_ERR(0, 2014, __pyx_L1_error)
       }
-      __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v__xsi, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1939, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v__xsi, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2014, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = __pyx_t_6;
       __Pyx_INCREF(__pyx_t_7);
@@ -27845,7 +29540,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_v_py_type = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "lxml/objectify.pyx":1940
+      /* "lxml/objectify.pyx":2015
  *             # allow using unregistered or even wrong xsi:type names
  *             py_type = <PyType>_SCHEMA_TYPE_DICT.get(_xsi)
  *             if py_type is None:             # <<<<<<<<<<<<<<
@@ -27856,7 +29551,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_t_2 = (__pyx_t_3 != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/objectify.pyx":1941
+        /* "lxml/objectify.pyx":2016
  *             py_type = <PyType>_SCHEMA_TYPE_DICT.get(_xsi)
  *             if py_type is None:
  *                 py_type = <PyType>_SCHEMA_TYPE_DICT.get(name)             # <<<<<<<<<<<<<<
@@ -27865,9 +29560,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
         if (unlikely(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT == Py_None)) {
           PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-          __PYX_ERR(0, 1941, __pyx_L1_error)
+          __PYX_ERR(0, 2016, __pyx_L1_error)
         }
-        __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1941, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2016, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_6 = __pyx_t_7;
         __Pyx_INCREF(__pyx_t_6);
@@ -27875,7 +29570,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_DECREF_SET(__pyx_v_py_type, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_6));
         __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":1940
+        /* "lxml/objectify.pyx":2015
  *             # allow using unregistered or even wrong xsi:type names
  *             py_type = <PyType>_SCHEMA_TYPE_DICT.get(_xsi)
  *             if py_type is None:             # <<<<<<<<<<<<<<
@@ -27884,7 +29579,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/objectify.pyx":1942
+      /* "lxml/objectify.pyx":2017
  *             if py_type is None:
  *                 py_type = <PyType>_SCHEMA_TYPE_DICT.get(name)
  *             if py_type is not None:             # <<<<<<<<<<<<<<
@@ -27895,7 +29590,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_t_3 = (__pyx_t_2 != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/objectify.pyx":1943
+        /* "lxml/objectify.pyx":2018
  *                 py_type = <PyType>_SCHEMA_TYPE_DICT.get(name)
  *             if py_type is not None:
  *                 _pytype = py_type.name             # <<<<<<<<<<<<<<
@@ -27907,7 +29602,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_DECREF_SET(__pyx_v__pytype, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":1942
+        /* "lxml/objectify.pyx":2017
  *             if py_type is None:
  *                 py_type = <PyType>_SCHEMA_TYPE_DICT.get(name)
  *             if py_type is not None:             # <<<<<<<<<<<<<<
@@ -27916,7 +29611,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/objectify.pyx":1937
+      /* "lxml/objectify.pyx":2012
  *                 raise ValueError, u"XSD types require the XSD namespace"
  *         _attributes[XML_SCHEMA_INSTANCE_TYPE_ATTR] = _xsi
  *         if _pytype is None:             # <<<<<<<<<<<<<<
@@ -27925,7 +29620,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/objectify.pyx":1918
+    /* "lxml/objectify.pyx":1993
  *             _pytype = _attributes.get(PYTYPE_ATTRIBUTE)
  * 
  *     if _xsi is not None:             # <<<<<<<<<<<<<<
@@ -27934,7 +29629,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1945
+  /* "lxml/objectify.pyx":2020
  *                 _pytype = py_type.name
  * 
  *     if _pytype is None:             # <<<<<<<<<<<<<<
@@ -27945,19 +29640,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1946
+    /* "lxml/objectify.pyx":2021
  * 
  *     if _pytype is None:
  *         _pytype = _pytypename(_value)             # <<<<<<<<<<<<<<
  * 
  *     if _value is None and _pytype != u"str":
  */
-    __pyx_t_6 = __pyx_f_4lxml_9objectify__pytypename(__pyx_v__value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1946, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_9objectify__pytypename(__pyx_v__value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2021, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v__pytype, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "lxml/objectify.pyx":1945
+    /* "lxml/objectify.pyx":2020
  *                 _pytype = py_type.name
  * 
  *     if _pytype is None:             # <<<<<<<<<<<<<<
@@ -27966,7 +29661,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1948
+  /* "lxml/objectify.pyx":2023
  *         _pytype = _pytypename(_value)
  * 
  *     if _value is None and _pytype != u"str":             # <<<<<<<<<<<<<<
@@ -27980,19 +29675,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L43_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v__pytype, __pyx_n_u_str, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1948, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v__pytype, __pyx_n_u_str, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2023, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
   __pyx_L43_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1949
+    /* "lxml/objectify.pyx":2024
  * 
  *     if _value is None and _pytype != u"str":
  *         _pytype = _pytype or u"NoneType"             # <<<<<<<<<<<<<<
  *         strval = None
  *     elif python._isString(_value):
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__pytype); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1949, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__pytype); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2024, __pyx_L1_error)
     if (!__pyx_t_2) {
     } else {
       __Pyx_INCREF(__pyx_v__pytype);
@@ -28005,7 +29700,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_DECREF_SET(__pyx_v__pytype, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "lxml/objectify.pyx":1950
+    /* "lxml/objectify.pyx":2025
  *     if _value is None and _pytype != u"str":
  *         _pytype = _pytype or u"NoneType"
  *         strval = None             # <<<<<<<<<<<<<<
@@ -28015,7 +29710,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_INCREF(Py_None);
     __pyx_v_strval = Py_None;
 
-    /* "lxml/objectify.pyx":1948
+    /* "lxml/objectify.pyx":2023
  *         _pytype = _pytypename(_value)
  * 
  *     if _value is None and _pytype != u"str":             # <<<<<<<<<<<<<<
@@ -28025,7 +29720,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     goto __pyx_L42;
   }
 
-  /* "lxml/objectify.pyx":1951
+  /* "lxml/objectify.pyx":2026
  *         _pytype = _pytype or u"NoneType"
  *         strval = None
  *     elif python._isString(_value):             # <<<<<<<<<<<<<<
@@ -28035,7 +29730,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_2 = (_isString(__pyx_v__value) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1952
+    /* "lxml/objectify.pyx":2027
  *         strval = None
  *     elif python._isString(_value):
  *         strval = _value             # <<<<<<<<<<<<<<
@@ -28045,7 +29740,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_INCREF(__pyx_v__value);
     __pyx_v_strval = __pyx_v__value;
 
-    /* "lxml/objectify.pyx":1951
+    /* "lxml/objectify.pyx":2026
  *         _pytype = _pytype or u"NoneType"
  *         strval = None
  *     elif python._isString(_value):             # <<<<<<<<<<<<<<
@@ -28055,7 +29750,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     goto __pyx_L42;
   }
 
-  /* "lxml/objectify.pyx":1953
+  /* "lxml/objectify.pyx":2028
  *     elif python._isString(_value):
  *         strval = _value
  *     elif isinstance(_value, bool):             # <<<<<<<<<<<<<<
@@ -28064,22 +29759,22 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   __pyx_t_6 = ((PyObject*)&PyBool_Type);
   __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v__value, __pyx_t_6); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1953, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v__value, __pyx_t_6); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2028, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/objectify.pyx":1954
+    /* "lxml/objectify.pyx":2029
  *         strval = _value
  *     elif isinstance(_value, bool):
  *         if _value:             # <<<<<<<<<<<<<<
  *             strval = u"true"
  *         else:
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v__value); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1954, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v__value); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2029, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "lxml/objectify.pyx":1955
+      /* "lxml/objectify.pyx":2030
  *     elif isinstance(_value, bool):
  *         if _value:
  *             strval = u"true"             # <<<<<<<<<<<<<<
@@ -28089,7 +29784,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_n_u_true);
       __pyx_v_strval = __pyx_n_u_true;
 
-      /* "lxml/objectify.pyx":1954
+      /* "lxml/objectify.pyx":2029
  *         strval = _value
  *     elif isinstance(_value, bool):
  *         if _value:             # <<<<<<<<<<<<<<
@@ -28099,7 +29794,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       goto __pyx_L47;
     }
 
-    /* "lxml/objectify.pyx":1957
+    /* "lxml/objectify.pyx":2032
  *             strval = u"true"
  *         else:
  *             strval = u"false"             # <<<<<<<<<<<<<<
@@ -28112,7 +29807,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     }
     __pyx_L47:;
 
-    /* "lxml/objectify.pyx":1953
+    /* "lxml/objectify.pyx":2028
  *     elif python._isString(_value):
  *         strval = _value
  *     elif isinstance(_value, bool):             # <<<<<<<<<<<<<<
@@ -28122,7 +29817,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     goto __pyx_L42;
   }
 
-  /* "lxml/objectify.pyx":1959
+  /* "lxml/objectify.pyx":2034
  *             strval = u"false"
  *     else:
  *         py_type = <PyType>_PYTYPE_DICT.get(_pytype)             # <<<<<<<<<<<<<<
@@ -28132,9 +29827,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   /*else*/ {
     if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-      __PYX_ERR(0, 1959, __pyx_L1_error)
+      __PYX_ERR(0, 2034, __pyx_L1_error)
     }
-    __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v__pytype, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1959, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v__pytype, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2034, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = __pyx_t_6;
     __Pyx_INCREF(__pyx_t_7);
@@ -28142,7 +29837,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_XDECREF_SET(__pyx_v_py_type, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_7));
     __pyx_t_7 = 0;
 
-    /* "lxml/objectify.pyx":1960
+    /* "lxml/objectify.pyx":2035
  *     else:
  *         py_type = <PyType>_PYTYPE_DICT.get(_pytype)
  *         stringify = unicode if py_type is None else py_type.stringify             # <<<<<<<<<<<<<<
@@ -28160,7 +29855,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __pyx_v_stringify = __pyx_t_7;
     __pyx_t_7 = 0;
 
-    /* "lxml/objectify.pyx":1961
+    /* "lxml/objectify.pyx":2036
  *         py_type = <PyType>_PYTYPE_DICT.get(_pytype)
  *         stringify = unicode if py_type is None else py_type.stringify
  *         strval = stringify(_value)             # <<<<<<<<<<<<<<
@@ -28180,7 +29875,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     }
     __pyx_t_7 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_v__value) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v__value);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1961, __pyx_L1_error)
+    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2036, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_strval = __pyx_t_7;
@@ -28188,7 +29883,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   }
   __pyx_L42:;
 
-  /* "lxml/objectify.pyx":1963
+  /* "lxml/objectify.pyx":2038
  *         strval = stringify(_value)
  * 
  *     if _pytype is not None:             # <<<<<<<<<<<<<<
@@ -28199,25 +29894,25 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/objectify.pyx":1964
+    /* "lxml/objectify.pyx":2039
  * 
  *     if _pytype is not None:
  *         if _pytype == u"NoneType" or _pytype == u"none":             # <<<<<<<<<<<<<<
  *             strval = None
  *             _attributes[XML_SCHEMA_INSTANCE_NIL_ATTR] = u"true"
  */
-    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v__pytype, __pyx_n_u_NoneType, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1964, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v__pytype, __pyx_n_u_NoneType, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2039, __pyx_L1_error)
     if (!__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
       goto __pyx_L50_bool_binop_done;
     }
-    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v__pytype, __pyx_n_u_none, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1964, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v__pytype, __pyx_n_u_none, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2039, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_1;
     __pyx_L50_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "lxml/objectify.pyx":1965
+      /* "lxml/objectify.pyx":2040
  *     if _pytype is not None:
  *         if _pytype == u"NoneType" or _pytype == u"none":
  *             strval = None             # <<<<<<<<<<<<<<
@@ -28227,16 +29922,16 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(Py_None);
       __Pyx_DECREF_SET(__pyx_v_strval, Py_None);
 
-      /* "lxml/objectify.pyx":1966
+      /* "lxml/objectify.pyx":2041
  *         if _pytype == u"NoneType" or _pytype == u"none":
  *             strval = None
  *             _attributes[XML_SCHEMA_INSTANCE_NIL_ATTR] = u"true"             # <<<<<<<<<<<<<<
  *         else:
  *             # check if type information from arguments is valid
  */
-      if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NIL_ATTR, __pyx_n_u_true) < 0)) __PYX_ERR(0, 1966, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NIL_ATTR, __pyx_n_u_true) < 0)) __PYX_ERR(0, 2041, __pyx_L1_error)
 
-      /* "lxml/objectify.pyx":1964
+      /* "lxml/objectify.pyx":2039
  * 
  *     if _pytype is not None:
  *         if _pytype == u"NoneType" or _pytype == u"none":             # <<<<<<<<<<<<<<
@@ -28246,7 +29941,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       goto __pyx_L49;
     }
 
-    /* "lxml/objectify.pyx":1969
+    /* "lxml/objectify.pyx":2044
  *         else:
  *             # check if type information from arguments is valid
  *             py_type = <PyType>_PYTYPE_DICT.get(_pytype)             # <<<<<<<<<<<<<<
@@ -28256,9 +29951,9 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     /*else*/ {
       if (unlikely(__pyx_v_4lxml_9objectify__PYTYPE_DICT == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
-        __PYX_ERR(0, 1969, __pyx_L1_error)
+        __PYX_ERR(0, 2044, __pyx_L1_error)
       }
-      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v__pytype, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1969, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_4lxml_9objectify__PYTYPE_DICT, __pyx_v__pytype, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2044, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_6 = __pyx_t_7;
       __Pyx_INCREF(__pyx_t_6);
@@ -28266,7 +29961,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_XDECREF_SET(__pyx_v_py_type, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_6));
       __pyx_t_6 = 0;
 
-      /* "lxml/objectify.pyx":1970
+      /* "lxml/objectify.pyx":2045
  *             # check if type information from arguments is valid
  *             py_type = <PyType>_PYTYPE_DICT.get(_pytype)
  *             if py_type is not None:             # <<<<<<<<<<<<<<
@@ -28277,7 +29972,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __pyx_t_1 = (__pyx_t_2 != 0);
       if (__pyx_t_1) {
 
-        /* "lxml/objectify.pyx":1971
+        /* "lxml/objectify.pyx":2046
  *             py_type = <PyType>_PYTYPE_DICT.get(_pytype)
  *             if py_type is not None:
  *                 if py_type.type_check is not None:             # <<<<<<<<<<<<<<
@@ -28288,7 +29983,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __pyx_t_2 = (__pyx_t_1 != 0);
         if (__pyx_t_2) {
 
-          /* "lxml/objectify.pyx":1972
+          /* "lxml/objectify.pyx":2047
  *             if py_type is not None:
  *                 if py_type.type_check is not None:
  *                     py_type.type_check(strval)             # <<<<<<<<<<<<<<
@@ -28308,12 +30003,12 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           }
           __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_5, __pyx_v_strval) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_strval);
           __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1972, __pyx_L1_error)
+          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2047, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-          /* "lxml/objectify.pyx":1971
+          /* "lxml/objectify.pyx":2046
  *             py_type = <PyType>_PYTYPE_DICT.get(_pytype)
  *             if py_type is not None:
  *                 if py_type.type_check is not None:             # <<<<<<<<<<<<<<
@@ -28322,19 +30017,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
         }
 
-        /* "lxml/objectify.pyx":1973
+        /* "lxml/objectify.pyx":2048
  *                 if py_type.type_check is not None:
  *                     py_type.type_check(strval)
  *                 _attributes[PYTYPE_ATTRIBUTE] = _pytype             # <<<<<<<<<<<<<<
  * 
  *     return _makeElement(u"value", strval, _attributes, nsmap)
  */
-        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1973, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYTYPE_ATTRIBUTE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2048, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_t_6, __pyx_v__pytype) < 0)) __PYX_ERR(0, 1973, __pyx_L1_error)
+        if (unlikely(PyObject_SetItem(__pyx_v__attributes, __pyx_t_6, __pyx_v__pytype) < 0)) __PYX_ERR(0, 2048, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "lxml/objectify.pyx":1970
+        /* "lxml/objectify.pyx":2045
  *             # check if type information from arguments is valid
  *             py_type = <PyType>_PYTYPE_DICT.get(_pytype)
  *             if py_type is not None:             # <<<<<<<<<<<<<<
@@ -28345,7 +30040,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     }
     __pyx_L49:;
 
-    /* "lxml/objectify.pyx":1963
+    /* "lxml/objectify.pyx":2038
  *         strval = stringify(_value)
  * 
  *     if _pytype is not None:             # <<<<<<<<<<<<<<
@@ -28354,7 +30049,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/objectify.pyx":1975
+  /* "lxml/objectify.pyx":2050
  *                 _attributes[PYTYPE_ATTRIBUTE] = _pytype
  * 
  *     return _makeElement(u"value", strval, _attributes, nsmap)             # <<<<<<<<<<<<<<
@@ -28362,13 +30057,13 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_9objectify__makeElement(__pyx_n_u_value, __pyx_v_strval, __pyx_v__attributes, __pyx_v_nsmap)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1975, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_9objectify__makeElement(__pyx_n_u_value, __pyx_v_strval, __pyx_v__attributes, __pyx_v_nsmap)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2050, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_r = __pyx_t_6;
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "lxml/objectify.pyx":1872
+  /* "lxml/objectify.pyx":1947
  *     return _makeElement(_tag, None, _attributes, nsmap)
  * 
  * def DataElement(_value, attrib=None, nsmap=None, *, _pytype=None, _xsi=None,             # <<<<<<<<<<<<<<
@@ -32889,6 +34584,20 @@ static PyObject *__pyx_getprop_4lxml_9objectify_13NumberElement_pyval(PyObject *
 static PyMethodDef __pyx_methods_4lxml_9objectify_NumberElement[] = {
   {"_setValueParser", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_1_setValueParser, METH_O, __pyx_doc_4lxml_9objectify_13NumberElement__setValueParser},
   {"__complex__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_9__complex__, METH_NOARGS, 0},
+  {"__radd__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_25__radd__, METH_O, 0},
+  {"__rsub__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_29__rsub__, METH_O, 0},
+  {"__rmul__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_33__rmul__, METH_O, 0},
+  {"__rdiv__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_37__rdiv__, METH_O, 0},
+  {"__rtruediv__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_41__rtruediv__, METH_O, 0},
+  {"__rfloordiv__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_45__rfloordiv__, METH_O, 0},
+  {"__rmod__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_49__rmod__, METH_O, 0},
+  {"__rdivmod__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_53__rdivmod__, METH_O, 0},
+  {"__rpow__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4lxml_9objectify_13NumberElement_57__rpow__, METH_VARARGS|METH_KEYWORDS, 0},
+  {"__rlshift__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_71__rlshift__, METH_O, 0},
+  {"__rrshift__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_75__rrshift__, METH_O, 0},
+  {"__rand__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_79__rand__, METH_O, 0},
+  {"__ror__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_83__ror__, METH_O, 0},
+  {"__rxor__", (PyCFunction)__pyx_pw_4lxml_9objectify_13NumberElement_87__rxor__, METH_O, 0},
   {0, 0, 0, 0}
 };
 
@@ -32899,24 +34608,24 @@ static struct PyGetSetDef __pyx_getsets_4lxml_9objectify_NumberElement[] = {
 
 static PyNumberMethods __pyx_tp_as_number_NumberElement = {
   __pyx_pw_4lxml_9objectify_13NumberElement_23__add__, /*nb_add*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_25__sub__, /*nb_subtract*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_27__mul__, /*nb_multiply*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_27__sub__, /*nb_subtract*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_31__mul__, /*nb_multiply*/
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
-  __pyx_pw_4lxml_9objectify_13NumberElement_29__div__, /*nb_divide*/
-  #endif
-  __pyx_pw_4lxml_9objectify_13NumberElement_33__mod__, /*nb_remainder*/
-  0, /*nb_divmod*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_35__pow__, /*nb_power*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_37__neg__, /*nb_negative*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_39__pos__, /*nb_positive*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_41__abs__, /*nb_absolute*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_43__nonzero__, /*nb_nonzero*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_45__invert__, /*nb_invert*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_47__lshift__, /*nb_lshift*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_49__rshift__, /*nb_rshift*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_51__and__, /*nb_and*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_55__xor__, /*nb_xor*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_53__or__, /*nb_or*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_35__div__, /*nb_divide*/
+  #endif
+  __pyx_pw_4lxml_9objectify_13NumberElement_47__mod__, /*nb_remainder*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_51__divmod__, /*nb_divmod*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_55__pow__, /*nb_power*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_59__neg__, /*nb_negative*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_61__pos__, /*nb_positive*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_63__abs__, /*nb_absolute*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_65__bool__, /*nb_nonzero*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_67__invert__, /*nb_invert*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_69__lshift__, /*nb_lshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_73__rshift__, /*nb_rshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_77__and__, /*nb_and*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_85__xor__, /*nb_xor*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_81__or__, /*nb_or*/
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
@@ -32946,8 +34655,8 @@ static PyNumberMethods __pyx_tp_as_number_NumberElement = {
   0, /*nb_inplace_and*/
   0, /*nb_inplace_xor*/
   0, /*nb_inplace_or*/
-  0, /*nb_floor_divide*/
-  __pyx_pw_4lxml_9objectify_13NumberElement_31__truediv__, /*nb_true_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_43__floordiv__, /*nb_floor_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_39__truediv__, /*nb_true_divide*/
   0, /*nb_inplace_floor_divide*/
   0, /*nb_inplace_true_divide*/
   0, /*nb_index*/
@@ -33050,80 +34759,84 @@ static PyNumberMethods __pyx_tp_as_number_IntElement = {
   0, /*nb_add*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_25__sub__, /*nb_subtract*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_27__sub__, /*nb_subtract*/
   #else
   0, /*nb_subtract*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_27__mul__, /*nb_multiply*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_31__mul__, /*nb_multiply*/
   #else
   0, /*nb_multiply*/
   #endif
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_29__div__, /*nb_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_35__div__, /*nb_divide*/
   #else
   0, /*nb_divide*/
   #endif
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_33__mod__, /*nb_remainder*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_47__mod__, /*nb_remainder*/
   #else
   0, /*nb_remainder*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_51__divmod__, /*nb_divmod*/
+  #else
   0, /*nb_divmod*/
+  #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_35__pow__, /*nb_power*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_55__pow__, /*nb_power*/
   #else
   0, /*nb_power*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_37__neg__, /*nb_negative*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_59__neg__, /*nb_negative*/
   #else
   0, /*nb_negative*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_39__pos__, /*nb_positive*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_61__pos__, /*nb_positive*/
   #else
   0, /*nb_positive*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_41__abs__, /*nb_absolute*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_63__abs__, /*nb_absolute*/
   #else
   0, /*nb_absolute*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_43__nonzero__, /*nb_nonzero*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_65__bool__, /*nb_nonzero*/
   #else
   0, /*nb_nonzero*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_45__invert__, /*nb_invert*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_67__invert__, /*nb_invert*/
   #else
   0, /*nb_invert*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_47__lshift__, /*nb_lshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_69__lshift__, /*nb_lshift*/
   #else
   0, /*nb_lshift*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_49__rshift__, /*nb_rshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_73__rshift__, /*nb_rshift*/
   #else
   0, /*nb_rshift*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_51__and__, /*nb_and*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_77__and__, /*nb_and*/
   #else
   0, /*nb_and*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_55__xor__, /*nb_xor*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_85__xor__, /*nb_xor*/
   #else
   0, /*nb_xor*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_53__or__, /*nb_or*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_81__or__, /*nb_or*/
   #else
   0, /*nb_or*/
   #endif
@@ -33176,9 +34889,13 @@ static PyNumberMethods __pyx_tp_as_number_IntElement = {
   0, /*nb_inplace_and*/
   0, /*nb_inplace_xor*/
   0, /*nb_inplace_or*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_43__floordiv__, /*nb_floor_divide*/
+  #else
   0, /*nb_floor_divide*/
+  #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_31__truediv__, /*nb_true_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_39__truediv__, /*nb_true_divide*/
   #else
   0, /*nb_true_divide*/
   #endif
@@ -33292,80 +35009,84 @@ static PyNumberMethods __pyx_tp_as_number_LongElement = {
   0, /*nb_add*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_25__sub__, /*nb_subtract*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_27__sub__, /*nb_subtract*/
   #else
   0, /*nb_subtract*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_27__mul__, /*nb_multiply*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_31__mul__, /*nb_multiply*/
   #else
   0, /*nb_multiply*/
   #endif
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_29__div__, /*nb_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_35__div__, /*nb_divide*/
   #else
   0, /*nb_divide*/
   #endif
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_33__mod__, /*nb_remainder*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_47__mod__, /*nb_remainder*/
   #else
   0, /*nb_remainder*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_51__divmod__, /*nb_divmod*/
+  #else
   0, /*nb_divmod*/
+  #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_35__pow__, /*nb_power*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_55__pow__, /*nb_power*/
   #else
   0, /*nb_power*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_37__neg__, /*nb_negative*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_59__neg__, /*nb_negative*/
   #else
   0, /*nb_negative*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_39__pos__, /*nb_positive*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_61__pos__, /*nb_positive*/
   #else
   0, /*nb_positive*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_41__abs__, /*nb_absolute*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_63__abs__, /*nb_absolute*/
   #else
   0, /*nb_absolute*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_43__nonzero__, /*nb_nonzero*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_65__bool__, /*nb_nonzero*/
   #else
   0, /*nb_nonzero*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_45__invert__, /*nb_invert*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_67__invert__, /*nb_invert*/
   #else
   0, /*nb_invert*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_47__lshift__, /*nb_lshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_69__lshift__, /*nb_lshift*/
   #else
   0, /*nb_lshift*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_49__rshift__, /*nb_rshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_73__rshift__, /*nb_rshift*/
   #else
   0, /*nb_rshift*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_51__and__, /*nb_and*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_77__and__, /*nb_and*/
   #else
   0, /*nb_and*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_55__xor__, /*nb_xor*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_85__xor__, /*nb_xor*/
   #else
   0, /*nb_xor*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_53__or__, /*nb_or*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_81__or__, /*nb_or*/
   #else
   0, /*nb_or*/
   #endif
@@ -33418,9 +35139,13 @@ static PyNumberMethods __pyx_tp_as_number_LongElement = {
   0, /*nb_inplace_and*/
   0, /*nb_inplace_xor*/
   0, /*nb_inplace_or*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_43__floordiv__, /*nb_floor_divide*/
+  #else
   0, /*nb_floor_divide*/
+  #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_31__truediv__, /*nb_true_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_39__truediv__, /*nb_true_divide*/
   #else
   0, /*nb_true_divide*/
   #endif
@@ -33620,7 +35345,9 @@ static PyObject *__pyx_getprop_4lxml_9objectify_13StringElement_pyval(PyObject *
 
 static PyMethodDef __pyx_methods_4lxml_9objectify_StringElement[] = {
   {"strlen", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_3strlen, METH_NOARGS, 0},
-  {"__complex__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_23__complex__, METH_NOARGS, 0},
+  {"__radd__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_13__radd__, METH_O, 0},
+  {"__rmul__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_17__rmul__, METH_O, 0},
+  {"__complex__", (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_27__complex__, METH_NOARGS, 0},
   {0, 0, 0, 0}
 };
 
@@ -33632,17 +35359,17 @@ static struct PyGetSetDef __pyx_getsets_4lxml_9objectify_StringElement[] = {
 static PyNumberMethods __pyx_tp_as_number_StringElement = {
   __pyx_pw_4lxml_9objectify_13StringElement_11__add__, /*nb_add*/
   0, /*nb_subtract*/
-  __pyx_pw_4lxml_9objectify_13StringElement_13__mul__, /*nb_multiply*/
+  __pyx_pw_4lxml_9objectify_13StringElement_15__mul__, /*nb_multiply*/
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_15__mod__, /*nb_remainder*/
+  __pyx_pw_4lxml_9objectify_13StringElement_19__mod__, /*nb_remainder*/
   0, /*nb_divmod*/
   0, /*nb_power*/
   0, /*nb_negative*/
   0, /*nb_positive*/
   0, /*nb_absolute*/
-  __pyx_pw_4lxml_9objectify_13StringElement_5__nonzero__, /*nb_nonzero*/
+  __pyx_pw_4lxml_9objectify_13StringElement_5__bool__, /*nb_nonzero*/
   0, /*nb_invert*/
   0, /*nb_lshift*/
   0, /*nb_rshift*/
@@ -33652,13 +35379,13 @@ static PyNumberMethods __pyx_tp_as_number_StringElement = {
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_17__int__, /*nb_int*/
+  __pyx_pw_4lxml_9objectify_13StringElement_21__int__, /*nb_int*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_pw_4lxml_9objectify_13StringElement_19__long__, /*nb_long*/
+  __pyx_pw_4lxml_9objectify_13StringElement_23__long__, /*nb_long*/
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_21__float__, /*nb_float*/
+  __pyx_pw_4lxml_9objectify_13StringElement_25__float__, /*nb_float*/
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
@@ -33800,7 +35527,7 @@ static PyNumberMethods __pyx_tp_as_number_NoneElement = {
   0, /*nb_negative*/
   0, /*nb_positive*/
   0, /*nb_absolute*/
-  __pyx_pw_4lxml_9objectify_11NoneElement_5__nonzero__, /*nb_nonzero*/
+  __pyx_pw_4lxml_9objectify_11NoneElement_5__bool__, /*nb_nonzero*/
   0, /*nb_invert*/
   0, /*nb_lshift*/
   0, /*nb_rshift*/
@@ -33949,101 +35676,93 @@ static PyNumberMethods __pyx_tp_as_number_BoolElement = {
   0, /*nb_add*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_25__sub__, /*nb_subtract*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_27__sub__, /*nb_subtract*/
   #else
   0, /*nb_subtract*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_27__mul__, /*nb_multiply*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_31__mul__, /*nb_multiply*/
   #else
   0, /*nb_multiply*/
   #endif
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_29__div__, /*nb_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_35__div__, /*nb_divide*/
   #else
   0, /*nb_divide*/
   #endif
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_33__mod__, /*nb_remainder*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_47__mod__, /*nb_remainder*/
   #else
   0, /*nb_remainder*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_51__divmod__, /*nb_divmod*/
+  #else
   0, /*nb_divmod*/
+  #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_35__pow__, /*nb_power*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_55__pow__, /*nb_power*/
   #else
   0, /*nb_power*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_37__neg__, /*nb_negative*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_59__neg__, /*nb_negative*/
   #else
   0, /*nb_negative*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_39__pos__, /*nb_positive*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_61__pos__, /*nb_positive*/
   #else
   0, /*nb_positive*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_41__abs__, /*nb_absolute*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_63__abs__, /*nb_absolute*/
   #else
   0, /*nb_absolute*/
   #endif
-  __pyx_pw_4lxml_9objectify_11BoolElement_3__nonzero__, /*nb_nonzero*/
+  __pyx_pw_4lxml_9objectify_11BoolElement_3__bool__, /*nb_nonzero*/
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_45__invert__, /*nb_invert*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_67__invert__, /*nb_invert*/
   #else
   0, /*nb_invert*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_47__lshift__, /*nb_lshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_69__lshift__, /*nb_lshift*/
   #else
   0, /*nb_lshift*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_49__rshift__, /*nb_rshift*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_73__rshift__, /*nb_rshift*/
   #else
   0, /*nb_rshift*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_51__and__, /*nb_and*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_77__and__, /*nb_and*/
   #else
   0, /*nb_and*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_55__xor__, /*nb_xor*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_85__xor__, /*nb_xor*/
   #else
   0, /*nb_xor*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_53__or__, /*nb_or*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_81__or__, /*nb_or*/
   #else
   0, /*nb_or*/
   #endif
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_3__int__, /*nb_int*/
-  #else
-  0, /*nb_int*/
-  #endif
+  __pyx_pw_4lxml_9objectify_11BoolElement_5__int__, /*nb_int*/
   #if PY_MAJOR_VERSION < 3
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_5__long__, /*nb_long*/
-  #else
-  0, /*nb_long*/
-  #endif
+  __pyx_pw_4lxml_9objectify_11BoolElement_5__int__, /*nb_long*/
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_7__float__, /*nb_float*/
-  #else
-  0, /*nb_float*/
-  #endif
+  __pyx_pw_4lxml_9objectify_11BoolElement_7__float__, /*nb_float*/
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   #if CYTHON_COMPILING_IN_PYPY
   __pyx_pw_4lxml_9objectify_13NumberElement_15__oct__, /*nb_oct*/
@@ -34071,9 +35790,13 @@ static PyNumberMethods __pyx_tp_as_number_BoolElement = {
   0, /*nb_inplace_and*/
   0, /*nb_inplace_xor*/
   0, /*nb_inplace_or*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_43__floordiv__, /*nb_floor_divide*/
+  #else
   0, /*nb_floor_divide*/
+  #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_31__truediv__, /*nb_true_divide*/
+  __pyx_pw_4lxml_9objectify_13NumberElement_39__truediv__, /*nb_true_divide*/
   #else
   0, /*nb_true_divide*/
   #endif
@@ -34112,13 +35835,13 @@ static PyTypeObject __pyx_type_4lxml_9objectify_BoolElement = {
   #if PY_MAJOR_VERSION >= 3
   0, /*tp_as_async*/
   #endif
-  __pyx_pw_4lxml_9objectify_11BoolElement_11__repr__, /*tp_repr*/
+  __pyx_pw_4lxml_9objectify_11BoolElement_15__repr__, /*tp_repr*/
   &__pyx_tp_as_number_BoolElement, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
-  __pyx_pw_4lxml_9objectify_11BoolElement_7__hash__, /*tp_hash*/
+  __pyx_pw_4lxml_9objectify_11BoolElement_11__hash__, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_4lxml_9objectify_11BoolElement_9__str__, /*tp_str*/
+  __pyx_pw_4lxml_9objectify_11BoolElement_13__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
@@ -34126,7 +35849,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_BoolElement = {
   "Boolean type base on string values: 'true' or 'false'.\n\n    Note that this inherits from IntElement to mimic the behaviour of\n    Python's bool type.\n    ", /*tp_doc*/
   __pyx_tp_traverse_4lxml_9objectify_NumberElement, /*tp_traverse*/
   __pyx_tp_clear_4lxml_9objectify_NumberElement, /*tp_clear*/
-  __pyx_pw_4lxml_9objectify_11BoolElement_5__richcmp__, /*tp_richcompare*/
+  __pyx_pw_4lxml_9objectify_11BoolElement_9__richcmp__, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   #if CYTHON_COMPILING_IN_PYPY
   __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
@@ -34959,9 +36682,24 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_u_NoneElement, __pyx_k_NoneElement, sizeof(__pyx_k_NoneElement), 0, 1, 0, 1},
   {&__pyx_n_s_NoneType, __pyx_k_NoneType, sizeof(__pyx_k_NoneType), 0, 0, 1, 1},
   {&__pyx_n_u_NoneType, __pyx_k_NoneType, sizeof(__pyx_k_NoneType), 0, 1, 0, 1},
+  {&__pyx_n_s_NotImplemented, __pyx_k_NotImplemented, sizeof(__pyx_k_NotImplemented), 0, 0, 1, 1},
   {&__pyx_n_s_NumberElement, __pyx_k_NumberElement, sizeof(__pyx_k_NumberElement), 0, 0, 1, 1},
   {&__pyx_n_u_NumberElement, __pyx_k_NumberElement, sizeof(__pyx_k_NumberElement), 0, 1, 0, 1},
   {&__pyx_n_s_NumberElement___complex, __pyx_k_NumberElement___complex, sizeof(__pyx_k_NumberElement___complex), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___radd, __pyx_k_NumberElement___radd, sizeof(__pyx_k_NumberElement___radd), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rand, __pyx_k_NumberElement___rand, sizeof(__pyx_k_NumberElement___rand), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rdiv, __pyx_k_NumberElement___rdiv, sizeof(__pyx_k_NumberElement___rdiv), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rdivmod, __pyx_k_NumberElement___rdivmod, sizeof(__pyx_k_NumberElement___rdivmod), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rfloordiv, __pyx_k_NumberElement___rfloordiv, sizeof(__pyx_k_NumberElement___rfloordiv), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rlshift, __pyx_k_NumberElement___rlshift, sizeof(__pyx_k_NumberElement___rlshift), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rmod, __pyx_k_NumberElement___rmod, sizeof(__pyx_k_NumberElement___rmod), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rmul, __pyx_k_NumberElement___rmul, sizeof(__pyx_k_NumberElement___rmul), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___ror, __pyx_k_NumberElement___ror, sizeof(__pyx_k_NumberElement___ror), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rpow, __pyx_k_NumberElement___rpow, sizeof(__pyx_k_NumberElement___rpow), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rrshift, __pyx_k_NumberElement___rrshift, sizeof(__pyx_k_NumberElement___rrshift), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rsub, __pyx_k_NumberElement___rsub, sizeof(__pyx_k_NumberElement___rsub), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rtruediv, __pyx_k_NumberElement___rtruediv, sizeof(__pyx_k_NumberElement___rtruediv), 0, 0, 1, 1},
+  {&__pyx_n_s_NumberElement___rxor, __pyx_k_NumberElement___rxor, sizeof(__pyx_k_NumberElement___rxor), 0, 0, 1, 1},
   {&__pyx_n_s_NumberElement__setValueParser, __pyx_k_NumberElement__setValueParser, sizeof(__pyx_k_NumberElement__setValueParser), 0, 0, 1, 1},
   {&__pyx_n_s_ObjectPath, __pyx_k_ObjectPath, sizeof(__pyx_k_ObjectPath), 0, 0, 1, 1},
   {&__pyx_n_u_ObjectPath, __pyx_k_ObjectPath, sizeof(__pyx_k_ObjectPath), 0, 1, 0, 1},
@@ -34990,6 +36728,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_StringElement, __pyx_k_StringElement, sizeof(__pyx_k_StringElement), 0, 0, 1, 1},
   {&__pyx_n_u_StringElement, __pyx_k_StringElement, sizeof(__pyx_k_StringElement), 0, 1, 0, 1},
   {&__pyx_n_s_StringElement___complex, __pyx_k_StringElement___complex, sizeof(__pyx_k_StringElement___complex), 0, 0, 1, 1},
+  {&__pyx_n_s_StringElement___radd, __pyx_k_StringElement___radd, sizeof(__pyx_k_StringElement___radd), 0, 0, 1, 1},
+  {&__pyx_n_s_StringElement___rmul, __pyx_k_StringElement___rmul, sizeof(__pyx_k_StringElement___rmul), 0, 0, 1, 1},
   {&__pyx_n_s_StringElement_strlen, __pyx_k_StringElement_strlen, sizeof(__pyx_k_StringElement_strlen), 0, 0, 1, 1},
   {&__pyx_n_s_SubElement, __pyx_k_SubElement, sizeof(__pyx_k_SubElement), 0, 0, 1, 1},
   {&__pyx_n_u_SubElement, __pyx_k_SubElement, sizeof(__pyx_k_SubElement), 0, 1, 0, 1},
@@ -35112,7 +36852,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_u_integer, __pyx_k_integer, sizeof(__pyx_k_integer), 0, 1, 0, 1},
   {&__pyx_kp_u_invalid_number_of_arguments_need, __pyx_k_invalid_number_of_arguments_need, sizeof(__pyx_k_invalid_number_of_arguments_need), 0, 1, 0, 0},
   {&__pyx_kp_u_invalid_path, __pyx_k_invalid_path, sizeof(__pyx_k_invalid_path), 0, 1, 0, 0},
-  {&__pyx_kp_u_invalid_types_for_operator, __pyx_k_invalid_types_for_operator, sizeof(__pyx_k_invalid_types_for_operator), 0, 1, 0, 0},
   {&__pyx_n_s_item, __pyx_k_item, sizeof(__pyx_k_item), 0, 0, 1, 1},
   {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1},
   {&__pyx_n_s_iterchildren, __pyx_k_iterchildren, sizeof(__pyx_k_iterchildren), 0, 0, 1, 1},
@@ -35130,6 +36869,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_u_makeparser, __pyx_k_makeparser, sizeof(__pyx_k_makeparser), 0, 1, 0, 1},
   {&__pyx_n_s_map, __pyx_k_map, sizeof(__pyx_k_map), 0, 0, 1, 1},
   {&__pyx_n_s_match, __pyx_k_match, sizeof(__pyx_k_match), 0, 0, 1, 1},
+  {&__pyx_n_s_modulo, __pyx_k_modulo, sizeof(__pyx_k_modulo), 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_namespace, __pyx_k_namespace, sizeof(__pyx_k_namespace), 0, 0, 1, 1},
@@ -35149,6 +36889,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_oct, __pyx_k_oct, sizeof(__pyx_k_oct), 0, 0, 1, 1},
   {&__pyx_kp_u_of, __pyx_k_of, sizeof(__pyx_k_of), 0, 1, 0, 0},
   {&__pyx_n_s_on, __pyx_k_on, sizeof(__pyx_k_on), 0, 0, 1, 1},
+  {&__pyx_n_s_other, __pyx_k_other, sizeof(__pyx_k_other), 0, 0, 1, 1},
   {&__pyx_n_s_parse, __pyx_k_parse, sizeof(__pyx_k_parse), 0, 0, 1, 1},
   {&__pyx_n_u_parse, __pyx_k_parse, sizeof(__pyx_k_parse), 0, 1, 0, 1},
   {&__pyx_n_s_parseBool, __pyx_k_parseBool, sizeof(__pyx_k_parseBool), 0, 0, 1, 1},
@@ -35172,6 +36913,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_pyval, __pyx_k_pyval, sizeof(__pyx_k_pyval), 0, 0, 1, 1},
   {&__pyx_n_u_pyval, __pyx_k_pyval, sizeof(__pyx_k_pyval), 0, 1, 0, 1},
   {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+  {&__pyx_n_s_radd, __pyx_k_radd, sizeof(__pyx_k_radd), 0, 0, 1, 1},
+  {&__pyx_n_s_rand, __pyx_k_rand, sizeof(__pyx_k_rand), 0, 0, 1, 1},
+  {&__pyx_n_s_rdiv, __pyx_k_rdiv, sizeof(__pyx_k_rdiv), 0, 0, 1, 1},
+  {&__pyx_n_s_rdivmod, __pyx_k_rdivmod, sizeof(__pyx_k_rdivmod), 0, 0, 1, 1},
   {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1},
   {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
   {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1},
@@ -35180,8 +36925,18 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_replace, __pyx_k_replace, sizeof(__pyx_k_replace), 0, 0, 1, 1},
   {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1},
   {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1},
+  {&__pyx_n_s_rfloordiv, __pyx_k_rfloordiv, sizeof(__pyx_k_rfloordiv), 0, 0, 1, 1},
+  {&__pyx_n_s_rlshift, __pyx_k_rlshift, sizeof(__pyx_k_rlshift), 0, 0, 1, 1},
+  {&__pyx_n_s_rmod, __pyx_k_rmod, sizeof(__pyx_k_rmod), 0, 0, 1, 1},
+  {&__pyx_n_s_rmul, __pyx_k_rmul, sizeof(__pyx_k_rmul), 0, 0, 1, 1},
   {&__pyx_n_s_root, __pyx_k_root, sizeof(__pyx_k_root), 0, 0, 1, 1},
   {&__pyx_kp_u_root_element_does_not_match_need, __pyx_k_root_element_does_not_match_need, sizeof(__pyx_k_root_element_does_not_match_need), 0, 1, 0, 0},
+  {&__pyx_n_s_ror, __pyx_k_ror, sizeof(__pyx_k_ror), 0, 0, 1, 1},
+  {&__pyx_n_s_rpow, __pyx_k_rpow, sizeof(__pyx_k_rpow), 0, 0, 1, 1},
+  {&__pyx_n_s_rrshift, __pyx_k_rrshift, sizeof(__pyx_k_rrshift), 0, 0, 1, 1},
+  {&__pyx_n_s_rsub, __pyx_k_rsub, sizeof(__pyx_k_rsub), 0, 0, 1, 1},
+  {&__pyx_n_s_rtruediv, __pyx_k_rtruediv, sizeof(__pyx_k_rtruediv), 0, 0, 1, 1},
+  {&__pyx_n_s_rxor, __pyx_k_rxor, sizeof(__pyx_k_rxor), 0, 0, 1, 1},
   {&__pyx_kp_u_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 1, 0, 0},
   {&__pyx_kp_u_s_2, __pyx_k_s_2, sizeof(__pyx_k_s_2), 0, 1, 0, 0},
   {&__pyx_n_s_s_3, __pyx_k_s_3, sizeof(__pyx_k_s_3), 0, 0, 1, 1},
@@ -35258,10 +37013,11 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) __PYX_ERR(1, 10, __pyx_L1_error)
   __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 299, __pyx_L1_error)
   __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 450, __pyx_L1_error)
-  __pyx_builtin_oct = __Pyx_GetBuiltinName(__pyx_n_s_oct); if (!__pyx_builtin_oct) __PYX_ERR(0, 644, __pyx_L1_error)
-  __pyx_builtin_hex = __Pyx_GetBuiltinName(__pyx_n_s_hex); if (!__pyx_builtin_hex) __PYX_ERR(0, 647, __pyx_L1_error)
-  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 973, __pyx_L1_error)
-  __pyx_builtin_map = __Pyx_GetBuiltinName(__pyx_n_s_map); if (!__pyx_builtin_map) __PYX_ERR(0, 1011, __pyx_L1_error)
+  __pyx_builtin_oct = __Pyx_GetBuiltinName(__pyx_n_s_oct); if (!__pyx_builtin_oct) __PYX_ERR(0, 646, __pyx_L1_error)
+  __pyx_builtin_hex = __Pyx_GetBuiltinName(__pyx_n_s_hex); if (!__pyx_builtin_hex) __PYX_ERR(0, 649, __pyx_L1_error)
+  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(0, 830, __pyx_L1_error)
+  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 1048, __pyx_L1_error)
+  __pyx_builtin_map = __Pyx_GetBuiltinName(__pyx_n_s_map); if (!__pyx_builtin_map) __PYX_ERR(0, 1086, __pyx_L1_error)
   __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 169, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
@@ -35283,69 +37039,69 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_slice__3);
   __Pyx_GIVEREF(__pyx_slice__3);
 
-  /* "lxml/objectify.pyx":1033
+  /* "lxml/objectify.pyx":1108
  * cdef _registerPyTypes():
  *     pytype = PyType(u'int', int, IntElement)
  *     pytype.xmlSchemaTypes = (u"integer", u"int", u"short", u"byte", u"unsignedShort",             # <<<<<<<<<<<<<<
  *                              u"unsignedByte", u"nonPositiveInteger",
  *                              u"negativeInteger", u"long", u"nonNegativeInteger",
  */
-  __pyx_tuple__5 = PyTuple_Pack(13, __pyx_n_u_integer, __pyx_n_u_int, __pyx_n_u_short, __pyx_n_u_byte, __pyx_n_u_unsignedShort, __pyx_n_u_unsignedByte, __pyx_n_u_nonPositiveInteger, __pyx_n_u_negativeInteger, __pyx_n_u_long, __pyx_n_u_nonNegativeInteger, __pyx_n_u_unsignedLong, __pyx_n_u_unsignedInt, __pyx_n_u_positiveInteger); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 1033, __pyx_L1_error)
+  __pyx_tuple__5 = PyTuple_Pack(13, __pyx_n_u_integer, __pyx_n_u_int, __pyx_n_u_short, __pyx_n_u_byte, __pyx_n_u_unsignedShort, __pyx_n_u_unsignedByte, __pyx_n_u_nonPositiveInteger, __pyx_n_u_negativeInteger, __pyx_n_u_long, __pyx_n_u_nonNegativeInteger, __pyx_n_u_unsignedLong, __pyx_n_u_unsignedInt, __pyx_n_u_positiveInteger); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 1108, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__5);
   __Pyx_GIVEREF(__pyx_tuple__5);
 
-  /* "lxml/objectify.pyx":1044
+  /* "lxml/objectify.pyx":1119
  * 
  *     pytype = PyType(u'float', float, FloatElement, repr)
  *     pytype.xmlSchemaTypes = (u"double", u"float")             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  __pyx_tuple__6 = PyTuple_Pack(2, __pyx_n_u_double, __pyx_n_u_float); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 1044, __pyx_L1_error)
+  __pyx_tuple__6 = PyTuple_Pack(2, __pyx_n_u_double, __pyx_n_u_float); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 1119, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "lxml/objectify.pyx":1048
+  /* "lxml/objectify.pyx":1123
  * 
  *     pytype = PyType(u'bool', __checkBool, BoolElement, __lower_bool)
  *     pytype.xmlSchemaTypes = (u"boolean",)             # <<<<<<<<<<<<<<
  *     pytype.register()
  * 
  */
-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_n_u_boolean); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 1048, __pyx_L1_error)
+  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_n_u_boolean); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 1123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__7);
   __Pyx_GIVEREF(__pyx_tuple__7);
 
-  /* "lxml/objectify.pyx":1052
+  /* "lxml/objectify.pyx":1127
  * 
  *     pytype = PyType(u'str', None, StringElement)
  *     pytype.xmlSchemaTypes = (u"string", u"normalizedString", u"token", u"language",             # <<<<<<<<<<<<<<
  *                              u"Name", u"NCName", u"ID", u"IDREF", u"ENTITY",
  *                              u"NMTOKEN", )
  */
-  __pyx_tuple__8 = PyTuple_Pack(10, __pyx_n_u_string, __pyx_n_u_normalizedString, __pyx_n_u_token, __pyx_n_u_language, __pyx_n_u_Name, __pyx_n_u_NCName, __pyx_n_u_ID, __pyx_n_u_IDREF, __pyx_n_u_ENTITY, __pyx_n_u_NMTOKEN); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 1052, __pyx_L1_error)
+  __pyx_tuple__8 = PyTuple_Pack(10, __pyx_n_u_string, __pyx_n_u_normalizedString, __pyx_n_u_token, __pyx_n_u_language, __pyx_n_u_Name, __pyx_n_u_NCName, __pyx_n_u_ID, __pyx_n_u_IDREF, __pyx_n_u_ENTITY, __pyx_n_u_NMTOKEN); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 1127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__8);
   __Pyx_GIVEREF(__pyx_tuple__8);
 
-  /* "lxml/objectify.pyx":1349
+  /* "lxml/objectify.pyx":1424
  *         result += _dump(child, indent)
  *     if indent == 1:
  *         return result[:-1] # strip last '\n'             # <<<<<<<<<<<<<<
  *     else:
  *         return result
  */
-  __pyx_slice__16 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(0, 1349, __pyx_L1_error)
+  __pyx_slice__16 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(0, 1424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__16);
   __Pyx_GIVEREF(__pyx_slice__16);
 
-  /* "lxml/objectify.pyx":1430
+  /* "lxml/objectify.pyx":1505
  *         schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is None and u':' in value:
  *             prefix, value = value.split(u':', 1)             # <<<<<<<<<<<<<<
  *             schema_type = <PyType>_SCHEMA_TYPE_DICT.get(value)
  *         if schema_type is not None:
  */
-  __pyx_tuple__18 = PyTuple_Pack(2, __pyx_kp_u__17, __pyx_int_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 1430, __pyx_L1_error)
+  __pyx_tuple__18 = PyTuple_Pack(2, __pyx_kp_u__17, __pyx_int_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 1505, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__18);
   __Pyx_GIVEREF(__pyx_tuple__18);
 
@@ -35458,386 +37214,578 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__38);
   __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_setText, 606, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 606, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":614
- * cdef class NumberElement(ObjectifiedDataElement):
+  /* "lxml/objectify.pyx":616
  *     cdef object _parse_value
+ * 
  *     def _setValueParser(self, function):             # <<<<<<<<<<<<<<
  *         u"""Set the function that parses the Python value from a string.
  * 
  */
-  __pyx_tuple__40 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_function); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 614, __pyx_L1_error)
+  __pyx_tuple__40 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_function); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__40);
   __Pyx_GIVEREF(__pyx_tuple__40);
-  __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_setValueParser, 614, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 614, __pyx_L1_error)
+  __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_setValueParser, 616, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 616, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":634
+  /* "lxml/objectify.pyx":636
  *         return float(_parseNumber(self))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
  *         return complex(_parseNumber(self))
  * 
  */
-  __pyx_tuple__42 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 634, __pyx_L1_error)
+  __pyx_tuple__42 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 636, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__42);
   __Pyx_GIVEREF(__pyx_tuple__42);
-  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_complex, 634, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 634, __pyx_L1_error)
+  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_complex, 636, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 636, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":660
+ *         return _numericValueOf(self) + _numericValueOf(other)
+ * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) + _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__44 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 660, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__44);
+  __Pyx_GIVEREF(__pyx_tuple__44);
+  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_radd, 660, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 660, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":666
+ *         return _numericValueOf(self) - _numericValueOf(other)
+ * 
+ *     def __rsub__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) - _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__46 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 666, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__46);
+  __Pyx_GIVEREF(__pyx_tuple__46);
+  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rsub, 666, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 666, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":672
+ *         return _numericValueOf(self) * _numericValueOf(other)
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__48 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 672, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__48);
+  __Pyx_GIVEREF(__pyx_tuple__48);
+  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rmul, 672, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 672, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":678
+ *         return _numericValueOf(self) / _numericValueOf(other)
+ * 
+ *     def __rdiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__50 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 678, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__50);
+  __Pyx_GIVEREF(__pyx_tuple__50);
+  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rdiv, 678, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 678, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":684
+ *         return _numericValueOf(self) / _numericValueOf(other)
+ * 
+ *     def __rtruediv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__52 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 684, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__52);
+  __Pyx_GIVEREF(__pyx_tuple__52);
+  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rtruediv, 684, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 684, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":690
+ *         return _numericValueOf(self) // _numericValueOf(other)
+ * 
+ *     def __rfloordiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) // _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__54 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 690, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__54);
+  __Pyx_GIVEREF(__pyx_tuple__54);
+  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rfloordiv, 690, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 690, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":696
+ *         return _numericValueOf(self) % _numericValueOf(other)
+ * 
+ *     def __rmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) % _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__56 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 696, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__56);
+  __Pyx_GIVEREF(__pyx_tuple__56);
+  __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rmod, 696, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(0, 696, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":702
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))
+ * 
+ *     def __rdivmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))
+ * 
+ */
+  __pyx_tuple__58 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 702, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__58);
+  __Pyx_GIVEREF(__pyx_tuple__58);
+  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rdivmod, 702, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 702, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":711
+ *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
+ * 
+ *     def __rpow__(self, other, modulo):             # <<<<<<<<<<<<<<
+ *         if modulo is None:
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ */
+  __pyx_tuple__60 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_other, __pyx_n_s_modulo); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 711, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__60);
+  __Pyx_GIVEREF(__pyx_tuple__60);
+  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rpow, 711, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(0, 711, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":735
+ *         return _numericValueOf(self) << _numericValueOf(other)
+ * 
+ *     def __rlshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) << _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__62 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 735, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__62);
+  __Pyx_GIVEREF(__pyx_tuple__62);
+  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rlshift, 735, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 735, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":741
+ *         return _numericValueOf(self) >> _numericValueOf(other)
+ * 
+ *     def __rrshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) >> _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__64 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 741, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__64);
+  __Pyx_GIVEREF(__pyx_tuple__64);
+  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rrshift, 741, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 741, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":747
+ *         return _numericValueOf(self) & _numericValueOf(other)
+ * 
+ *     def __rand__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) & _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__66 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 747, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__66);
+  __Pyx_GIVEREF(__pyx_tuple__66);
+  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rand, 747, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 747, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":753
+ *         return _numericValueOf(self) | _numericValueOf(other)
+ * 
+ *     def __ror__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) | _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__68 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 753, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__68);
+  __Pyx_GIVEREF(__pyx_tuple__68);
+  __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_ror, 753, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(0, 753, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":759
+ *         return _numericValueOf(self) ^ _numericValueOf(other)
+ * 
+ *     def __rxor__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) ^ _numericValueOf(self)
+ * 
+ */
+  __pyx_tuple__70 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 759, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__70);
+  __Pyx_GIVEREF(__pyx_tuple__70);
+  __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rxor, 759, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(0, 759, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":710
+  /* "lxml/objectify.pyx":764
  * 
  * cdef class IntElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = int
  * 
  */
-  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 710, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__44);
-  __Pyx_GIVEREF(__pyx_tuple__44);
-  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 710, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 710, __pyx_L1_error)
+  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 764, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__72);
+  __Pyx_GIVEREF(__pyx_tuple__72);
+  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 764, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(0, 764, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":717
+  /* "lxml/objectify.pyx":772
  * 
  * cdef class LongElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = long
  * 
  */
-  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 717, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__46);
-  __Pyx_GIVEREF(__pyx_tuple__46);
-  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 717, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 717, __pyx_L1_error)
+  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 772, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__74);
+  __Pyx_GIVEREF(__pyx_tuple__74);
+  __pyx_codeobj__75 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 772, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) __PYX_ERR(0, 772, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":724
+  /* "lxml/objectify.pyx":780
  * 
  * cdef class FloatElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = float
  * 
  */
-  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 724, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__48);
-  __Pyx_GIVEREF(__pyx_tuple__48);
-  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 724, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 724, __pyx_L1_error)
+  __pyx_tuple__76 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(0, 780, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__76);
+  __Pyx_GIVEREF(__pyx_tuple__76);
+  __pyx_codeobj__77 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 780, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__77)) __PYX_ERR(0, 780, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":741
+  /* "lxml/objectify.pyx":798
  *         return repr(textOf(self._c_node) or u'')
  * 
  *     def strlen(self):             # <<<<<<<<<<<<<<
  *         text = textOf(self._c_node)
  *         if text is None:
  */
-  __pyx_tuple__50 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_text); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 741, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__50);
-  __Pyx_GIVEREF(__pyx_tuple__50);
-  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_strlen, 741, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 741, __pyx_L1_error)
+  __pyx_tuple__78 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_text); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__78);
+  __Pyx_GIVEREF(__pyx_tuple__78);
+  __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_strlen, 798, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(0, 798, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":819
+ *         return text + other
+ * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
+ *         text  = _strValueOf(self)
+ *         other = _strValueOf(other)
+ */
+  __pyx_tuple__80 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_other, __pyx_n_s_text); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(0, 819, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__80);
+  __Pyx_GIVEREF(__pyx_tuple__80);
+  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_radd, 819, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(0, 819, __pyx_L1_error)
+
+  /* "lxml/objectify.pyx":832
+ *             return NotImplemented
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
+ * 
+ */
+  __pyx_tuple__82 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(0, 832, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__82);
+  __Pyx_GIVEREF(__pyx_tuple__82);
+  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_rmul, 832, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(0, 832, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":786
+  /* "lxml/objectify.pyx":847
  *         return float(textOf(self._c_node))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
  *         return complex(textOf(self._c_node))
  * 
  */
-  __pyx_tuple__52 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 786, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__52);
-  __Pyx_GIVEREF(__pyx_tuple__52);
-  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_complex, 786, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_tuple__84 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(0, 847, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__84);
+  __Pyx_GIVEREF(__pyx_tuple__84);
+  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_complex, 847, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(0, 847, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":821
+  /* "lxml/objectify.pyx":883
  *     Python's bool type.
  *     """
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = __parseBool
  * 
  */
-  __pyx_tuple__54 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 821, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__54);
-  __Pyx_GIVEREF(__pyx_tuple__54);
-  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 821, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 821, __pyx_L1_error)
+  __pyx_tuple__86 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 883, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__86);
+  __Pyx_GIVEREF(__pyx_tuple__86);
+  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_init, 883, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(0, 883, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":843
- *         return __parseBool(textOf(self._c_node))
+  /* "lxml/objectify.pyx":912
+ * 
  * 
  * def __checkBool(s):             # <<<<<<<<<<<<<<
  *     cdef int value = -1
  *     if s is not None:
  */
-  __pyx_tuple__56 = PyTuple_Pack(2, __pyx_n_s_s_3, __pyx_n_s_value); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 843, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__56);
-  __Pyx_GIVEREF(__pyx_tuple__56);
-  __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_checkBool, 843, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(0, 843, __pyx_L1_error)
+  __pyx_tuple__88 = PyTuple_Pack(2, __pyx_n_s_s_3, __pyx_n_s_value); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(0, 912, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__88);
+  __Pyx_GIVEREF(__pyx_tuple__88);
+  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_checkBool, 912, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(0, 912, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":850
- *         raise ValueError
+  /* "lxml/objectify.pyx":920
+ * 
  * 
  * cpdef bint __parseBool(s) except -1:             # <<<<<<<<<<<<<<
  *     cdef int value
  *     if s is None:
  */
-  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_n_s_s_3); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 850, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__58);
-  __Pyx_GIVEREF(__pyx_tuple__58);
-  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_parseBool, 850, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_tuple__90 = PyTuple_Pack(1, __pyx_n_s_s_3); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(0, 920, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__90);
+  __Pyx_GIVEREF(__pyx_tuple__90);
+  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_parseBool, 920, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(0, 920, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":948
+  /* "lxml/objectify.pyx":1023
  *         return "PyType(%s, %s)" % (self.name, self._type.__name__)
  * 
  *     def register(self, before=None, after=None):             # <<<<<<<<<<<<<<
  *         u"""register(self, before=None, after=None)
  * 
  */
-  __pyx_tuple__60 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_before, __pyx_n_s_after, __pyx_n_s_item, __pyx_n_s_entry, __pyx_n_s_first_pos, __pyx_n_s_last_pos, __pyx_n_s_i, __pyx_n_s_check, __pyx_n_s_pytype, __pyx_n_s_xs_type); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 948, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__60);
-  __Pyx_GIVEREF(__pyx_tuple__60);
-  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_register, 948, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(0, 948, __pyx_L1_error)
+  __pyx_tuple__92 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_before, __pyx_n_s_after, __pyx_n_s_item, __pyx_n_s_entry, __pyx_n_s_first_pos, __pyx_n_s_last_pos, __pyx_n_s_i, __pyx_n_s_check, __pyx_n_s_pytype, __pyx_n_s_xs_type); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 1023, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__92);
+  __Pyx_GIVEREF(__pyx_tuple__92);
+  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_register, 1023, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(0, 1023, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":989
+  /* "lxml/objectify.pyx":1064
  *             _SCHEMA_TYPE_DICT[xs_type] = self
  * 
  *     def unregister(self):             # <<<<<<<<<<<<<<
  *         u"unregister(self)"
  *         if _PYTYPE_DICT.get(self.name) is self:
  */
-  __pyx_tuple__62 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_xs_type, __pyx_n_s_pytype); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 989, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__62);
-  __Pyx_GIVEREF(__pyx_tuple__62);
-  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_unregister, 989, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 989, __pyx_L1_error)
+  __pyx_tuple__94 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_xs_type, __pyx_n_s_pytype); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 1064, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__94);
+  __Pyx_GIVEREF(__pyx_tuple__94);
+  __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_unregister, 1064, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(0, 1064, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1018
+  /* "lxml/objectify.pyx":1093
  * cdef list _TYPE_CHECKS = []
  * 
  * def __lower_bool(b):             # <<<<<<<<<<<<<<
  *     return u"true" if b else u"false"
  * 
  */
-  __pyx_tuple__64 = PyTuple_Pack(1, __pyx_n_s_b); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 1018, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__64);
-  __Pyx_GIVEREF(__pyx_tuple__64);
-  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_lower_bool, 1018, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 1018, __pyx_L1_error)
+  __pyx_tuple__96 = PyTuple_Pack(1, __pyx_n_s_b); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(0, 1093, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__96);
+  __Pyx_GIVEREF(__pyx_tuple__96);
+  __pyx_codeobj__97 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_lower_bool, 1093, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__97)) __PYX_ERR(0, 1093, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1024
+  /* "lxml/objectify.pyx":1099
  *     return u"str" if python._isString(obj) else _typename(obj)
  * 
  * def pytypename(obj):             # <<<<<<<<<<<<<<
  *     u"""pytypename(obj)
  * 
  */
-  __pyx_tuple__66 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 1024, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__66);
-  __Pyx_GIVEREF(__pyx_tuple__66);
-  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_pytypename, 1024, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 1024, __pyx_L1_error)
+  __pyx_tuple__98 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(0, 1099, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__98);
+  __Pyx_GIVEREF(__pyx_tuple__98);
+  __pyx_codeobj__99 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_pytypename, 1099, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__99)) __PYX_ERR(0, 1099, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1070
+  /* "lxml/objectify.pyx":1145
  * _registerPyTypes()
  * 
  * def getRegisteredTypes():             # <<<<<<<<<<<<<<
  *     u"""getRegisteredTypes()
  * 
  */
-  __pyx_tuple__68 = PyTuple_Pack(5, __pyx_n_s_types, __pyx_n_s_known, __pyx_n_s_check, __pyx_n_s_pytype, __pyx_n_s_name); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 1070, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__68);
-  __Pyx_GIVEREF(__pyx_tuple__68);
-  __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_getRegisteredTypes, 1070, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(0, 1070, __pyx_L1_error)
+  __pyx_tuple__100 = PyTuple_Pack(5, __pyx_n_s_types, __pyx_n_s_known, __pyx_n_s_check, __pyx_n_s_pytype, __pyx_n_s_name); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(0, 1145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__100);
+  __Pyx_GIVEREF(__pyx_tuple__100);
+  __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__100, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_getRegisteredTypes, 1145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) __PYX_ERR(0, 1145, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1305
+  /* "lxml/objectify.pyx":1380
  * cdef bint __RECURSIVE_STR = 0 # default: off
  * 
  * def enable_recursive_str(on=True):             # <<<<<<<<<<<<<<
  *     u"""enable_recursive_str(on=True)
  * 
  */
-  __pyx_tuple__70 = PyTuple_Pack(1, __pyx_n_s_on); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 1305, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__70);
-  __Pyx_GIVEREF(__pyx_tuple__70);
-  __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_enable_recursive_str, 1305, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(0, 1305, __pyx_L1_error)
-  __pyx_tuple__72 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 1305, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__72);
-  __Pyx_GIVEREF(__pyx_tuple__72);
+  __pyx_tuple__102 = PyTuple_Pack(1, __pyx_n_s_on); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(0, 1380, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__102);
+  __Pyx_GIVEREF(__pyx_tuple__102);
+  __pyx_codeobj__103 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__102, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_enable_recursive_str, 1380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__103)) __PYX_ERR(0, 1380, __pyx_L1_error)
+  __pyx_tuple__104 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(0, 1380, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__104);
+  __Pyx_GIVEREF(__pyx_tuple__104);
 
-  /* "lxml/objectify.pyx":1314
+  /* "lxml/objectify.pyx":1389
  *     __RECURSIVE_STR = on
  * 
  * def dump(_Element element not None):             # <<<<<<<<<<<<<<
  *     u"""dump(_Element element not None)
  * 
  */
-  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_n_s_element); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 1314, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__73);
-  __Pyx_GIVEREF(__pyx_tuple__73);
-  __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_dump, 1314, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(0, 1314, __pyx_L1_error)
+  __pyx_tuple__105 = PyTuple_Pack(1, __pyx_n_s_element); if (unlikely(!__pyx_tuple__105)) __PYX_ERR(0, 1389, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__105);
+  __Pyx_GIVEREF(__pyx_tuple__105);
+  __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__105, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_dump, 1389, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) __PYX_ERR(0, 1389, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1357
+  /* "lxml/objectify.pyx":1432
  * # Pickle support for objectified ElementTree
  * 
  * def __unpickleElementTree(data):             # <<<<<<<<<<<<<<
  *     return etree.ElementTree(fromstring(data))
  * 
  */
-  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_n_s_data); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 1357, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__75);
-  __Pyx_GIVEREF(__pyx_tuple__75);
-  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 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_src_lxml_objectify_pyx, __pyx_n_s_unpickleElementTree, 1357, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 1357, __pyx_L1_error)
+  __pyx_tuple__107 = PyTuple_Pack(1, __pyx_n_s_data); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(0, 1432, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__107);
+  __Pyx_GIVEREF(__pyx_tuple__107);
+  __pyx_codeobj__108 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_unpickleElementTree, 1432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__108)) __PYX_ERR(0, 1432, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1368
+  /* "lxml/objectify.pyx":1443
  *                    elementTreeReduceFunction, __unpickleElementTree)
  * 
  * def pickleReduceElementTree(obj):             # <<<<<<<<<<<<<<
  *     return __unpickleElementTree, (etree.tostring(obj),)
  * 
  */
-  __pyx_tuple__77 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 1368, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__77);
-  __Pyx_GIVEREF(__pyx_tuple__77);
-  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 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_src_lxml_objectify_pyx, __pyx_n_s_pickleReduceElementTree, 1368, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(0, 1368, __pyx_L1_error)
+  __pyx_tuple__109 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(0, 1443, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__109);
+  __Pyx_GIVEREF(__pyx_tuple__109);
+  __pyx_codeobj__110 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_pickleReduceElementTree, 1443, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__110)) __PYX_ERR(0, 1443, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1462
+  /* "lxml/objectify.pyx":1537
  *     return None
  * 
  * def pyannotate(element_or_tree, *, ignore_old=False, ignore_xsi=False,             # <<<<<<<<<<<<<<
  *              empty_pytype=None):
  *     u"""pyannotate(element_or_tree, ignore_old=False, ignore_xsi=False, empty_pytype=None)
  */
-  __pyx_tuple__79 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_xsi, __pyx_n_s_empty_pytype, __pyx_n_s_element); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(0, 1462, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__79);
-  __Pyx_GIVEREF(__pyx_tuple__79);
-  __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(1, 3, 5, 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_src_lxml_objectify_pyx, __pyx_n_s_pyannotate, 1462, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(0, 1462, __pyx_L1_error)
+  __pyx_tuple__111 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_xsi, __pyx_n_s_empty_pytype, __pyx_n_s_element); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(0, 1537, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__111);
+  __Pyx_GIVEREF(__pyx_tuple__111);
+  __pyx_codeobj__112 = (PyObject*)__Pyx_PyCode_New(1, 3, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_pyannotate, 1537, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__112)) __PYX_ERR(0, 1537, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1485
+  /* "lxml/objectify.pyx":1560
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,             # <<<<<<<<<<<<<<
  *                 empty_type=None):
  *     u"""xsiannotate(element_or_tree, ignore_old=False, ignore_pytype=False, empty_type=None)
  */
-  __pyx_tuple__81 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_pytype, __pyx_n_s_empty_type, __pyx_n_s_element); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(0, 1485, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__81);
-  __Pyx_GIVEREF(__pyx_tuple__81);
-  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(1, 3, 5, 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_src_lxml_objectify_pyx, __pyx_n_s_xsiannotate, 1485, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(0, 1485, __pyx_L1_error)
+  __pyx_tuple__113 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_pytype, __pyx_n_s_empty_type, __pyx_n_s_element); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(0, 1560, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__113);
+  __Pyx_GIVEREF(__pyx_tuple__113);
+  __pyx_codeobj__114 = (PyObject*)__Pyx_PyCode_New(1, 3, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_xsiannotate, 1560, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__114)) __PYX_ERR(0, 1560, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1513
+  /* "lxml/objectify.pyx":1588
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,             # <<<<<<<<<<<<<<
  *              empty_pytype=None, empty_type=None, annotate_xsi=0,
  *              annotate_pytype=1):
  */
-  __pyx_tuple__83 = PyTuple_Pack(8, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_xsi, __pyx_n_s_empty_pytype, __pyx_n_s_empty_type, __pyx_n_s_annotate_xsi, __pyx_n_s_annotate_pytype, __pyx_n_s_element); if (unlikely(!__pyx_tuple__83)) __PYX_ERR(0, 1513, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__83);
-  __Pyx_GIVEREF(__pyx_tuple__83);
-  __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(1, 6, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_annotate, 1513, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) __PYX_ERR(0, 1513, __pyx_L1_error)
+  __pyx_tuple__115 = PyTuple_Pack(8, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_xsi, __pyx_n_s_empty_pytype, __pyx_n_s_empty_type, __pyx_n_s_annotate_xsi, __pyx_n_s_annotate_pytype, __pyx_n_s_element); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(0, 1588, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__115);
+  __Pyx_GIVEREF(__pyx_tuple__115);
+  __pyx_codeobj__116 = (PyObject*)__Pyx_PyCode_New(1, 6, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__115, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_annotate, 1588, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__116)) __PYX_ERR(0, 1588, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1709
+  /* "lxml/objectify.pyx":1784
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,             # <<<<<<<<<<<<<<
  *                bint xsi_nil=False, bint cleanup_namespaces=False):
  *     u"""deannotate(element_or_tree, pytype=True, xsi=True, xsi_nil=False, cleanup_namespaces=False)
  */
-  __pyx_tuple__85 = PyTuple_Pack(6, __pyx_n_s_element_or_tree, __pyx_n_s_pytype, __pyx_n_s_xsi_2, __pyx_n_s_xsi_nil, __pyx_n_s_cleanup_namespaces, __pyx_n_s_attribute_names); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(0, 1709, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__85);
-  __Pyx_GIVEREF(__pyx_tuple__85);
-  __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(1, 4, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_deannotate, 1709, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) __PYX_ERR(0, 1709, __pyx_L1_error)
+  __pyx_tuple__117 = PyTuple_Pack(6, __pyx_n_s_element_or_tree, __pyx_n_s_pytype, __pyx_n_s_xsi_2, __pyx_n_s_xsi_nil, __pyx_n_s_cleanup_namespaces, __pyx_n_s_attribute_names); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(0, 1784, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__117);
+  __Pyx_GIVEREF(__pyx_tuple__117);
+  __pyx_codeobj__118 = (PyObject*)__Pyx_PyCode_New(1, 4, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__117, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_deannotate, 1784, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__118)) __PYX_ERR(0, 1784, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1749
+  /* "lxml/objectify.pyx":1824
  * objectify_parser = __DEFAULT_PARSER
  * 
  * def set_default_parser(new_parser = None):             # <<<<<<<<<<<<<<
  *     u"""set_default_parser(new_parser = None)
  * 
  */
-  __pyx_tuple__87 = PyTuple_Pack(1, __pyx_n_s_new_parser); if (unlikely(!__pyx_tuple__87)) __PYX_ERR(0, 1749, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__87);
-  __Pyx_GIVEREF(__pyx_tuple__87);
-  __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__87, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_set_default_parser, 1749, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) __PYX_ERR(0, 1749, __pyx_L1_error)
-  __pyx_tuple__89 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__89)) __PYX_ERR(0, 1749, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__89);
-  __Pyx_GIVEREF(__pyx_tuple__89);
+  __pyx_tuple__119 = PyTuple_Pack(1, __pyx_n_s_new_parser); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__119);
+  __Pyx_GIVEREF(__pyx_tuple__119);
+  __pyx_codeobj__120 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__119, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_set_default_parser, 1824, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__120)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  __pyx_tuple__121 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__121)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__121);
+  __Pyx_GIVEREF(__pyx_tuple__121);
 
-  /* "lxml/objectify.pyx":1767
+  /* "lxml/objectify.pyx":1842
  *         raise TypeError, u"parser must inherit from lxml.etree.XMLParser"
  * 
  * def makeparser(**kw):             # <<<<<<<<<<<<<<
  *     u"""makeparser(remove_blank_text=True, **kw)
  * 
  */
-  __pyx_tuple__90 = PyTuple_Pack(2, __pyx_n_s_kw, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(0, 1767, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__90);
-  __Pyx_GIVEREF(__pyx_tuple__90);
-  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_makeparser, 1767, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(0, 1767, __pyx_L1_error)
+  __pyx_tuple__122 = PyTuple_Pack(2, __pyx_n_s_kw, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 1842, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__122);
+  __Pyx_GIVEREF(__pyx_tuple__122);
+  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_makeparser, 1842, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) __PYX_ERR(0, 1842, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1794
+  /* "lxml/objectify.pyx":1869
  * SubElement = etree.SubElement
  * 
  * def fromstring(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""fromstring(xml, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__92 = PyTuple_Pack(3, __pyx_n_s_xml, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 1794, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__92);
-  __Pyx_GIVEREF(__pyx_tuple__92);
-  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_fromstring, 1794, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(0, 1794, __pyx_L1_error)
-  __pyx_tuple__94 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 1794, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__94);
-  __Pyx_GIVEREF(__pyx_tuple__94);
+  __pyx_tuple__124 = PyTuple_Pack(3, __pyx_n_s_xml, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__124);
+  __Pyx_GIVEREF(__pyx_tuple__124);
+  __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_fromstring, 1869, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __pyx_tuple__126 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__126);
+  __Pyx_GIVEREF(__pyx_tuple__126);
 
-  /* "lxml/objectify.pyx":1810
+  /* "lxml/objectify.pyx":1885
  *     return _fromstring(xml, parser, base_url=base_url)
  * 
  * def XML(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""XML(xml, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__95 = PyTuple_Pack(3, __pyx_n_s_xml, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(0, 1810, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__95);
-  __Pyx_GIVEREF(__pyx_tuple__95);
-  __pyx_codeobj__96 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_XML, 1810, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__96)) __PYX_ERR(0, 1810, __pyx_L1_error)
-  __pyx_tuple__97 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(0, 1810, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__97);
-  __Pyx_GIVEREF(__pyx_tuple__97);
+  __pyx_tuple__127 = PyTuple_Pack(3, __pyx_n_s_xml, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__127)) __PYX_ERR(0, 1885, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__127);
+  __Pyx_GIVEREF(__pyx_tuple__127);
+  __pyx_codeobj__128 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_XML, 1885, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__128)) __PYX_ERR(0, 1885, __pyx_L1_error)
+  __pyx_tuple__129 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(0, 1885, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__129);
+  __Pyx_GIVEREF(__pyx_tuple__129);
 
-  /* "lxml/objectify.pyx":1829
+  /* "lxml/objectify.pyx":1904
  * _parse = etree.parse
  * 
  * def parse(f, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""parse(f, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__98 = PyTuple_Pack(3, __pyx_n_s_f, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(0, 1829, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__98);
-  __Pyx_GIVEREF(__pyx_tuple__98);
-  __pyx_codeobj__99 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_parse, 1829, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__99)) __PYX_ERR(0, 1829, __pyx_L1_error)
-  __pyx_tuple__100 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(0, 1829, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__100);
-  __Pyx_GIVEREF(__pyx_tuple__100);
+  __pyx_tuple__130 = PyTuple_Pack(3, __pyx_n_s_f, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(0, 1904, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__130);
+  __Pyx_GIVEREF(__pyx_tuple__130);
+  __pyx_codeobj__131 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_parse, 1904, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__131)) __PYX_ERR(0, 1904, __pyx_L1_error)
+  __pyx_tuple__132 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(0, 1904, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__132);
+  __Pyx_GIVEREF(__pyx_tuple__132);
 
-  /* "lxml/objectify.pyx":1852
+  /* "lxml/objectify.pyx":1927
  * E = ElementMaker()
  * 
  * def Element(_tag, attrib=None, nsmap=None, *, _pytype=None, **_attributes):             # <<<<<<<<<<<<<<
  *     u"""Element(_tag, attrib=None, nsmap=None, _pytype=None, **_attributes)
  * 
  */
-  __pyx_tuple__101 = PyTuple_Pack(5, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_attributes); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(0, 1852, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__101);
-  __Pyx_GIVEREF(__pyx_tuple__101);
-  __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_Element, 1852, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) __PYX_ERR(0, 1852, __pyx_L1_error)
-  __pyx_tuple__103 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(0, 1852, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__103);
-  __Pyx_GIVEREF(__pyx_tuple__103);
+  __pyx_tuple__133 = PyTuple_Pack(5, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_attributes); if (unlikely(!__pyx_tuple__133)) __PYX_ERR(0, 1927, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__133);
+  __Pyx_GIVEREF(__pyx_tuple__133);
+  __pyx_codeobj__134 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_Element, 1927, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__134)) __PYX_ERR(0, 1927, __pyx_L1_error)
+  __pyx_tuple__135 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__135)) __PYX_ERR(0, 1927, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__135);
+  __Pyx_GIVEREF(__pyx_tuple__135);
 
-  /* "lxml/objectify.pyx":1872
+  /* "lxml/objectify.pyx":1947
  *     return _makeElement(_tag, None, _attributes, nsmap)
  * 
  * def DataElement(_value, attrib=None, nsmap=None, *, _pytype=None, _xsi=None,             # <<<<<<<<<<<<<<
  *                 **_attributes):
  *     u"""DataElement(_value, attrib=None, nsmap=None, _pytype=None, _xsi=None, **_attributes)
  */
-  __pyx_tuple__104 = PyTuple_Pack(13, __pyx_n_s_value_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_xsi_3, __pyx_n_s_attributes, __pyx_n_s_temp, __pyx_n_s_prefix, __pyx_n_s_name, __pyx_n_s_ns, __pyx_n_s_py_type, __pyx_n_s_strval, __pyx_n_s_stringify); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(0, 1872, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__104);
-  __Pyx_GIVEREF(__pyx_tuple__104);
-  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(3, 2, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_DataElement, 1872, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(0, 1872, __pyx_L1_error)
-  __pyx_tuple__106 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(0, 1872, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__106);
-  __Pyx_GIVEREF(__pyx_tuple__106);
+  __pyx_tuple__136 = PyTuple_Pack(13, __pyx_n_s_value_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_xsi_3, __pyx_n_s_attributes, __pyx_n_s_temp, __pyx_n_s_prefix, __pyx_n_s_name, __pyx_n_s_ns, __pyx_n_s_py_type, __pyx_n_s_strval, __pyx_n_s_stringify); if (unlikely(!__pyx_tuple__136)) __PYX_ERR(0, 1947, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__136);
+  __Pyx_GIVEREF(__pyx_tuple__136);
+  __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(3, 2, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectify_pyx, __pyx_n_s_DataElement, 1947, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) __PYX_ERR(0, 1947, __pyx_L1_error)
+  __pyx_tuple__138 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__138)) __PYX_ERR(0, 1947, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__138);
+  __Pyx_GIVEREF(__pyx_tuple__138);
 
   /* "src/lxml/objectpath.pxi":57
  *         return _find_object_path(root, self._c_path, self._path_len, default)
@@ -35846,10 +37794,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         u"hasattr(self, root)"
  *         try:
  */
-  __pyx_tuple__107 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_root); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(1, 57, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__107);
-  __Pyx_GIVEREF(__pyx_tuple__107);
-  __pyx_codeobj__108 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectpath_pxi, __pyx_n_s_hasattr, 57, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__108)) __PYX_ERR(1, 57, __pyx_L1_error)
+  __pyx_tuple__139 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_root); if (unlikely(!__pyx_tuple__139)) __PYX_ERR(1, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__139);
+  __Pyx_GIVEREF(__pyx_tuple__139);
+  __pyx_codeobj__140 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__139, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectpath_pxi, __pyx_n_s_hasattr, 57, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__140)) __PYX_ERR(1, 57, __pyx_L1_error)
 
   /* "src/lxml/objectpath.pxi":65
  *         return True
@@ -35858,10 +37806,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         u"""setattr(self, root, value)
  * 
  */
-  __pyx_tuple__109 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_root, __pyx_n_s_value); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(1, 65, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__109);
-  __Pyx_GIVEREF(__pyx_tuple__109);
-  __pyx_codeobj__110 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectpath_pxi, __pyx_n_s_setattr, 65, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__110)) __PYX_ERR(1, 65, __pyx_L1_error)
+  __pyx_tuple__141 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_root, __pyx_n_s_value); if (unlikely(!__pyx_tuple__141)) __PYX_ERR(1, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__141);
+  __Pyx_GIVEREF(__pyx_tuple__141);
+  __pyx_codeobj__142 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__141, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectpath_pxi, __pyx_n_s_setattr, 65, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__142)) __PYX_ERR(1, 65, __pyx_L1_error)
 
   /* "src/lxml/objectpath.pxi":74
  *         _create_object_path(root, self._c_path, self._path_len, 1, value)
@@ -35870,10 +37818,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         u"""addattr(self, root, value)
  * 
  */
-  __pyx_tuple__111 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_root, __pyx_n_s_value); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(1, 74, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__111);
-  __Pyx_GIVEREF(__pyx_tuple__111);
-  __pyx_codeobj__112 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectpath_pxi, __pyx_n_s_addattr, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__112)) __PYX_ERR(1, 74, __pyx_L1_error)
+  __pyx_tuple__143 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_root, __pyx_n_s_value); if (unlikely(!__pyx_tuple__143)) __PYX_ERR(1, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__143);
+  __Pyx_GIVEREF(__pyx_tuple__143);
+  __pyx_codeobj__144 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__143, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_objectpath_pxi, __pyx_n_s_addattr, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__144)) __PYX_ERR(1, 74, __pyx_L1_error)
 
   /* "src/lxml/objectpath.pxi":88
  *     re.U).match
@@ -35882,9 +37830,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  * 
  */
-  __pyx_tuple__113 = PyTuple_Pack(3, Py_None, Py_None, __pyx_int_0); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(1, 88, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__113);
-  __Pyx_GIVEREF(__pyx_tuple__113);
+  __pyx_tuple__145 = PyTuple_Pack(3, Py_None, Py_None, __pyx_int_0); if (unlikely(!__pyx_tuple__145)) __PYX_ERR(1, 88, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__145);
+  __Pyx_GIVEREF(__pyx_tuple__145);
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -36059,85 +38007,85 @@ static int __Pyx_modinit_type_init_code(void) {
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ObjectifiedDataElement, (PyObject *)&__pyx_type_4lxml_9objectify_ObjectifiedDataElement) < 0) __PYX_ERR(0, 592, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement = &__pyx_type_4lxml_9objectify_ObjectifiedDataElement;
   __pyx_type_4lxml_9objectify_NumberElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_NumberElement) < 0) __PYX_ERR(0, 612, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_NumberElement) < 0) __PYX_ERR(0, 613, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_NumberElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_NumberElement.tp_dictoffset && __pyx_type_4lxml_9objectify_NumberElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_NumberElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_NumberElement, (PyObject *)&__pyx_type_4lxml_9objectify_NumberElement) < 0) __PYX_ERR(0, 612, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_NumberElement, (PyObject *)&__pyx_type_4lxml_9objectify_NumberElement) < 0) __PYX_ERR(0, 613, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_NumberElement = &__pyx_type_4lxml_9objectify_NumberElement;
   __pyx_type_4lxml_9objectify_IntElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_IntElement) < 0) __PYX_ERR(0, 709, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_IntElement) < 0) __PYX_ERR(0, 763, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_IntElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_IntElement.tp_dictoffset && __pyx_type_4lxml_9objectify_IntElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_IntElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_IntElement, (PyObject *)&__pyx_type_4lxml_9objectify_IntElement) < 0) __PYX_ERR(0, 709, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_IntElement, (PyObject *)&__pyx_type_4lxml_9objectify_IntElement) < 0) __PYX_ERR(0, 763, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_IntElement = &__pyx_type_4lxml_9objectify_IntElement;
   __pyx_type_4lxml_9objectify_LongElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_LongElement) < 0) __PYX_ERR(0, 716, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_LongElement) < 0) __PYX_ERR(0, 771, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_LongElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_LongElement.tp_dictoffset && __pyx_type_4lxml_9objectify_LongElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_LongElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_LongElement, (PyObject *)&__pyx_type_4lxml_9objectify_LongElement) < 0) __PYX_ERR(0, 716, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_LongElement, (PyObject *)&__pyx_type_4lxml_9objectify_LongElement) < 0) __PYX_ERR(0, 771, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_LongElement = &__pyx_type_4lxml_9objectify_LongElement;
   __pyx_type_4lxml_9objectify_FloatElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_FloatElement) < 0) __PYX_ERR(0, 723, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_FloatElement) < 0) __PYX_ERR(0, 779, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_FloatElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_FloatElement.tp_dictoffset && __pyx_type_4lxml_9objectify_FloatElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_FloatElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FloatElement, (PyObject *)&__pyx_type_4lxml_9objectify_FloatElement) < 0) __PYX_ERR(0, 723, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FloatElement, (PyObject *)&__pyx_type_4lxml_9objectify_FloatElement) < 0) __PYX_ERR(0, 779, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_FloatElement = &__pyx_type_4lxml_9objectify_FloatElement;
   __pyx_type_4lxml_9objectify_StringElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_StringElement) < 0) __PYX_ERR(0, 727, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_StringElement) < 0) __PYX_ERR(0, 784, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_StringElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_StringElement.tp_dictoffset && __pyx_type_4lxml_9objectify_StringElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_StringElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_StringElement, (PyObject *)&__pyx_type_4lxml_9objectify_StringElement) < 0) __PYX_ERR(0, 727, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_StringElement, (PyObject *)&__pyx_type_4lxml_9objectify_StringElement) < 0) __PYX_ERR(0, 784, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_StringElement = &__pyx_type_4lxml_9objectify_StringElement;
   __pyx_type_4lxml_9objectify_NoneElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_NoneElement) < 0) __PYX_ERR(0, 789, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_NoneElement) < 0) __PYX_ERR(0, 851, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_NoneElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_NoneElement.tp_dictoffset && __pyx_type_4lxml_9objectify_NoneElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_NoneElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_NoneElement, (PyObject *)&__pyx_type_4lxml_9objectify_NoneElement) < 0) __PYX_ERR(0, 789, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_NoneElement, (PyObject *)&__pyx_type_4lxml_9objectify_NoneElement) < 0) __PYX_ERR(0, 851, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_NoneElement = &__pyx_type_4lxml_9objectify_NoneElement;
   __pyx_type_4lxml_9objectify_BoolElement.tp_base = __pyx_ptype_4lxml_9objectify_IntElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_BoolElement) < 0) __PYX_ERR(0, 815, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_BoolElement) < 0) __PYX_ERR(0, 877, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_BoolElement.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_BoolElement.tp_dictoffset && __pyx_type_4lxml_9objectify_BoolElement.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_BoolElement.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BoolElement, (PyObject *)&__pyx_type_4lxml_9objectify_BoolElement) < 0) __PYX_ERR(0, 815, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BoolElement, (PyObject *)&__pyx_type_4lxml_9objectify_BoolElement) < 0) __PYX_ERR(0, 877, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_BoolElement = &__pyx_type_4lxml_9objectify_BoolElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_PyType) < 0) __PYX_ERR(0, 901, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_PyType) < 0) __PYX_ERR(0, 976, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_PyType.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_9objectify_PyType.tp_dictoffset && __pyx_type_4lxml_9objectify_PyType.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_9objectify_PyType.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PyType, (PyObject *)&__pyx_type_4lxml_9objectify_PyType) < 0) __PYX_ERR(0, 901, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PyType, (PyObject *)&__pyx_type_4lxml_9objectify_PyType) < 0) __PYX_ERR(0, 976, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_PyType = &__pyx_type_4lxml_9objectify_PyType;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller) < 0) __PYX_ERR(0, 1131, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller) < 0) __PYX_ERR(0, 1206, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller.tp_print = 0;
   #endif
@@ -36146,7 +38094,7 @@ static int __Pyx_modinit_type_init_code(void) {
   }
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller, "__call__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1131, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller, "__call__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1206, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__.doc = __pyx_doc_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__;
@@ -36157,17 +38105,17 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller = &__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller;
   __pyx_vtabptr_4lxml_9objectify_ElementMaker = &__pyx_vtable_4lxml_9objectify_ElementMaker;
   __pyx_vtable_4lxml_9objectify_ElementMaker._build_element_maker = (PyObject *(*)(struct __pyx_obj_4lxml_9objectify_ElementMaker *, PyObject *, int))__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1221, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1296, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_ElementMaker.tp_print = 0;
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_9objectify_ElementMaker.tp_dict, __pyx_vtabptr_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1221, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementMaker, (PyObject *)&__pyx_type_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1221, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_9objectify_ElementMaker.tp_dict, __pyx_vtabptr_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1296, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementMaker, (PyObject *)&__pyx_type_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1296, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_ElementMaker = &__pyx_type_4lxml_9objectify_ElementMaker;
   __pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "ElementClassLookup", sizeof(struct LxmlElementClassLookup), __Pyx_ImportType_CheckSize_Warn);
    if (!__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_type_4lxml_9objectify_ObjectifyElementClassLookup.tp_base = __pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup) < 0) __PYX_ERR(0, 1377, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup) < 0) __PYX_ERR(0, 1452, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_9objectify_ObjectifyElementClassLookup.tp_print = 0;
   #endif
@@ -36176,7 +38124,7 @@ static int __Pyx_modinit_type_init_code(void) {
   }
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1377, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1452, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_9objectify_27ObjectifyElementClassLookup___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_9objectify_27ObjectifyElementClassLookup___init__.doc = __pyx_doc_4lxml_9objectify_27ObjectifyElementClassLookup___init__;
@@ -36184,7 +38132,7 @@ static int __Pyx_modinit_type_init_code(void) {
     }
   }
   #endif
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ObjectifyElementClassLookup, (PyObject *)&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup) < 0) __PYX_ERR(0, 1377, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ObjectifyElementClassLookup, (PyObject *)&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup) < 0) __PYX_ERR(0, 1452, __pyx_L1_error)
   __pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup = &__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_ObjectPath) < 0) __PYX_ERR(1, 13, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
@@ -36409,11 +38357,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -36941,234 +38887,442 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_ObjectifiedDataElement);
 
-  /* "lxml/objectify.pyx":614
- * cdef class NumberElement(ObjectifiedDataElement):
+  /* "lxml/objectify.pyx":616
  *     cdef object _parse_value
+ * 
  *     def _setValueParser(self, function):             # <<<<<<<<<<<<<<
  *         u"""Set the function that parses the Python value from a string.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_1_setValueParser, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement__setValueParser, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 614, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_1_setValueParser, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement__setValueParser, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_setValueParser, __pyx_t_1) < 0) __PYX_ERR(0, 614, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_setValueParser, __pyx_t_1) < 0) __PYX_ERR(0, 616, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
 
-  /* "lxml/objectify.pyx":634
+  /* "lxml/objectify.pyx":636
  *         return float(_parseNumber(self))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
  *         return complex(_parseNumber(self))
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_9__complex__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___complex, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 634, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_9__complex__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___complex, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 636, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_complex, __pyx_t_1) < 0) __PYX_ERR(0, 634, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_complex, __pyx_t_1) < 0) __PYX_ERR(0, 636, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
 
-  /* "lxml/objectify.pyx":710
+  /* "lxml/objectify.pyx":660
+ *         return _numericValueOf(self) + _numericValueOf(other)
+ * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) + _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_25__radd__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___radd, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 660, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_radd, __pyx_t_1) < 0) __PYX_ERR(0, 660, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":666
+ *         return _numericValueOf(self) - _numericValueOf(other)
+ * 
+ *     def __rsub__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) - _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_29__rsub__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rsub, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rsub, __pyx_t_1) < 0) __PYX_ERR(0, 666, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":672
+ *         return _numericValueOf(self) * _numericValueOf(other)
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_33__rmul__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rmul, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 672, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rmul, __pyx_t_1) < 0) __PYX_ERR(0, 672, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":678
+ *         return _numericValueOf(self) / _numericValueOf(other)
+ * 
+ *     def __rdiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_37__rdiv__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rdiv, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 678, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rdiv, __pyx_t_1) < 0) __PYX_ERR(0, 678, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":684
+ *         return _numericValueOf(self) / _numericValueOf(other)
+ * 
+ *     def __rtruediv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) / _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_41__rtruediv__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rtruediv, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 684, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rtruediv, __pyx_t_1) < 0) __PYX_ERR(0, 684, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":690
+ *         return _numericValueOf(self) // _numericValueOf(other)
+ * 
+ *     def __rfloordiv__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) // _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_45__rfloordiv__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rfloordiv, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 690, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rfloordiv, __pyx_t_1) < 0) __PYX_ERR(0, 690, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":696
+ *         return _numericValueOf(self) % _numericValueOf(other)
+ * 
+ *     def __rmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) % _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_49__rmod__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rmod, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rmod, __pyx_t_1) < 0) __PYX_ERR(0, 696, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":702
+ *         return divmod(_numericValueOf(self), _numericValueOf(other))
+ * 
+ *     def __rdivmod__(self, other):             # <<<<<<<<<<<<<<
+ *         return divmod(_numericValueOf(other), _numericValueOf(self))
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_53__rdivmod__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rdivmod, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 702, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rdivmod, __pyx_t_1) < 0) __PYX_ERR(0, 702, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":711
+ *             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
+ * 
+ *     def __rpow__(self, other, modulo):             # <<<<<<<<<<<<<<
+ *         if modulo is None:
+ *             return _numericValueOf(other) ** _numericValueOf(self)
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_57__rpow__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rpow, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rpow, __pyx_t_1) < 0) __PYX_ERR(0, 711, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":735
+ *         return _numericValueOf(self) << _numericValueOf(other)
+ * 
+ *     def __rlshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) << _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_71__rlshift__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rlshift, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rlshift, __pyx_t_1) < 0) __PYX_ERR(0, 735, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":741
+ *         return _numericValueOf(self) >> _numericValueOf(other)
+ * 
+ *     def __rrshift__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) >> _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_75__rrshift__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rrshift, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rrshift, __pyx_t_1) < 0) __PYX_ERR(0, 741, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":747
+ *         return _numericValueOf(self) & _numericValueOf(other)
+ * 
+ *     def __rand__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) & _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_79__rand__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rand, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rand, __pyx_t_1) < 0) __PYX_ERR(0, 747, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":753
+ *         return _numericValueOf(self) | _numericValueOf(other)
+ * 
+ *     def __ror__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) | _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_83__ror__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___ror, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__69)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 753, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_ror, __pyx_t_1) < 0) __PYX_ERR(0, 753, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":759
+ *         return _numericValueOf(self) ^ _numericValueOf(other)
+ * 
+ *     def __rxor__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) ^ _numericValueOf(self)
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13NumberElement_87__rxor__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NumberElement___rxor, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_NumberElement->tp_dict, __pyx_n_s_rxor, __pyx_t_1) < 0) __PYX_ERR(0, 759, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_NumberElement);
+
+  /* "lxml/objectify.pyx":764
  * 
  * cdef class IntElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = int
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10IntElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IntElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10IntElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IntElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 710, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_IntElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 764, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_IntElement);
 
-  /* "lxml/objectify.pyx":717
+  /* "lxml/objectify.pyx":772
  * 
  * cdef class LongElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = long
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_11LongElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_LongElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 717, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_11LongElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_LongElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__75)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_LongElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 717, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_LongElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 772, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_LongElement);
 
-  /* "lxml/objectify.pyx":724
+  /* "lxml/objectify.pyx":780
  * 
  * cdef class FloatElement(NumberElement):
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = float
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_12FloatElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FloatElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_12FloatElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FloatElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__77)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 780, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_FloatElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_FloatElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 780, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_FloatElement);
 
-  /* "lxml/objectify.pyx":741
+  /* "lxml/objectify.pyx":798
  *         return repr(textOf(self._c_node) or u'')
  * 
  *     def strlen(self):             # <<<<<<<<<<<<<<
  *         text = textOf(self._c_node)
  *         if text is None:
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13StringElement_3strlen, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_StringElement_strlen, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13StringElement_3strlen, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_StringElement_strlen, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__79)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement->tp_dict, __pyx_n_s_strlen, __pyx_t_1) < 0) __PYX_ERR(0, 741, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement->tp_dict, __pyx_n_s_strlen, __pyx_t_1) < 0) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_StringElement);
 
-  /* "lxml/objectify.pyx":786
+  /* "lxml/objectify.pyx":819
+ *         return text + other
+ * 
+ *     def __radd__(self, other):             # <<<<<<<<<<<<<<
+ *         text  = _strValueOf(self)
+ *         other = _strValueOf(other)
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13StringElement_13__radd__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_StringElement___radd, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 819, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement->tp_dict, __pyx_n_s_radd, __pyx_t_1) < 0) __PYX_ERR(0, 819, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_StringElement);
+
+  /* "lxml/objectify.pyx":832
+ *             return NotImplemented
+ * 
+ *     def __rmul__(self, other):             # <<<<<<<<<<<<<<
+ *         return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
+ * 
+ */
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13StringElement_17__rmul__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_StringElement___rmul, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__83)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement->tp_dict, __pyx_n_s_rmul, __pyx_t_1) < 0) __PYX_ERR(0, 832, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_4lxml_9objectify_StringElement);
+
+  /* "lxml/objectify.pyx":847
  *         return float(textOf(self._c_node))
  * 
  *     def __complex__(self):             # <<<<<<<<<<<<<<
  *         return complex(textOf(self._c_node))
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13StringElement_23__complex__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_StringElement___complex, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13StringElement_27__complex__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_StringElement___complex, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 847, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement->tp_dict, __pyx_n_s_complex, __pyx_t_1) < 0) __PYX_ERR(0, 786, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_StringElement->tp_dict, __pyx_n_s_complex, __pyx_t_1) < 0) __PYX_ERR(0, 847, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_StringElement);
 
-  /* "lxml/objectify.pyx":821
+  /* "lxml/objectify.pyx":883
  *     Python's bool type.
  *     """
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         self._parse_value = __parseBool
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_11BoolElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BoolElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 821, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_11BoolElement_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BoolElement__init, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_BoolElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 821, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_BoolElement->tp_dict, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_BoolElement);
 
-  /* "lxml/objectify.pyx":843
- *         return __parseBool(textOf(self._c_node))
+  /* "lxml/objectify.pyx":912
+ * 
  * 
  * def __checkBool(s):             # <<<<<<<<<<<<<<
  *     cdef int value = -1
  *     if s is not None:
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_3__checkBool, 0, __pyx_n_s_checkBool, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_3__checkBool, 0, __pyx_n_s_checkBool, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 912, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_checkBool, __pyx_t_1) < 0) __PYX_ERR(0, 843, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_checkBool, __pyx_t_1) < 0) __PYX_ERR(0, 912, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":850
- *         raise ValueError
+  /* "lxml/objectify.pyx":920
+ * 
  * 
  * cpdef bint __parseBool(s) except -1:             # <<<<<<<<<<<<<<
  *     cdef int value
  *     if s is None:
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_5__parseBool, 0, __pyx_n_s_parseBool, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_5__parseBool, 0, __pyx_n_s_parseBool, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 920, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parseBool, __pyx_t_1) < 0) __PYX_ERR(0, 850, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parseBool, __pyx_t_1) < 0) __PYX_ERR(0, 920, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":948
+  /* "lxml/objectify.pyx":1023
  *         return "PyType(%s, %s)" % (self.name, self._type.__name__)
  * 
  *     def register(self, before=None, after=None):             # <<<<<<<<<<<<<<
  *         u"""register(self, before=None, after=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_6PyType_5register, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyType_register, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 948, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_6PyType_5register, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyType_register, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_PyType->tp_dict, __pyx_n_s_register, __pyx_t_1) < 0) __PYX_ERR(0, 948, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_PyType->tp_dict, __pyx_n_s_register, __pyx_t_1) < 0) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_PyType);
 
-  /* "lxml/objectify.pyx":989
+  /* "lxml/objectify.pyx":1064
  *             _SCHEMA_TYPE_DICT[xs_type] = self
  * 
  *     def unregister(self):             # <<<<<<<<<<<<<<
  *         u"unregister(self)"
  *         if _PYTYPE_DICT.get(self.name) is self:
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_6PyType_7unregister, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyType_unregister, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 989, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_6PyType_7unregister, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyType_unregister, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__95)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_PyType->tp_dict, __pyx_n_s_unregister, __pyx_t_1) < 0) __PYX_ERR(0, 989, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_PyType->tp_dict, __pyx_n_s_unregister, __pyx_t_1) < 0) __PYX_ERR(0, 1064, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_9objectify_PyType);
 
-  /* "lxml/objectify.pyx":1014
+  /* "lxml/objectify.pyx":1089
  * 
  * 
  * cdef dict _PYTYPE_DICT = {}             # <<<<<<<<<<<<<<
  * cdef dict _SCHEMA_TYPE_DICT = {}
  * cdef list _TYPE_CHECKS = []
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1089, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__PYTYPE_DICT);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__PYTYPE_DICT, ((PyObject*)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1015
+  /* "lxml/objectify.pyx":1090
  * 
  * cdef dict _PYTYPE_DICT = {}
  * cdef dict _SCHEMA_TYPE_DICT = {}             # <<<<<<<<<<<<<<
  * cdef list _TYPE_CHECKS = []
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1090, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__SCHEMA_TYPE_DICT, ((PyObject*)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1016
+  /* "lxml/objectify.pyx":1091
  * cdef dict _PYTYPE_DICT = {}
  * cdef dict _SCHEMA_TYPE_DICT = {}
  * cdef list _TYPE_CHECKS = []             # <<<<<<<<<<<<<<
  * 
  * def __lower_bool(b):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1016, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1091, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__TYPE_CHECKS);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__TYPE_CHECKS, ((PyObject*)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1018
+  /* "lxml/objectify.pyx":1093
  * cdef list _TYPE_CHECKS = []
  * 
  * def __lower_bool(b):             # <<<<<<<<<<<<<<
  *     return u"true" if b else u"false"
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_7__lower_bool, 0, __pyx_n_s_lower_bool, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1018, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_7__lower_bool, 0, __pyx_n_s_lower_bool, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__97)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1093, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lower_bool, __pyx_t_1) < 0) __PYX_ERR(0, 1018, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lower_bool, __pyx_t_1) < 0) __PYX_ERR(0, 1093, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1024
+  /* "lxml/objectify.pyx":1099
  *     return u"str" if python._isString(obj) else _typename(obj)
  * 
  * def pytypename(obj):             # <<<<<<<<<<<<<<
  *     u"""pytypename(obj)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_9pytypename, 0, __pyx_n_s_pytypename, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1024, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_9pytypename, 0, __pyx_n_s_pytypename, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__99)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pytypename, __pyx_t_1) < 0) __PYX_ERR(0, 1024, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pytypename, __pyx_t_1) < 0) __PYX_ERR(0, 1099, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1066
+  /* "lxml/objectify.pyx":1141
  * 
  * # non-registered PyType for inner tree elements
  * cdef PyType TREE_PYTYPE = PyType(TREE_PYTYPE_NAME, None, ObjectifiedElement)             # <<<<<<<<<<<<<<
  * 
  * _registerPyTypes()
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME);
   __Pyx_GIVEREF(__pyx_v_4lxml_9objectify_TREE_PYTYPE_NAME);
@@ -37179,7 +39333,7 @@ if (!__Pyx_RefNanny) {
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedElement));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedElement));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifiedElement));
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_9objectify_PyType), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_9objectify_TREE_PYTYPE));
@@ -37187,30 +39341,30 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1068
+  /* "lxml/objectify.pyx":1143
  * cdef PyType TREE_PYTYPE = PyType(TREE_PYTYPE_NAME, None, ObjectifiedElement)
  * 
  * _registerPyTypes()             # <<<<<<<<<<<<<<
  * 
  * def getRegisteredTypes():
  */
-  __pyx_t_2 = __pyx_f_4lxml_9objectify__registerPyTypes(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1068, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_9objectify__registerPyTypes(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1070
+  /* "lxml/objectify.pyx":1145
  * _registerPyTypes()
  * 
  * def getRegisteredTypes():             # <<<<<<<<<<<<<<
  *     u"""getRegisteredTypes()
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_11getRegisteredTypes, 0, __pyx_n_s_getRegisteredTypes, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__69)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1070, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_11getRegisteredTypes, 0, __pyx_n_s_getRegisteredTypes, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__101)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_getRegisteredTypes, __pyx_t_2) < 0) __PYX_ERR(0, 1070, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_getRegisteredTypes, __pyx_t_2) < 0) __PYX_ERR(0, 1145, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1303
+  /* "lxml/objectify.pyx":1378
  * # Recursive element dumping
  * 
  * cdef bint __RECURSIVE_STR = 0 # default: off             # <<<<<<<<<<<<<<
@@ -37219,227 +39373,227 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_v_4lxml_9objectify___RECURSIVE_STR = 0;
 
-  /* "lxml/objectify.pyx":1305
+  /* "lxml/objectify.pyx":1380
  * cdef bint __RECURSIVE_STR = 0 # default: off
  * 
  * def enable_recursive_str(on=True):             # <<<<<<<<<<<<<<
  *     u"""enable_recursive_str(on=True)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13enable_recursive_str, 0, __pyx_n_s_enable_recursive_str, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1305, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_13enable_recursive_str, 0, __pyx_n_s_enable_recursive_str, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__103)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1380, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__72);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_enable_recursive_str, __pyx_t_2) < 0) __PYX_ERR(0, 1305, __pyx_L1_error)
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__104);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_enable_recursive_str, __pyx_t_2) < 0) __PYX_ERR(0, 1380, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1314
+  /* "lxml/objectify.pyx":1389
  *     __RECURSIVE_STR = on
  * 
  * def dump(_Element element not None):             # <<<<<<<<<<<<<<
  *     u"""dump(_Element element not None)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_15dump, 0, __pyx_n_s_dump, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1314, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_15dump, 0, __pyx_n_s_dump, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__106)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dump, __pyx_t_2) < 0) __PYX_ERR(0, 1314, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dump, __pyx_t_2) < 0) __PYX_ERR(0, 1389, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1357
+  /* "lxml/objectify.pyx":1432
  * # Pickle support for objectified ElementTree
  * 
  * def __unpickleElementTree(data):             # <<<<<<<<<<<<<<
  *     return etree.ElementTree(fromstring(data))
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_17__unpickleElementTree, 0, __pyx_n_s_unpickleElementTree, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_17__unpickleElementTree, 0, __pyx_n_s_unpickleElementTree, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__108)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unpickleElementTree, __pyx_t_2) < 0) __PYX_ERR(0, 1357, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unpickleElementTree, __pyx_t_2) < 0) __PYX_ERR(0, 1432, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1368
+  /* "lxml/objectify.pyx":1443
  *                    elementTreeReduceFunction, __unpickleElementTree)
  * 
  * def pickleReduceElementTree(obj):             # <<<<<<<<<<<<<<
  *     return __unpickleElementTree, (etree.tostring(obj),)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_19pickleReduceElementTree, 0, __pyx_n_s_pickleReduceElementTree, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_19pickleReduceElementTree, 0, __pyx_n_s_pickleReduceElementTree, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__110)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1443, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pickleReduceElementTree, __pyx_t_2) < 0) __PYX_ERR(0, 1368, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pickleReduceElementTree, __pyx_t_2) < 0) __PYX_ERR(0, 1443, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1371
+  /* "lxml/objectify.pyx":1446
  *     return __unpickleElementTree, (etree.tostring(obj),)
  * 
  * _setupPickle(pickleReduceElementTree)             # <<<<<<<<<<<<<<
  * del pickleReduceElementTree
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pickleReduceElementTree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1371, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pickleReduceElementTree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1446, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __pyx_f_4lxml_9objectify__setupPickle(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1371, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_9objectify__setupPickle(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __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;
 
-  /* "lxml/objectify.pyx":1372
+  /* "lxml/objectify.pyx":1447
  * 
  * _setupPickle(pickleReduceElementTree)
  * del pickleReduceElementTree             # <<<<<<<<<<<<<<
  * 
  * ################################################################################
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_pickleReduceElementTree) < 0) __PYX_ERR(0, 1372, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_pickleReduceElementTree) < 0) __PYX_ERR(0, 1447, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1462
+  /* "lxml/objectify.pyx":1537
  *     return None
  * 
  * def pyannotate(element_or_tree, *, ignore_old=False, ignore_xsi=False,             # <<<<<<<<<<<<<<
  *              empty_pytype=None):
  *     u"""pyannotate(element_or_tree, ignore_old=False, ignore_xsi=False, empty_pytype=None)
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1462, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1537, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_old, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1462, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_xsi, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1462, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_empty_pytype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1462, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_21pyannotate, 0, __pyx_n_s_pyannotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1462, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_old, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1537, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_xsi, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1537, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_empty_pytype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1537, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_21pyannotate, 0, __pyx_n_s_pyannotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__112)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1537, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyannotate, __pyx_t_2) < 0) __PYX_ERR(0, 1462, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyannotate, __pyx_t_2) < 0) __PYX_ERR(0, 1537, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1485
+  /* "lxml/objectify.pyx":1560
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
  * 
  * def xsiannotate(element_or_tree, *, ignore_old=False, ignore_pytype=False,             # <<<<<<<<<<<<<<
  *                 empty_type=None):
  *     u"""xsiannotate(element_or_tree, ignore_old=False, ignore_pytype=False, empty_type=None)
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1485, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ignore_old, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1485, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ignore_pytype, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1485, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_empty_type, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1485, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_23xsiannotate, 0, __pyx_n_s_xsiannotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1485, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ignore_old, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1560, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ignore_pytype, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1560, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_empty_type, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1560, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_23xsiannotate, 0, __pyx_n_s_xsiannotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__114)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_xsiannotate, __pyx_t_1) < 0) __PYX_ERR(0, 1485, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_xsiannotate, __pyx_t_1) < 0) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1513
+  /* "lxml/objectify.pyx":1588
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
  * 
  * def annotate(element_or_tree, *, ignore_old=True, ignore_xsi=False,             # <<<<<<<<<<<<<<
  *              empty_pytype=None, empty_type=None, annotate_xsi=0,
  *              annotate_pytype=1):
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1513, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_old, ((PyObject *)Py_True)) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_xsi, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_empty_pytype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_empty_type, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_annotate_xsi, ((PyObject *)__pyx_int_0)) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_annotate_pytype, ((PyObject *)__pyx_int_1)) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_25annotate, 0, __pyx_n_s_annotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__84)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1513, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_old, ((PyObject *)Py_True)) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ignore_xsi, ((PyObject *)Py_False)) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_empty_pytype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_empty_type, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_annotate_xsi, ((PyObject *)__pyx_int_0)) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_annotate_pytype, ((PyObject *)__pyx_int_1)) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_25annotate, 0, __pyx_n_s_annotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__116)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_annotate, __pyx_t_2) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_annotate, __pyx_t_2) < 0) __PYX_ERR(0, 1588, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1706
+  /* "lxml/objectify.pyx":1781
  *     return 0
  * 
  * cdef object _strip_attributes = etree.strip_attributes             # <<<<<<<<<<<<<<
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_strip_attributes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1706, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_strip_attributes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1781, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__strip_attributes);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__strip_attributes, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1707
+  /* "lxml/objectify.pyx":1782
  * 
  * cdef object _strip_attributes = etree.strip_attributes
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces             # <<<<<<<<<<<<<<
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_cleanup_namespaces); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1707, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_cleanup_namespaces); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1782, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__cleanup_namespaces);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__cleanup_namespaces, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1709
+  /* "lxml/objectify.pyx":1784
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,             # <<<<<<<<<<<<<<
  *                bint xsi_nil=False, bint cleanup_namespaces=False):
  *     u"""deannotate(element_or_tree, pytype=True, xsi=True, xsi_nil=False, cleanup_namespaces=False)
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1709, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pytype, __pyx_t_1) < 0) __PYX_ERR(0, 1709, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pytype, __pyx_t_1) < 0) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsi_2, __pyx_t_1) < 0) __PYX_ERR(0, 1709, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsi_2, __pyx_t_1) < 0) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1710
+  /* "lxml/objectify.pyx":1785
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,
  *                bint xsi_nil=False, bint cleanup_namespaces=False):             # <<<<<<<<<<<<<<
  *     u"""deannotate(element_or_tree, pytype=True, xsi=True, xsi_nil=False, cleanup_namespaces=False)
  * 
  */
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1710, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1785, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsi_nil, __pyx_t_1) < 0) __PYX_ERR(0, 1709, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsi_nil, __pyx_t_1) < 0) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1710, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1785, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cleanup_namespaces, __pyx_t_1) < 0) __PYX_ERR(0, 1709, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cleanup_namespaces, __pyx_t_1) < 0) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1709
+  /* "lxml/objectify.pyx":1784
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
  * 
  * def deannotate(element_or_tree, *, bint pytype=True, bint xsi=True,             # <<<<<<<<<<<<<<
  *                bint xsi_nil=False, bint cleanup_namespaces=False):
  *     u"""deannotate(element_or_tree, pytype=True, xsi=True, xsi_nil=False, cleanup_namespaces=False)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_27deannotate, 0, __pyx_n_s_deannotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__86)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_27deannotate, 0, __pyx_n_s_deannotate, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__118)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_deannotate, __pyx_t_1) < 0) __PYX_ERR(0, 1709, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_deannotate, __pyx_t_1) < 0) __PYX_ERR(0, 1784, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1743
+  /* "lxml/objectify.pyx":1818
  * 
  * cdef object __DEFAULT_PARSER
  * __DEFAULT_PARSER = etree.XMLParser(remove_blank_text=True)             # <<<<<<<<<<<<<<
  * __DEFAULT_PARSER.set_element_class_lookup( ObjectifyElementClassLookup() )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_XMLParser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1743, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_XMLParser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1743, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_remove_blank_text, Py_True) < 0) __PYX_ERR(0, 1743, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1743, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_remove_blank_text, Py_True) < 0) __PYX_ERR(0, 1818, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -37448,24 +39602,24 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/objectify.pyx":1744
+  /* "lxml/objectify.pyx":1819
  * cdef object __DEFAULT_PARSER
  * __DEFAULT_PARSER = etree.XMLParser(remove_blank_text=True)
  * __DEFAULT_PARSER.set_element_class_lookup( ObjectifyElementClassLookup() )             # <<<<<<<<<<<<<<
  * 
  * cdef object objectify_parser
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify___DEFAULT_PARSER, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1744, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify___DEFAULT_PARSER, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1819, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1744, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1819, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1744, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1819, __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;
 
-  /* "lxml/objectify.pyx":1747
+  /* "lxml/objectify.pyx":1822
  * 
  * cdef object objectify_parser
  * objectify_parser = __DEFAULT_PARSER             # <<<<<<<<<<<<<<
@@ -37477,205 +39631,205 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify_objectify_parser, __pyx_v_4lxml_9objectify___DEFAULT_PARSER);
   __Pyx_GIVEREF(__pyx_v_4lxml_9objectify___DEFAULT_PARSER);
 
-  /* "lxml/objectify.pyx":1749
+  /* "lxml/objectify.pyx":1824
  * objectify_parser = __DEFAULT_PARSER
  * 
  * def set_default_parser(new_parser = None):             # <<<<<<<<<<<<<<
  *     u"""set_default_parser(new_parser = None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_29set_default_parser, 0, __pyx_n_s_set_default_parser, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__88)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1749, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_29set_default_parser, 0, __pyx_n_s_set_default_parser, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__120)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1824, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__89);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_default_parser, __pyx_t_1) < 0) __PYX_ERR(0, 1749, __pyx_L1_error)
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__121);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_default_parser, __pyx_t_1) < 0) __PYX_ERR(0, 1824, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1767
+  /* "lxml/objectify.pyx":1842
  *         raise TypeError, u"parser must inherit from lxml.etree.XMLParser"
  * 
  * def makeparser(**kw):             # <<<<<<<<<<<<<<
  *     u"""makeparser(remove_blank_text=True, **kw)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_31makeparser, 0, __pyx_n_s_makeparser, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1767, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_31makeparser, 0, __pyx_n_s_makeparser, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__123)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_makeparser, __pyx_t_1) < 0) __PYX_ERR(0, 1767, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_makeparser, __pyx_t_1) < 0) __PYX_ERR(0, 1842, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1790
+  /* "lxml/objectify.pyx":1865
  * 
  * cdef object _fromstring
  * _fromstring = etree.fromstring             # <<<<<<<<<<<<<<
  * 
  * SubElement = etree.SubElement
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1865, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__fromstring);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1792
+  /* "lxml/objectify.pyx":1867
  * _fromstring = etree.fromstring
  * 
  * SubElement = etree.SubElement             # <<<<<<<<<<<<<<
  * 
  * def fromstring(xml, parser=None, *, base_url=None):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_SubElement); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_SubElement); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SubElement, __pyx_t_1) < 0) __PYX_ERR(0, 1792, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SubElement, __pyx_t_1) < 0) __PYX_ERR(0, 1867, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1794
+  /* "lxml/objectify.pyx":1869
  * SubElement = etree.SubElement
  * 
  * def fromstring(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""fromstring(xml, parser=None, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1794, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1869, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1794, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_33fromstring, 0, __pyx_n_s_fromstring, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1794, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_33fromstring, 0, __pyx_n_s_fromstring, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__125)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1869, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__94);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__126);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstring, __pyx_t_2) < 0) __PYX_ERR(0, 1794, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstring, __pyx_t_2) < 0) __PYX_ERR(0, 1869, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1810
+  /* "lxml/objectify.pyx":1885
  *     return _fromstring(xml, parser, base_url=base_url)
  * 
  * def XML(xml, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""XML(xml, parser=None, base_url=None)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1810, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1885, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1810, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_35XML, 0, __pyx_n_s_XML, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__96)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1885, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_35XML, 0, __pyx_n_s_XML, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__128)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__97);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__129);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XML, __pyx_t_1) < 0) __PYX_ERR(0, 1810, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XML, __pyx_t_1) < 0) __PYX_ERR(0, 1885, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1827
+  /* "lxml/objectify.pyx":1902
  * 
  * cdef object _parse
  * _parse = etree.parse             # <<<<<<<<<<<<<<
  * 
  * def parse(f, parser=None, *, base_url=None):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_parse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1827, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_etree, __pyx_n_s_parse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__parse);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__parse, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1829
+  /* "lxml/objectify.pyx":1904
  * _parse = etree.parse
  * 
  * def parse(f, parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""parse(f, parser=None, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1829, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1904, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1829, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_37parse, 0, __pyx_n_s_parse, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__99)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1829, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1904, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_37parse, 0, __pyx_n_s_parse, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__131)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1904, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__100);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__132);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse, __pyx_t_2) < 0) __PYX_ERR(0, 1829, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse, __pyx_t_2) < 0) __PYX_ERR(0, 1904, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1845
+  /* "lxml/objectify.pyx":1920
  * 
  * cdef dict _DEFAULT_NSMAP = {
  *     "py"  : PYTYPE_NAMESPACE,             # <<<<<<<<<<<<<<
  *     "xsi" : XML_SCHEMA_INSTANCE_NS,
  *     "xsd" : XML_SCHEMA_NS
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1845, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1920, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_py_2, __pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE) < 0) __PYX_ERR(0, 1845, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_py_2, __pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE) < 0) __PYX_ERR(0, 1920, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1846
+  /* "lxml/objectify.pyx":1921
  * cdef dict _DEFAULT_NSMAP = {
  *     "py"  : PYTYPE_NAMESPACE,
  *     "xsi" : XML_SCHEMA_INSTANCE_NS,             # <<<<<<<<<<<<<<
  *     "xsd" : XML_SCHEMA_NS
  * }
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsi_2, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NS) < 0) __PYX_ERR(0, 1845, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsi_2, __pyx_v_4lxml_9objectify_XML_SCHEMA_INSTANCE_NS) < 0) __PYX_ERR(0, 1920, __pyx_L1_error)
 
-  /* "lxml/objectify.pyx":1847
+  /* "lxml/objectify.pyx":1922
  *     "py"  : PYTYPE_NAMESPACE,
  *     "xsi" : XML_SCHEMA_INSTANCE_NS,
  *     "xsd" : XML_SCHEMA_NS             # <<<<<<<<<<<<<<
  * }
  * 
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsd_2, __pyx_v_4lxml_9objectify_XML_SCHEMA_NS) < 0) __PYX_ERR(0, 1845, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xsd_2, __pyx_v_4lxml_9objectify_XML_SCHEMA_NS) < 0) __PYX_ERR(0, 1920, __pyx_L1_error)
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__DEFAULT_NSMAP);
   __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__DEFAULT_NSMAP, ((PyObject*)__pyx_t_2));
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1850
+  /* "lxml/objectify.pyx":1925
  * }
  * 
  * E = ElementMaker()             # <<<<<<<<<<<<<<
  * 
  * def Element(_tag, attrib=None, nsmap=None, *, _pytype=None, **_attributes):
  */
-  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_9objectify_ElementMaker)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1850, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_9objectify_ElementMaker)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1925, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_E, __pyx_t_2) < 0) __PYX_ERR(0, 1850, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_E, __pyx_t_2) < 0) __PYX_ERR(0, 1925, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/objectify.pyx":1852
+  /* "lxml/objectify.pyx":1927
  * E = ElementMaker()
  * 
  * def Element(_tag, attrib=None, nsmap=None, *, _pytype=None, **_attributes):             # <<<<<<<<<<<<<<
  *     u"""Element(_tag, attrib=None, nsmap=None, _pytype=None, **_attributes)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1852, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1927, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pytype_2, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1852, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_39Element, 0, __pyx_n_s_Element, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__102)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1852, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pytype_2, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1927, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_39Element, 0, __pyx_n_s_Element, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__134)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1927, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__103);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__135);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Element, __pyx_t_1) < 0) __PYX_ERR(0, 1852, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Element, __pyx_t_1) < 0) __PYX_ERR(0, 1927, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/objectify.pyx":1872
+  /* "lxml/objectify.pyx":1947
  *     return _makeElement(_tag, None, _attributes, nsmap)
  * 
  * def DataElement(_value, attrib=None, nsmap=None, *, _pytype=None, _xsi=None,             # <<<<<<<<<<<<<<
  *                 **_attributes):
  *     u"""DataElement(_value, attrib=None, nsmap=None, _pytype=None, _xsi=None, **_attributes)
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1947, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pytype_2, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1872, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_xsi_3, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1872, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_41DataElement, 0, __pyx_n_s_DataElement, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__105)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1872, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pytype_2, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1947, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_xsi_3, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 1947, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_41DataElement, 0, __pyx_n_s_DataElement, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__137)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1947, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__106);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__138);
   __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DataElement, __pyx_t_2) < 0) __PYX_ERR(0, 1872, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DataElement, __pyx_t_2) < 0) __PYX_ERR(0, 1947, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "src/lxml/objectpath.pxi":10
@@ -37699,7 +39853,7 @@ if (!__Pyx_RefNanny) {
  *         u"hasattr(self, root)"
  *         try:
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10ObjectPath_9hasattr, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ObjectPath_hasattr, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__108)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 57, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10ObjectPath_9hasattr, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ObjectPath_hasattr, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__140)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectPath->tp_dict, __pyx_n_s_hasattr, __pyx_t_2) < 0) __PYX_ERR(1, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -37712,7 +39866,7 @@ if (!__Pyx_RefNanny) {
  *         u"""setattr(self, root, value)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10ObjectPath_11setattr, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ObjectPath_setattr, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__110)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 65, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10ObjectPath_11setattr, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ObjectPath_setattr, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__142)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectPath->tp_dict, __pyx_n_s_setattr, __pyx_t_2) < 0) __PYX_ERR(1, 65, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -37725,7 +39879,7 @@ if (!__Pyx_RefNanny) {
  *         u"""addattr(self, root, value)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10ObjectPath_13addattr, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ObjectPath_addattr, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__112)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 74, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_9objectify_10ObjectPath_13addattr, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ObjectPath_addattr, NULL, __pyx_n_s_lxml_objectify, __pyx_d, ((PyObject *)__pyx_codeobj__144)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_9objectify_ObjectPath->tp_dict, __pyx_n_s_addattr, __pyx_t_2) < 0) __PYX_ERR(1, 74, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -37793,10 +39947,10 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __Pyx_INCREF(__pyx_tuple__113);
+  __Pyx_INCREF(__pyx_tuple__145);
   __Pyx_XGOTREF(__pyx_v_4lxml_9objectify__RELATIVE_PATH_SEGMENT);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__RELATIVE_PATH_SEGMENT, __pyx_tuple__113);
-  __Pyx_GIVEREF(__pyx_tuple__113);
+  __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify__RELATIVE_PATH_SEGMENT, __pyx_tuple__145);
+  __Pyx_GIVEREF(__pyx_tuple__145);
 
   /* "lxml/objectify.pyx":1
  * # cython: binding=True             # <<<<<<<<<<<<<<
@@ -37893,40 +40047,40 @@ static CYTHON_SMALL_CODE void __Pyx_CleanupGlobals(void) {
   Py_CLEAR(__pyx_tuple__70);
   Py_CLEAR(__pyx_codeobj__71);
   Py_CLEAR(__pyx_tuple__72);
-  Py_CLEAR(__pyx_tuple__73);
-  Py_CLEAR(__pyx_codeobj__74);
-  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_codeobj__84);
-  Py_CLEAR(__pyx_tuple__85);
-  Py_CLEAR(__pyx_codeobj__86);
-  Py_CLEAR(__pyx_tuple__87);
-  Py_CLEAR(__pyx_codeobj__88);
-  Py_CLEAR(__pyx_tuple__89);
+  Py_CLEAR(__pyx_codeobj__73);
+  Py_CLEAR(__pyx_tuple__74);
+  Py_CLEAR(__pyx_codeobj__75);
+  Py_CLEAR(__pyx_tuple__76);
+  Py_CLEAR(__pyx_codeobj__77);
+  Py_CLEAR(__pyx_tuple__78);
+  Py_CLEAR(__pyx_codeobj__79);
+  Py_CLEAR(__pyx_tuple__80);
+  Py_CLEAR(__pyx_codeobj__81);
+  Py_CLEAR(__pyx_tuple__82);
+  Py_CLEAR(__pyx_codeobj__83);
+  Py_CLEAR(__pyx_tuple__84);
+  Py_CLEAR(__pyx_codeobj__85);
+  Py_CLEAR(__pyx_tuple__86);
+  Py_CLEAR(__pyx_codeobj__87);
+  Py_CLEAR(__pyx_tuple__88);
+  Py_CLEAR(__pyx_codeobj__89);
   Py_CLEAR(__pyx_tuple__90);
   Py_CLEAR(__pyx_codeobj__91);
   Py_CLEAR(__pyx_tuple__92);
   Py_CLEAR(__pyx_codeobj__93);
   Py_CLEAR(__pyx_tuple__94);
-  Py_CLEAR(__pyx_tuple__95);
-  Py_CLEAR(__pyx_codeobj__96);
-  Py_CLEAR(__pyx_tuple__97);
+  Py_CLEAR(__pyx_codeobj__95);
+  Py_CLEAR(__pyx_tuple__96);
+  Py_CLEAR(__pyx_codeobj__97);
   Py_CLEAR(__pyx_tuple__98);
   Py_CLEAR(__pyx_codeobj__99);
   Py_CLEAR(__pyx_tuple__100);
-  Py_CLEAR(__pyx_tuple__101);
-  Py_CLEAR(__pyx_codeobj__102);
-  Py_CLEAR(__pyx_tuple__103);
+  Py_CLEAR(__pyx_codeobj__101);
+  Py_CLEAR(__pyx_tuple__102);
+  Py_CLEAR(__pyx_codeobj__103);
   Py_CLEAR(__pyx_tuple__104);
-  Py_CLEAR(__pyx_codeobj__105);
-  Py_CLEAR(__pyx_tuple__106);
+  Py_CLEAR(__pyx_tuple__105);
+  Py_CLEAR(__pyx_codeobj__106);
   Py_CLEAR(__pyx_tuple__107);
   Py_CLEAR(__pyx_codeobj__108);
   Py_CLEAR(__pyx_tuple__109);
@@ -37934,6 +40088,38 @@ static CYTHON_SMALL_CODE void __Pyx_CleanupGlobals(void) {
   Py_CLEAR(__pyx_tuple__111);
   Py_CLEAR(__pyx_codeobj__112);
   Py_CLEAR(__pyx_tuple__113);
+  Py_CLEAR(__pyx_codeobj__114);
+  Py_CLEAR(__pyx_tuple__115);
+  Py_CLEAR(__pyx_codeobj__116);
+  Py_CLEAR(__pyx_tuple__117);
+  Py_CLEAR(__pyx_codeobj__118);
+  Py_CLEAR(__pyx_tuple__119);
+  Py_CLEAR(__pyx_codeobj__120);
+  Py_CLEAR(__pyx_tuple__121);
+  Py_CLEAR(__pyx_tuple__122);
+  Py_CLEAR(__pyx_codeobj__123);
+  Py_CLEAR(__pyx_tuple__124);
+  Py_CLEAR(__pyx_codeobj__125);
+  Py_CLEAR(__pyx_tuple__126);
+  Py_CLEAR(__pyx_tuple__127);
+  Py_CLEAR(__pyx_codeobj__128);
+  Py_CLEAR(__pyx_tuple__129);
+  Py_CLEAR(__pyx_tuple__130);
+  Py_CLEAR(__pyx_codeobj__131);
+  Py_CLEAR(__pyx_tuple__132);
+  Py_CLEAR(__pyx_tuple__133);
+  Py_CLEAR(__pyx_codeobj__134);
+  Py_CLEAR(__pyx_tuple__135);
+  Py_CLEAR(__pyx_tuple__136);
+  Py_CLEAR(__pyx_codeobj__137);
+  Py_CLEAR(__pyx_tuple__138);
+  Py_CLEAR(__pyx_tuple__139);
+  Py_CLEAR(__pyx_codeobj__140);
+  Py_CLEAR(__pyx_tuple__141);
+  Py_CLEAR(__pyx_codeobj__142);
+  Py_CLEAR(__pyx_tuple__143);
+  Py_CLEAR(__pyx_codeobj__144);
+  Py_CLEAR(__pyx_tuple__145);
   /* CodeObjectCache.cleanup */
   if (__pyx_code_cache.entries) {
       __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
@@ -38003,6 +40189,7 @@ static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
   Py_CLEAR(__pyx_builtin_AttributeError);
   Py_CLEAR(__pyx_builtin_oct);
   Py_CLEAR(__pyx_builtin_hex);
+  Py_CLEAR(__pyx_builtin_NotImplemented);
   Py_CLEAR(__pyx_builtin_enumerate);
   Py_CLEAR(__pyx_builtin_map);
   Py_CLEAR(__pyx_builtin_MemoryError);
@@ -38205,7 +40392,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -40099,7 +42286,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
         result = PyFrozenSet_New(it);
         if (unlikely(!result))
             return NULL;
-        if (likely(PySet_GET_SIZE(result)))
+        if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result)))
             return result;
         Py_DECREF(result);
 #endif
@@ -41073,7 +43260,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
index d1880ffbd7cf15f12817e7b2a965375c7449c2fe..32b64cf90623ab4a6e686ba045dc4bce7fb1425c 100644 (file)
@@ -609,8 +609,10 @@ cdef class ObjectifiedDataElement(ObjectifiedElement):
         """
         cetree.setNodeText(self._c_node, s)
 
+
 cdef class NumberElement(ObjectifiedDataElement):
     cdef object _parse_value
+
     def _setValueParser(self, function):
         u"""Set the function that parses the Python value from a string.
 
@@ -655,27 +657,63 @@ cdef class NumberElement(ObjectifiedDataElement):
     def __add__(self, other):
         return _numericValueOf(self) + _numericValueOf(other)
 
+    def __radd__(self, other):
+        return _numericValueOf(other) + _numericValueOf(self)
+
     def __sub__(self, other):
         return _numericValueOf(self) - _numericValueOf(other)
 
+    def __rsub__(self, other):
+        return _numericValueOf(other) - _numericValueOf(self)
+
     def __mul__(self, other):
         return _numericValueOf(self) * _numericValueOf(other)
 
+    def __rmul__(self, other):
+        return _numericValueOf(other) * _numericValueOf(self)
+
     def __div__(self, other):
         return _numericValueOf(self) / _numericValueOf(other)
 
+    def __rdiv__(self, other):
+        return _numericValueOf(other) / _numericValueOf(self)
+
     def __truediv__(self, other):
         return _numericValueOf(self) / _numericValueOf(other)
 
+    def __rtruediv__(self, other):
+        return _numericValueOf(other) / _numericValueOf(self)
+
+    def __floordiv__(self, other):
+        return _numericValueOf(self) // _numericValueOf(other)
+
+    def __rfloordiv__(self, other):
+        return _numericValueOf(other) // _numericValueOf(self)
+
     def __mod__(self, other):
         return _numericValueOf(self) % _numericValueOf(other)
 
+    def __rmod__(self, other):
+        return _numericValueOf(other) % _numericValueOf(self)
+
+    def __divmod__(self, other):
+        return divmod(_numericValueOf(self), _numericValueOf(other))
+
+    def __rdivmod__(self, other):
+        return divmod(_numericValueOf(other), _numericValueOf(self))
+
     def __pow__(self, other, modulo):
         if modulo is None:
             return _numericValueOf(self) ** _numericValueOf(other)
         else:
             return pow(_numericValueOf(self), _numericValueOf(other), modulo)
 
+    def __rpow__(self, other, modulo):
+        if modulo is None:
+            return _numericValueOf(other) ** _numericValueOf(self)
+        else:
+            return pow(_numericValueOf(other), _numericValueOf(self), modulo)
+
     def __neg__(self):
         return - _numericValueOf(self)
 
@@ -685,7 +723,7 @@ cdef class NumberElement(ObjectifiedDataElement):
     def __abs__(self):
         return abs( _numericValueOf(self) )
 
-    def __nonzero__(self):
+    def __bool__(self):
         return bool(_numericValueOf(self))
 
     def __invert__(self):
@@ -694,18 +732,34 @@ cdef class NumberElement(ObjectifiedDataElement):
     def __lshift__(self, other):
         return _numericValueOf(self) << _numericValueOf(other)
 
+    def __rlshift__(self, other):
+        return _numericValueOf(other) << _numericValueOf(self)
+
     def __rshift__(self, other):
         return _numericValueOf(self) >> _numericValueOf(other)
 
+    def __rrshift__(self, other):
+        return _numericValueOf(other) >> _numericValueOf(self)
+
     def __and__(self, other):
         return _numericValueOf(self) & _numericValueOf(other)
 
+    def __rand__(self, other):
+        return _numericValueOf(other) & _numericValueOf(self)
+
     def __or__(self, other):
         return _numericValueOf(self) | _numericValueOf(other)
 
+    def __ror__(self, other):
+        return _numericValueOf(other) | _numericValueOf(self)
+
     def __xor__(self, other):
         return _numericValueOf(self) ^ _numericValueOf(other)
 
+    def __rxor__(self, other):
+        return _numericValueOf(other) ^ _numericValueOf(self)
+
+
 cdef class IntElement(NumberElement):
     def _init(self):
         self._parse_value = int
@@ -713,6 +767,7 @@ cdef class IntElement(NumberElement):
     def __index__(self):
         return int(_parseNumber(self))
 
+
 cdef class LongElement(NumberElement):
     def _init(self):
         self._parse_value = long
@@ -720,10 +775,12 @@ cdef class LongElement(NumberElement):
     def __index__(self):
         return int(_parseNumber(self))
 
+
 cdef class FloatElement(NumberElement):
     def _init(self):
         self._parse_value = float
 
+
 cdef class StringElement(ObjectifiedDataElement):
     u"""String data class.
 
@@ -745,7 +802,7 @@ cdef class StringElement(ObjectifiedDataElement):
         else:
             return len(text)
 
-    def __nonzero__(self):
+    def __bool__(self):
         return bool(textOf(self._c_node))
 
     def __richcmp__(self, other, int op):
@@ -757,22 +814,26 @@ cdef class StringElement(ObjectifiedDataElement):
     def __add__(self, other):
         text  = _strValueOf(self)
         other = _strValueOf(other)
-        if text is None:
-            return other
-        if other is None:
-            return text
         return text + other
 
+    def __radd__(self, other):
+        text  = _strValueOf(self)
+        other = _strValueOf(other)
+        return other + text
+
     def __mul__(self, other):
         if isinstance(self, StringElement):
-            return textOf((<StringElement>self)._c_node) * _numericValueOf(other)
+            return (textOf((<StringElement>self)._c_node) or '') * _numericValueOf(other)
         elif isinstance(other, StringElement):
-            return _numericValueOf(self) * textOf((<StringElement>other)._c_node)
+            return _numericValueOf(self) * (textOf((<StringElement>other)._c_node) or '')
         else:
-            raise TypeError, u"invalid types for * operator"
+            return NotImplemented
+
+    def __rmul__(self, other):
+        return _numericValueOf(other) * (textOf((<StringElement>self)._c_node) or '')
 
     def __mod__(self, other):
-        return _strValueOf(self) % other
+        return (_strValueOf(self) or '') % other
 
     def __int__(self):
         return int(textOf(self._c_node))
@@ -786,6 +847,7 @@ cdef class StringElement(ObjectifiedDataElement):
     def __complex__(self):
         return complex(textOf(self._c_node))
 
+
 cdef class NoneElement(ObjectifiedDataElement):
     def __str__(self):
         return u"None"
@@ -793,7 +855,7 @@ cdef class NoneElement(ObjectifiedDataElement):
     def __repr__(self):
         return "None"
 
-    def __nonzero__(self):
+    def __bool__(self):
         return False
 
     def __richcmp__(self, other, int op):
@@ -821,9 +883,15 @@ cdef class BoolElement(IntElement):
     def _init(self):
         self._parse_value = __parseBool
 
-    def __nonzero__(self):
+    def __bool__(self):
         return __parseBool(textOf(self._c_node))
 
+    def __int__(self):
+        return 0 + __parseBool(textOf(self._c_node))
+
+    def __float__(self):
+        return 0.0 + __parseBool(textOf(self._c_node))
+
     def __richcmp__(self, other, int op):
         return _richcmpPyvals(self, other, op)
 
@@ -840,6 +908,7 @@ cdef class BoolElement(IntElement):
     def pyval(self):
         return __parseBool(textOf(self._c_node))
 
+
 def __checkBool(s):
     cdef int value = -1
     if s is not None:
@@ -847,6 +916,7 @@ def __checkBool(s):
     if value == -1:
         raise ValueError
 
+
 cpdef bint __parseBool(s) except -1:
     cdef int value
     if s is None:
@@ -856,6 +926,7 @@ cpdef bint __parseBool(s) except -1:
         raise ValueError, f"Invalid boolean value: '{s}'"
     return value
 
+
 cdef inline int __parseBoolAsInt(text) except -2:
     if text == 'false':
         return 0
@@ -867,9 +938,11 @@ cdef inline int __parseBoolAsInt(text) except -2:
         return 1
     return -1
 
+
 cdef object _parseNumber(NumberElement element):
     return element._parse_value(textOf(element._c_node))
 
+
 cdef object _strValueOf(obj):
     if python._isString(obj):
         return obj
@@ -879,6 +952,7 @@ cdef object _strValueOf(obj):
         return u''
     return unicode(obj)
 
+
 cdef object _numericValueOf(obj):
     if isinstance(obj, NumberElement):
         return _parseNumber(<NumberElement>obj)
@@ -889,6 +963,7 @@ cdef object _numericValueOf(obj):
         pass
     return obj
 
+
 cdef _richcmpPyvals(left, right, int op):
     left  = getattr(left,  'pyval', left)
     right = getattr(right, 'pyval', right)
index 4622297b115ef9f4cb36dcfb7dce4b22d7a6d109..c309748bdbc64a797af81ead3e676ebaad3d407f 100644 (file)
@@ -1,40 +1,39 @@
-/* Generated by Cython 0.29.22 */
+/* Generated by Cython 0.29.24 */
 
 /* BEGIN: Cython Metadata
 {
     "distutils": {
         "define_macros": [
             [
-                "CYTHON_CLINE_IN_TRACEBACK", 
+                "CYTHON_CLINE_IN_TRACEBACK",
                 "0"
             ]
-        ], 
-        "extra_compile_args": [
-            "-w"
-        ], 
+        ],
         "include_dirs": [
-            "/usr/include/libxml2", 
-            "src", 
+            "/usr/include/libxml2",
+            "src",
             "src/lxml/includes"
-        ], 
-        "name": "lxml.sax", 
+        ],
+        "name": "lxml.sax",
         "sources": [
             "src/lxml/sax.py"
         ]
-    }, 
+    },
     "module_name": "lxml.sax"
 }
 END: Cython Metadata */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* 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 < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_22"
-#define CYTHON_HEX_VERSION 0x001D16F0
+#define CYTHON_ABI "0_29_24"
+#define CYTHON_HEX_VERSION 0x001D18F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -452,8 +451,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #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)
@@ -462,7 +465,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #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)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -9833,11 +9840,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -10841,7 +10846,7 @@ bad:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -12939,7 +12944,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
index d66f59a7e508d5cdf925e2e70d71e27345b4e873..e5cd36748930e92761910fde80fb86fef99ae5d3 100644 (file)
@@ -68,8 +68,7 @@ cdef _textToString(xmlNode* c_node, encoding, bint with_tail):
                     needs_conversion = 1
 
         if needs_conversion:
-            text = python.PyUnicode_DecodeUTF8(
-                <const_char*>c_text, tree.xmlBufferLength(c_buffer), 'strict')
+            text = (<const_char*>c_text)[:tree.xmlBufferLength(c_buffer)].decode('utf8')
             if encoding is not unicode:
                 encoding = _utf8(encoding)
                 text = python.PyUnicode_AsEncodedString(
diff --git a/src/lxml/tests/fuzz_xml_parse.py b/src/lxml/tests/fuzz_xml_parse.py
new file mode 100644 (file)
index 0000000..980d8d0
--- /dev/null
@@ -0,0 +1,25 @@
+"""
+Fuzzes the lxml.etree.XML function with the Atheris fuzzer.
+
+The goal is to catch unhandled exceptions and potential 
+memory corruption issues in auto-generated code.
+"""
+
+import atheris
+import sys
+
+from lxml import etree
+
+
+def test_etree_xml(data):
+    fdp = atheris.FuzzedDataProvider(data)
+    try:
+        etree.XML(fdp.ConsumeUnicode(sys.maxsize))
+    except etree.XMLSyntaxError:
+        pass
+    return
+
+
+if __name__ == "__main__":
+    atheris.Setup(sys.argv, test_etree_xml, enable_python_coverage=True)
+    atheris.Fuzz()
index 0f06b73993c86eefe4b6553e8b680c263726487e..779f9e849cb4791528c33447cf82eff3bb3a09de 100644 (file)
@@ -403,6 +403,14 @@ class ETreeDtdTestCase(HelperTestCase):
         self.assertEqual(etree.tostring(doc),
                          _bytes(data))
 
+    def test_entity_system_url(self):
+        xml = etree.parse(BytesIO('<!DOCTYPE test [ <!ENTITY TestReference SYSTEM "./foo.bar"> ]><a/>'))
+        self.assertEqual(xml.docinfo.internalDTD.entities()[0].system_url, "./foo.bar")
+
+    def test_entity_system_url_none(self):
+        xml = etree.parse(BytesIO('<!DOCTYPE test [ <!ENTITY TestReference "testvalue"> ]><a/>'))
+        self.assertEqual(xml.docinfo.internalDTD.entities()[0].system_url, None)
+
 
 def test_suite():
     suite = unittest.TestSuite()
index 9cf70604b1566e2bc17ad299c15397987966ccbe..42613dcbe691da67115f3119b47d5f4adc88720a 100644 (file)
@@ -3036,7 +3036,10 @@ class ETreeOnlyTestCase(HelperTestCase):
     def test_html_prefix_nsmap(self):
         etree = self.etree
         el = etree.HTML('<hha:page-description>aa</hha:page-description>').find('.//page-description')
-        self.assertEqual({'hha': None}, el.nsmap)
+        if etree.LIBXML_VERSION < (2, 9, 11):
+            self.assertEqual({'hha': None}, el.nsmap)
+        else:
+            self.assertEqual({}, el.nsmap)
 
     def test_getchildren(self):
         Element = self.etree.Element
diff --git a/test.py b/test.py
index dd05cf8d64fa777e3225077ec4947620a63d9d79..45d52a9e0e6bf7bdb097dcc90c9bea96f72ceeb5 100644 (file)
--- a/test.py
+++ b/test.py
@@ -545,8 +545,8 @@ def main(argv):
     # Set up tracing before we start importing things
     cov = None
     if cfg.run_tests and cfg.coverage:
-        from coverage import coverage
-        cov = coverage(omit=['test.py'])
+        from coverage import Coverage
+        cov = Coverage(omit=['test.py'])
 
     # Finding and importing
     test_files = get_test_files(cfg)
index 65d760299870a2523e73cdd2eff81b8a3a72a92b..3431df47358b285e0387eccedb1c572fe0ae0e02 100755 (executable)
@@ -9,6 +9,7 @@ REQUIREMENTS=/io/requirements.txt
 SDIST=$1
 PACKAGE=$(basename ${SDIST%-*})
 SDIST_PREFIX=$(basename ${SDIST%%.tar.gz})
+[ -z "$PYTHON_BUILD_VERSION" ] && PYTHON_BUILD_VERSION="*"
 
 build_wheel() {
     pybin="$1"
@@ -16,6 +17,7 @@ build_wheel() {
     [ -n "$source" ] || source=/io
 
     env STATIC_DEPS=true \
+        RUN_TESTS=true \
         LDFLAGS="$LDFLAGS -fPIC" \
         CFLAGS="$CFLAGS -fPIC" \
         ${pybin}/pip \
@@ -26,7 +28,7 @@ build_wheel() {
 
 run_tests() {
     # Install packages and test
-    for PYBIN in /opt/python/*/bin/; do
+    for PYBIN in /opt/python/${PYTHON_BUILD_VERSION}/bin/; do
         ${PYBIN}/python -m pip install $PACKAGE --no-index -f /io/$WHEELHOUSE || exit 1
 
         # check import as a quick test
@@ -47,7 +49,7 @@ build_wheels() {
     FIRST=
     SECOND=
     THIRD=
-    for PYBIN in /opt/python/*/bin; do
+    for PYBIN in /opt/python/${PYTHON_BUILD_VERSION}/bin; do
         # Install build requirements if we need them and file exists
         test -n "$source" -o ! -e "$REQUIREMENTS" \
             || ${PYBIN}/python -m pip install -r "$REQUIREMENTS"